summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-05 14:42:50 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-05 14:42:50 (GMT)
commit18dbdc3e40e19a7266c19924537e6914840adbe5 (patch)
tree700d77c8a89fe5fd93e3b1d7fd56c96d41d7a194 /tests
parenta573f6dc86fd4e5c16c4e9d7167d12f50208374b (diff)
parent8ceba044853804c9710cd28a34999bde36368db9 (diff)
downloadtcl-18dbdc3e40e19a7266c19924537e6914840adbe5.zip
tcl-18dbdc3e40e19a7266c19924537e6914840adbe5.tar.gz
tcl-18dbdc3e40e19a7266c19924537e6914840adbe5.tar.bz2
TIP #413
Diffstat (limited to 'tests')
-rw-r--r--tests/string.test12
1 files changed, 6 insertions, 6 deletions
diff --git a/tests/string.test b/tests/string.test
index e86c0de..f558d30 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -1484,8 +1484,8 @@ test string-18.11 {string trim, unicode} {
string trim "\xe7\xe8 AB\xe7C \xe8\xe7" \xe7\xe8
} " AB\xe7C "
test string-18.12 {string trim, unicode default} {
- string trim ABC\u1361\u1680\u3000
-} ABC
+ string trim \ufeff\x00\u0085\u00a0\u1680\u180eABC\u1361\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000
+} ABC\u1361
test string-19.1 {string trimleft} {
list [catch {string trimleft} msg] $msg
@@ -1494,8 +1494,8 @@ test string-19.2 {string trimleft} {
string trimleft " XYZ "
} {XYZ }
test string-19.3 {string trimleft, unicode default} {
- string trimleft \u1361\u1680\u3000ABC
-} ABC
+ string trimleft \ufeff\u0085\u00a0\x00\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000\u1361ABC
+} \u1361ABC
test string-20.1 {string trimright errors} {
list [catch {string trimright} msg] $msg
@@ -1513,8 +1513,8 @@ test string-20.5 {string trimright} {
string trimright ""
} {}
test string-20.6 {string trimright, unicode default} {
- string trimright ABC\u1361\u1680\u3000
-} ABC
+ string trimright ABC\u1361\u0085\x00\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000
+} ABC\u1361
test string-21.1 {string wordend} {
list [catch {string wordend a} msg] $msg
> -rw-r--r--doc/src/declarative/javascriptblocks.qdoc10
-rw-r--r--doc/src/declarative/modules.qdoc10
-rw-r--r--doc/src/declarative/network.qdoc10
-rw-r--r--doc/src/declarative/positioners.qdoc10
-rw-r--r--doc/src/declarative/propertybinding.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativedebugging.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativedocument.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativei18n.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativeintro.qdoc16
-rw-r--r--doc/src/declarative/qdeclarativemodels.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativeperformance.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativereference.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativesecurity.qdoc10
-rw-r--r--doc/src/declarative/qdeclarativestates.qdoc10
-rw-r--r--doc/src/declarative/qml-intro.qdoc10
-rw-r--r--doc/src/declarative/qmlruntime.qdoc10
-rw-r--r--doc/src/declarative/qmlviewer.qdoc10
-rw-r--r--doc/src/declarative/qtbinding.qdoc641
-rw-r--r--doc/src/declarative/qtdeclarative.qdoc10
-rw-r--r--doc/src/declarative/qtprogrammers.qdoc10
-rw-r--r--doc/src/declarative/scope.qdoc10
-rw-r--r--doc/src/declarative/tutorial.qdoc10
-rw-r--r--doc/src/declarative/whatsnew.qdoc10
-rw-r--r--doc/src/demos/affine.qdoc10
-rw-r--r--doc/src/demos/anomaly.qdoc10
-rw-r--r--doc/src/demos/arthurplugin.qdoc10
-rw-r--r--doc/src/demos/books.qdoc10
-rw-r--r--doc/src/demos/boxes.qdoc10
-rw-r--r--doc/src/demos/browser.qdoc10
-rw-r--r--doc/src/demos/chip.qdoc10
-rw-r--r--doc/src/demos/composition.qdoc10
-rw-r--r--doc/src/demos/deform.qdoc10
-rw-r--r--doc/src/demos/desktopservices.qdoc10
-rw-r--r--doc/src/demos/digiflip.qdoc10
-rw-r--r--doc/src/demos/embeddeddialogs.qdoc10
-rw-r--r--doc/src/demos/embeddedsvgviewer.qdoc10
-rw-r--r--doc/src/demos/flickable.qdoc10
-rw-r--r--doc/src/demos/flightinfo.qdoc10
-rw-r--r--doc/src/demos/fluidlauncher.qdoc10
-rw-r--r--doc/src/demos/gradients.qdoc10
-rw-r--r--doc/src/demos/interview.qdoc10
-rw-r--r--doc/src/demos/lightmaps.qdoc10
-rw-r--r--doc/src/demos/macmainwindow.qdoc10
-rw-r--r--doc/src/demos/mainwindow.qdoc10
-rw-r--r--doc/src/demos/mediaplayer.qdoc10
-rw-r--r--doc/src/demos/pathstroke.qdoc10
-rw-r--r--doc/src/demos/qtdemo.qdoc10
-rw-r--r--doc/src/demos/raycasting.qdoc10
-rw-r--r--doc/src/demos/spectrum.qdoc10
-rw-r--r--doc/src/demos/spreadsheet.qdoc10
-rw-r--r--doc/src/demos/sqlbrowser.qdoc10
-rw-r--r--doc/src/demos/styledemo.qdoc10
-rw-r--r--doc/src/demos/sub-attaq.qdoc10
-rw-r--r--doc/src/demos/textedit.qdoc10
-rw-r--r--doc/src/demos/undo.qdoc10
-rw-r--r--doc/src/demos/weatherinfo.qdoc10
-rw-r--r--doc/src/deployment/deployment-plugins.qdoc10
-rw-r--r--doc/src/deployment/deployment.qdoc11
-rw-r--r--doc/src/deployment/qt-conf.qdoc10
-rw-r--r--doc/src/deployment/qtconfig.qdoc10
-rw-r--r--doc/src/development/activeqt-dumpcpp.qdoc10
-rw-r--r--doc/src/development/activeqt-dumpdoc.qdoc10
-rw-r--r--doc/src/development/activeqt-idc.qdoc10
-rw-r--r--doc/src/development/activeqt-testcon.qdoc10
-rw-r--r--doc/src/development/assistant-manual.qdoc10
-rw-r--r--doc/src/development/debug.qdoc10
-rw-r--r--doc/src/development/designer-manual.qdoc166
-rw-r--r--doc/src/development/developing-on-mac.qdoc10
-rw-r--r--doc/src/development/developing-with-qt.qdoc16
-rw-r--r--doc/src/development/moc.qdoc10
-rw-r--r--doc/src/development/qmake-manual.qdoc37
-rw-r--r--doc/src/development/qmsdev.qdoc10
-rw-r--r--doc/src/development/qtestlib.qdoc44
-rw-r--r--doc/src/development/rcc.qdoc10
-rw-r--r--doc/src/development/tools-list.qdoc10
-rw-r--r--doc/src/development/uic.qdoc10
-rw-r--r--doc/src/examples/2dpainting.qdoc10
-rw-r--r--doc/src/examples/activeqt/comapp.qdoc10
-rw-r--r--doc/src/examples/activeqt/dotnet.qdoc10
-rw-r--r--doc/src/examples/activeqt/hierarchy.qdoc10
-rw-r--r--doc/src/examples/activeqt/menus.qdoc10
-rw-r--r--doc/src/examples/activeqt/multiple.qdoc10
-rw-r--r--doc/src/examples/activeqt/opengl.qdoc10
-rw-r--r--doc/src/examples/activeqt/qutlook.qdoc10
-rw-r--r--doc/src/examples/activeqt/simple.qdoc10
-rw-r--r--doc/src/examples/activeqt/webbrowser.qdoc10
-rw-r--r--doc/src/examples/activeqt/wrapper.qdoc10
-rw-r--r--doc/src/examples/addressbook.qdoc10
-rw-r--r--doc/src/examples/analogclock.qdoc10
-rw-r--r--doc/src/examples/animatedtiles.qdoc10
-rw-r--r--doc/src/examples/appchooser.qdoc10
-rw-r--r--doc/src/examples/application.qdoc10
-rw-r--r--doc/src/examples/arrowpad.qdoc10
-rw-r--r--doc/src/examples/audiodevices.qdoc10
-rw-r--r--doc/src/examples/audioinput.qdoc10
-rw-r--r--doc/src/examples/audiooutput.qdoc10
-rw-r--r--doc/src/examples/basicdrawing.qdoc10
-rw-r--r--doc/src/examples/basicgraphicslayouts.qdoc10
-rw-r--r--doc/src/examples/basiclayouts.qdoc12
-rw-r--r--doc/src/examples/basicsortfiltermodel.qdoc10
-rw-r--r--doc/src/examples/bearercloud.qdoc10
-rw-r--r--doc/src/examples/bearermonitor.qdoc10
-rw-r--r--doc/src/examples/blockingfortuneclient.qdoc10
-rw-r--r--doc/src/examples/blurpicker.qdoc10
-rw-r--r--doc/src/examples/borderlayout.qdoc10
-rw-r--r--doc/src/examples/broadcastreceiver.qdoc10
-rw-r--r--doc/src/examples/broadcastsender.qdoc10
-rw-r--r--doc/src/examples/cachedtable.qdoc10
-rw-r--r--doc/src/examples/calculator.qdoc10
-rw-r--r--doc/src/examples/calculatorbuilder.qdoc10
-rw-r--r--doc/src/examples/calculatorform.qdoc10
-rw-r--r--doc/src/examples/calendar.qdoc10
-rw-r--r--doc/src/examples/calendarwidget.qdoc10
-rw-r--r--doc/src/examples/capabilitiesexample.qdoc10
-rw-r--r--doc/src/examples/charactermap.qdoc10
-rw-r--r--doc/src/examples/chart.qdoc10
-rw-r--r--doc/src/examples/classwizard.qdoc10
-rw-r--r--doc/src/examples/codecs.qdoc10
-rw-r--r--doc/src/examples/codeeditor.qdoc10
-rw-r--r--doc/src/examples/collidingmice-example.qdoc10
-rw-r--r--doc/src/examples/coloreditorfactory.qdoc10
-rw-r--r--doc/src/examples/combowidgetmapper.qdoc10
-rw-r--r--doc/src/examples/completer.qdoc10
-rw-r--r--doc/src/examples/complexpingpong.qdoc10
-rw-r--r--doc/src/examples/concentriccircles.qdoc10
-rw-r--r--doc/src/examples/configdialog.qdoc10
-rw-r--r--doc/src/examples/containerextension.qdoc10
-rw-r--r--doc/src/examples/context2d.qdoc10
-rw-r--r--doc/src/examples/contextsensitivehelp.qdoc10
-rw-r--r--doc/src/examples/contiguouscache.qdoc10
-rw-r--r--doc/src/examples/customcompleter.qdoc10
-rw-r--r--doc/src/examples/customsortfiltermodel.qdoc10
-rw-r--r--doc/src/examples/customtype.qdoc10
-rw-r--r--doc/src/examples/customtypesending.qdoc27
-rw-r--r--doc/src/examples/customwidgetplugin.qdoc10
-rw-r--r--doc/src/examples/dbscreen.qdoc10
-rw-r--r--doc/src/examples/dbus-chat.qdoc10
-rw-r--r--doc/src/examples/dbus-listnames.qdoc10
-rw-r--r--doc/src/examples/dbus-pingpong.qdoc10
-rw-r--r--doc/src/examples/dbus-remotecontrolledcar.qdoc10
-rw-r--r--doc/src/examples/defaultprototypes.qdoc10
-rw-r--r--doc/src/examples/delayedencoding.qdoc10
-rw-r--r--doc/src/examples/diagramscene.qdoc10
-rw-r--r--doc/src/examples/digitalclock.qdoc10
-rw-r--r--doc/src/examples/dirview.qdoc10
-rw-r--r--doc/src/examples/dockwidgets.qdoc10
-rw-r--r--doc/src/examples/dombookmarks.qdoc10
-rw-r--r--doc/src/examples/domtraversal.qdoc10
-rw-r--r--doc/src/examples/draganddroppuzzle.qdoc10
-rw-r--r--doc/src/examples/dragdroprobot.qdoc10
-rw-r--r--doc/src/examples/draggableicons.qdoc10
-rw-r--r--doc/src/examples/draggabletext.qdoc10
-rw-r--r--doc/src/examples/drilldown.qdoc10
-rw-r--r--doc/src/examples/dropsite.qdoc10
-rw-r--r--doc/src/examples/dynamiclayouts.qdoc10
-rw-r--r--doc/src/examples/easing.qdoc10
-rw-r--r--doc/src/examples/echoplugin.qdoc10
-rw-r--r--doc/src/examples/editabletreemodel.qdoc10
-rw-r--r--doc/src/examples/elasticnodes.qdoc10
-rw-r--r--doc/src/examples/eventtransitions.qdoc10
-rw-r--r--doc/src/examples/extension.qdoc10
-rw-r--r--doc/src/examples/factorial.qdoc10
-rw-r--r--doc/src/examples/fademessage.qdoc10
-rw-r--r--doc/src/examples/fancybrowser.qdoc10
-rw-r--r--doc/src/examples/fetchmore.qdoc10
-rw-r--r--doc/src/examples/filetree.qdoc10
-rw-r--r--doc/src/examples/findfiles.qdoc10
-rw-r--r--doc/src/examples/fingerpaint.qdoc10
-rw-r--r--doc/src/examples/flowlayout.qdoc10
-rw-r--r--doc/src/examples/fontsampler.qdoc10
-rw-r--r--doc/src/examples/formextractor.qdoc10
-rw-r--r--doc/src/examples/fortuneclient.qdoc10
-rw-r--r--doc/src/examples/fortuneserver.qdoc10
-rw-r--r--doc/src/examples/framebufferobject.qdoc10
-rw-r--r--doc/src/examples/framebufferobject2.qdoc10
-rw-r--r--doc/src/examples/fridgemagnets.qdoc10
-rw-r--r--doc/src/examples/frozencolumn.qdoc10
-rw-r--r--doc/src/examples/ftp.qdoc10
-rw-r--r--doc/src/examples/globalVariables.qdoc10
-rw-r--r--doc/src/examples/googlechat.qdoc10
-rw-r--r--doc/src/examples/googlesuggest.qdoc10
-rw-r--r--doc/src/examples/grabber.qdoc10
-rw-r--r--doc/src/examples/graphicsview-anchorlayout.qdoc10
-rw-r--r--doc/src/examples/graphicsview-flowlayout.qdoc10
-rw-r--r--doc/src/examples/graphicsview-simpleanchorlayout.qdoc10
-rw-r--r--doc/src/examples/graphicsview-weatheranchorlayout.qdoc10
-rw-r--r--doc/src/examples/groupbox.qdoc10
-rw-r--r--doc/src/examples/hellogl.qdoc10
-rw-r--r--doc/src/examples/hellogl_es.qdoc10
-rw-r--r--doc/src/examples/helloscript.qdoc10
-rw-r--r--doc/src/examples/hellotr.qdoc10
-rw-r--r--doc/src/examples/htmlinfo.qdoc10
-rw-r--r--doc/src/examples/http.qdoc10
-rw-r--r--doc/src/examples/i18n.qdoc10
-rw-r--r--doc/src/examples/icons.qdoc10
-rw-r--r--doc/src/examples/imagecomposition.qdoc10
-rw-r--r--doc/src/examples/imagegestures.qdoc10
-rw-r--r--doc/src/examples/imageviewer.qdoc10
-rw-r--r--doc/src/examples/inputpanel.qdoc10
-rw-r--r--doc/src/examples/itemviewspuzzle.qdoc10
-rw-r--r--doc/src/examples/licensewizard.qdoc10
-rw-r--r--doc/src/examples/lighting.qdoc10
-rw-r--r--doc/src/examples/lineedits.qdoc10
-rw-r--r--doc/src/examples/localfortuneclient.qdoc10
-rw-r--r--doc/src/examples/localfortuneserver.qdoc10
-rw-r--r--doc/src/examples/loopback.qdoc10
-rw-r--r--doc/src/examples/mandelbrot.qdoc10
-rw-r--r--doc/src/examples/masterdetail.qdoc10
-rw-r--r--doc/src/examples/mdi.qdoc10
-rw-r--r--doc/src/examples/menus.qdoc10
-rw-r--r--doc/src/examples/mousecalibration.qdoc10
-rw-r--r--doc/src/examples/moveblocks.qdoc10
-rw-r--r--doc/src/examples/movie.qdoc10
-rw-r--r--doc/src/examples/multipleinheritance.qdoc10
-rw-r--r--doc/src/examples/musicplayerexample.qdoc10
-rw-r--r--doc/src/examples/network-chat.qdoc10
-rw-r--r--doc/src/examples/network-download.qdoc10
-rw-r--r--doc/src/examples/network-downloadmanager.qdoc10
-rw-r--r--doc/src/examples/openvg-star.qdoc10
-rw-r--r--doc/src/examples/orderform.qdoc10
-rw-r--r--doc/src/examples/overpainting.qdoc10
-rw-r--r--doc/src/examples/padnavigator.qdoc10
-rw-r--r--doc/src/examples/painterpaths.qdoc10
-rw-r--r--doc/src/examples/pbuffers.qdoc10
-rw-r--r--doc/src/examples/pbuffers2.qdoc10
-rw-r--r--doc/src/examples/pinchzoom.qdoc10
-rw-r--r--doc/src/examples/pingpong.qdoc10
-rw-r--r--doc/src/examples/pixelator.qdoc10
-rw-r--r--doc/src/examples/plugandpaint.qdoc10
-rw-r--r--doc/src/examples/portedasteroids.qdoc10
-rw-r--r--doc/src/examples/portedcanvas.qdoc10
-rw-r--r--doc/src/examples/previewer.qdoc10
-rw-r--r--doc/src/examples/qml-calculator.qdoc10
-rw-r--r--doc/src/examples/qml-examples.qdoc41
-rw-r--r--doc/src/examples/qml-extending.qdoc10
-rw-r--r--doc/src/examples/qml-flickr.qdoc10
-rw-r--r--doc/src/examples/qml-folderlistmodel.qdoc10
-rw-r--r--doc/src/examples/qml-minehunt.qdoc10
-rw-r--r--doc/src/examples/qml-photoviewer.qdoc10
-rw-r--r--doc/src/examples/qml-rssnews.qdoc10
-rw-r--r--doc/src/examples/qml-samegame.qdoc10
-rw-r--r--doc/src/examples/qml-snake.qdoc10
-rw-r--r--doc/src/examples/qml-twitter.qdoc10
-rw-r--r--doc/src/examples/qml-webbrowser.qdoc10
-rw-r--r--doc/src/examples/qobjectxmlmodel.qdoc10
-rw-r--r--doc/src/examples/qtconcurrent-imagescaling.qdoc10
-rw-r--r--doc/src/examples/qtconcurrent-map.qdoc10
-rw-r--r--doc/src/examples/qtconcurrent-progressdialog.qdoc10
-rw-r--r--doc/src/examples/qtconcurrent-runfunction.qdoc10
-rw-r--r--doc/src/examples/qtconcurrent-wordcount.qdoc10
-rw-r--r--doc/src/examples/qtscriptcalculator.qdoc10
-rw-r--r--doc/src/examples/qtscriptcustomclass.qdoc10
-rw-r--r--doc/src/examples/qtscripttetrix.qdoc10
-rw-r--r--doc/src/examples/querymodel.qdoc10
-rw-r--r--doc/src/examples/queuedcustomtype.qdoc10
-rw-r--r--doc/src/examples/qxmlstreambookmarks.qdoc10
-rw-r--r--doc/src/examples/recentfiles.qdoc10
-rw-r--r--doc/src/examples/recipes.qdoc10
-rw-r--r--doc/src/examples/regexp.qdoc10
-rw-r--r--doc/src/examples/relationaltablemodel.qdoc10
-rw-r--r--doc/src/examples/remotecontrol.qdoc10
-rw-r--r--doc/src/examples/rogue.qdoc10
-rw-r--r--doc/src/examples/rsslisting.qdoc10
-rw-r--r--doc/src/examples/samplebuffers.qdoc10
-rw-r--r--doc/src/examples/saxbookmarks.qdoc10
-rw-r--r--doc/src/examples/schema.qdoc10
-rw-r--r--doc/src/examples/screenshot.qdoc10
-rw-r--r--doc/src/examples/scribble.qdoc10
-rw-r--r--doc/src/examples/script-marshal.qdoc10
-rw-r--r--doc/src/examples/script-qscript.qdoc10
-rw-r--r--doc/src/examples/script-qsdbg.qdoc10
-rw-r--r--doc/src/examples/sdi.qdoc10
-rw-r--r--doc/src/examples/securesocketclient.qdoc10
-rw-r--r--doc/src/examples/semaphores.qdoc10
-rw-r--r--doc/src/examples/settingseditor.qdoc10
-rw-r--r--doc/src/examples/shapedclock.qdoc10
-rw-r--r--doc/src/examples/sharedmemory.qdoc10
-rw-r--r--doc/src/examples/simpledecoration.qdoc10
-rw-r--r--doc/src/examples/simpledommodel.qdoc10
-rw-r--r--doc/src/examples/simpleselector.qdoc10
-rw-r--r--doc/src/examples/simpletextviewer.qdoc10
-rw-r--r--doc/src/examples/simpletreemodel.qdoc10
-rw-r--r--doc/src/examples/simplewidgetmapper.qdoc10
-rw-r--r--doc/src/examples/sipdialog.qdoc10
-rw-r--r--doc/src/examples/sliders.qdoc10
-rw-r--r--doc/src/examples/spinboxdelegate.qdoc10
-rw-r--r--doc/src/examples/spinboxes.qdoc10
-rw-r--r--doc/src/examples/sqlwidgetmapper.qdoc10
-rw-r--r--doc/src/examples/standarddialogs.qdoc10
-rw-r--r--doc/src/examples/stardelegate.qdoc10
-rw-r--r--doc/src/examples/states.qdoc10
-rw-r--r--doc/src/examples/stickman.qdoc10
-rw-r--r--doc/src/examples/styleplugin.qdoc10
-rw-r--r--doc/src/examples/styles.qdoc10
-rw-r--r--doc/src/examples/stylesheet.qdoc10
-rw-r--r--doc/src/examples/svgalib.qdoc10
-rw-r--r--doc/src/examples/svggenerator.qdoc10
-rw-r--r--doc/src/examples/svgviewer.qdoc10
-rw-r--r--doc/src/examples/syntaxhighlighter.qdoc10
-rw-r--r--doc/src/examples/systray.qdoc10
-rw-r--r--doc/src/examples/tabdialog.qdoc10
-rw-r--r--doc/src/examples/tablemodel.qdoc10
-rw-r--r--doc/src/examples/tablet.qdoc10
-rw-r--r--doc/src/examples/taskmenuextension.qdoc10
-rw-r--r--doc/src/examples/tetrix.qdoc10
-rw-r--r--doc/src/examples/textfinder.qdoc10
-rw-r--r--doc/src/examples/textobject.qdoc10
-rw-r--r--doc/src/examples/textures.qdoc10
-rw-r--r--doc/src/examples/threadedfortuneserver.qdoc10
-rw-r--r--doc/src/examples/tooltips.qdoc10
-rw-r--r--doc/src/examples/torrent.qdoc10
-rw-r--r--doc/src/examples/touch-dials.qdoc10
-rw-r--r--doc/src/examples/touch-knobs.qdoc10
-rw-r--r--doc/src/examples/trafficinfo.qdoc10
-rw-r--r--doc/src/examples/trafficlight.qdoc10
-rw-r--r--doc/src/examples/transformations.qdoc10
-rw-r--r--doc/src/examples/treemodelcompleter.qdoc10
-rw-r--r--doc/src/examples/trivialwizard.qdoc10
-rw-r--r--doc/src/examples/trollprint.qdoc10
-rw-r--r--doc/src/examples/twowaybutton.qdoc10
-rw-r--r--doc/src/examples/undoframework.qdoc10
-rw-r--r--doc/src/examples/videographicsitem.qdoc10
-rw-r--r--doc/src/examples/videowidget.qdoc10
-rw-r--r--doc/src/examples/waitconditions.qdoc10
-rw-r--r--doc/src/examples/webkit-bridge-imageanalyzer.qdoc160
-rw-r--r--doc/src/examples/webkit-framecapture.qdoc10
-rw-r--r--doc/src/examples/widgets-softkeys.qdoc10
-rw-r--r--doc/src/examples/widgets-validators.qdoc10
-rw-r--r--doc/src/examples/wiggly.qdoc10
-rw-r--r--doc/src/examples/windowflags.qdoc10
-rw-r--r--doc/src/examples/worldtimeclockbuilder.qdoc10
-rw-r--r--doc/src/examples/worldtimeclockplugin.qdoc10
-rw-r--r--doc/src/examples/xmlstreamlint.qdoc10
-rw-r--r--doc/src/external-resources.qdoc17
-rw-r--r--doc/src/files-and-resources/datastreamformat.qdoc10
-rw-r--r--doc/src/files-and-resources/resources.qdoc10
-rw-r--r--doc/src/frameworks-technologies/accessible.qdoc10
-rw-r--r--doc/src/frameworks-technologies/activeqt-container.qdoc10
-rw-r--r--doc/src/frameworks-technologies/activeqt-server.qdoc10
-rw-r--r--doc/src/frameworks-technologies/activeqt.qdoc10
-rw-r--r--doc/src/frameworks-technologies/animation.qdoc10
-rw-r--r--doc/src/frameworks-technologies/containers.qdoc10
-rw-r--r--doc/src/frameworks-technologies/dbus-adaptors.qdoc10
-rw-r--r--doc/src/frameworks-technologies/dbus-intro.qdoc10
-rw-r--r--doc/src/frameworks-technologies/desktop-integration.qdoc10
-rw-r--r--doc/src/frameworks-technologies/dnd.qdoc12
-rw-r--r--doc/src/frameworks-technologies/eventsandfilters.qdoc10
-rw-r--r--doc/src/frameworks-technologies/gestures.qdoc10
-rw-r--r--doc/src/frameworks-technologies/graphicsview.qdoc10
-rw-r--r--doc/src/frameworks-technologies/implicit-sharing.qdoc10
-rw-r--r--doc/src/frameworks-technologies/ipc.qdoc10
-rw-r--r--doc/src/frameworks-technologies/model-view-programming.qdoc22
-rw-r--r--doc/src/frameworks-technologies/phonon.qdoc29
-rw-r--r--doc/src/frameworks-technologies/plugins-howto.qdoc10
-rw-r--r--doc/src/frameworks-technologies/qthelp.qdoc10
-rw-r--r--doc/src/frameworks-technologies/qundo.qdoc10
-rw-r--r--doc/src/frameworks-technologies/richtext.qdoc10
-rw-r--r--doc/src/frameworks-technologies/statemachine.qdoc10
-rw-r--r--doc/src/frameworks-technologies/templates.qdoc10
-rw-r--r--doc/src/frameworks-technologies/threads.qdoc14
-rw-r--r--doc/src/frameworks-technologies/unicode.qdoc10
-rw-r--r--doc/src/getting-started/demos.qdoc10
-rw-r--r--doc/src/getting-started/examples.qdoc22
-rw-r--r--doc/src/getting-started/gettingstarted.qdoc10
-rw-r--r--doc/src/getting-started/gettingstartedqml.qdoc115
-rw-r--r--doc/src/getting-started/gettingstartedqt.qdoc10
-rw-r--r--doc/src/getting-started/how-to-learn-qt.qdoc10
-rw-r--r--doc/src/getting-started/installation.qdoc297
-rw-r--r--doc/src/getting-started/known-issues.qdoc10
-rw-r--r--doc/src/getting-started/tutorials.qdoc10
-rw-r--r--doc/src/howtos/HWacceleration.qdoc10
-rw-r--r--doc/src/howtos/accelerators.qdoc10
-rw-r--r--doc/src/howtos/appicon.qdoc10
-rw-r--r--doc/src/howtos/custom-types.qdoc10
-rw-r--r--doc/src/howtos/exceptionsafety.qdoc10
-rw-r--r--doc/src/howtos/guibooks.qdoc10
-rw-r--r--doc/src/howtos/openvg.qdoc10
-rw-r--r--doc/src/howtos/qtdesigner.qdoc10
-rw-r--r--doc/src/howtos/restoring-geometry.qdoc10
-rw-r--r--doc/src/howtos/session.qdoc10
-rw-r--r--doc/src/howtos/sharedlibrary.qdoc10
-rw-r--r--doc/src/howtos/timers.qdoc10
-rw-r--r--doc/src/howtos/unix-signal-handlers.qdoc12
-rw-r--r--doc/src/images/webkit-imageanalyzer-complete.pngbin0 -> 10257 bytes-rw-r--r--doc/src/images/webkit-imageanalyzer-progress.pngbin0 -> 18240 bytes-rw-r--r--doc/src/images/webkit-imageanalyzer-screenshot.pngbin0 -> 56053 bytes-rw-r--r--doc/src/index.qdoc12
-rw-r--r--doc/src/internationalization/i18n.qdoc10
-rw-r--r--doc/src/internationalization/linguist-manual.qdoc10
-rw-r--r--doc/src/ja_JP/development/designer-manual.qdoc10
-rw-r--r--doc/src/ja_JP/development/qmake-manual.qdoc10
-rw-r--r--doc/src/ja_JP/development/qtestlib.qdoc10
-rw-r--r--doc/src/ja_JP/examples/arrowpad.qdoc10
-rw-r--r--doc/src/ja_JP/examples/hellotr.qdoc10
-rw-r--r--doc/src/ja_JP/examples/trollprint.qdoc10
-rw-r--r--doc/src/ja_JP/getting-started/tutorials.qdoc10
-rw-r--r--doc/src/ja_JP/tutorials/addressbook.qdoc10
-rw-r--r--doc/src/ja_JP/tutorials/widgets-tutorial.qdoc10
-rw-r--r--doc/src/legal/3rdparty.qdoc10
-rw-r--r--doc/src/legal/commercialeditions.qdoc10
-rw-r--r--doc/src/legal/editions.qdoc10
-rw-r--r--doc/src/legal/gpl.qdoc10
-rw-r--r--doc/src/legal/licenses.qdoc10
-rw-r--r--doc/src/legal/opensourceedition.qdoc12
-rw-r--r--doc/src/legal/trademarks.qdoc22
-rw-r--r--doc/src/modules.qdoc14
-rw-r--r--doc/src/network-programming/bearermanagement.qdoc10
-rw-r--r--doc/src/network-programming/qtnetwork.qdoc10
-rw-r--r--doc/src/network-programming/ssl.qdoc10
-rw-r--r--doc/src/objectmodel/metaobjects.qdoc10
-rw-r--r--doc/src/objectmodel/object.qdoc10
-rw-r--r--doc/src/objectmodel/objecttrees.qdoc10
-rw-r--r--doc/src/objectmodel/properties.qdoc10
-rw-r--r--doc/src/objectmodel/signalsandslots.qdoc10
-rw-r--r--doc/src/overviews.qdoc12
-rw-r--r--doc/src/painting-and-printing/coordsys.qdoc10
-rw-r--r--doc/src/painting-and-printing/paintsystem.qdoc10
-rw-r--r--doc/src/painting-and-printing/printing.qdoc10
-rw-r--r--doc/src/platforms/atomic-operations.qdoc10
-rw-r--r--doc/src/platforms/compiler-notes.qdoc279
-rw-r--r--doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc10
-rw-r--r--doc/src/platforms/emb-HwAcc-WinCE.qdoc10
-rw-r--r--doc/src/platforms/emb-accel.qdoc10
-rw-r--r--doc/src/platforms/emb-architecture.qdoc10
-rw-r--r--doc/src/platforms/emb-charinput.qdoc10
-rw-r--r--doc/src/platforms/emb-crosscompiling.qdoc10
-rw-r--r--doc/src/platforms/emb-deployment.qdoc12
-rw-r--r--doc/src/platforms/emb-differences.qdoc10
-rw-r--r--doc/src/platforms/emb-directfb-EmbLinux.qdoc10
-rw-r--r--doc/src/platforms/emb-displaymanagement.qdoc10
-rw-r--r--doc/src/platforms/emb-envvars.qdoc10
-rw-r--r--doc/src/platforms/emb-features.qdoc10
-rw-r--r--doc/src/platforms/emb-fonts.qdoc10
-rw-r--r--doc/src/platforms/emb-framebuffer-howto.qdoc10
-rw-r--r--doc/src/platforms/emb-hardwareacceleration.qdocinc280
-rw-r--r--doc/src/platforms/emb-install.qdoc16
-rw-r--r--doc/src/platforms/emb-kmap2qmap.qdoc10
-rw-r--r--doc/src/platforms/emb-makeqpf.qdoc10
-rw-r--r--doc/src/platforms/emb-opengl-EmbLinux.qdoc10
-rw-r--r--doc/src/platforms/emb-openvg-EmbLinux.qdoc10
-rw-r--r--doc/src/platforms/emb-performance.qdoc10
-rw-r--r--doc/src/platforms/emb-pointer.qdoc17
-rw-r--r--doc/src/platforms/emb-porting.qdoc10
-rw-r--r--doc/src/platforms/emb-qvfb.qdoc14
-rw-r--r--doc/src/platforms/emb-running.qdoc12
-rw-r--r--doc/src/platforms/emb-vnc.qdoc10
-rw-r--r--doc/src/platforms/mac-differences.qdoc12
-rw-r--r--doc/src/platforms/platform-notes-rtos.qdoc18
-rw-r--r--doc/src/platforms/platform-notes.qdoc359
-rw-r--r--doc/src/platforms/qt-embedded-linux.qdoc12
-rw-r--r--doc/src/platforms/qt-embedded.qdoc10
-rw-r--r--doc/src/platforms/qtmac-as-native.qdoc10
-rw-r--r--doc/src/platforms/supported-platforms.qdoc21
-rw-r--r--doc/src/platforms/symbian-exceptionsafety.qdoc10
-rw-r--r--doc/src/platforms/symbian-introduction.qdoc22
-rw-r--r--doc/src/platforms/wince-customization.qdoc12
-rw-r--r--doc/src/platforms/wince-introduction.qdoc16
-rw-r--r--doc/src/platforms/wince-opengl.qdoc10
-rw-r--r--doc/src/platforms/wince-openvg.qdoc10
-rw-r--r--doc/src/platforms/wince-signing.qdoc10
-rw-r--r--doc/src/platforms/winsystem.qdoc14
-rw-r--r--doc/src/platforms/x11overlays.qdoc10
-rw-r--r--doc/src/porting/porting-qsa.qdoc10
-rw-r--r--doc/src/porting/porting4-canvas.qdoc10
-rw-r--r--doc/src/porting/porting4-designer.qdoc10
-rw-r--r--doc/src/porting/porting4-dnd.qdoc10
-rw-r--r--doc/src/porting/porting4-overview.qdoc10
-rw-r--r--doc/src/porting/porting4.qdoc10
-rw-r--r--doc/src/porting/qt3to4.qdoc10
-rw-r--r--doc/src/porting/qt4-accessibility.qdoc10
-rw-r--r--doc/src/porting/qt4-arthur.qdoc10
-rw-r--r--doc/src/porting/qt4-designer.qdoc28
-rw-r--r--doc/src/porting/qt4-interview.qdoc10
-rw-r--r--doc/src/porting/qt4-mainwindow.qdoc10
-rw-r--r--doc/src/porting/qt4-network.qdoc10
-rw-r--r--doc/src/porting/qt4-scribe.qdoc10
-rw-r--r--doc/src/porting/qt4-sql.qdoc10
-rw-r--r--doc/src/porting/qt4-styles.qdoc10
-rw-r--r--doc/src/porting/qt4-threads.qdoc10
-rw-r--r--doc/src/porting/qt4-tulip.qdoc10
-rw-r--r--doc/src/qt-resources.qdoc10
-rw-r--r--doc/src/qt-webpages.qdoc14
-rw-r--r--doc/src/qt4-intro.qdoc12
-rw-r--r--doc/src/scripting/ecmascript.qdoc10
-rw-r--r--doc/src/scripting/qtscriptdebugger-manual.qdoc10
-rw-r--r--doc/src/scripting/qtscriptextensions.qdoc10
-rw-r--r--doc/src/scripting/scripting.qdoc10
-rw-r--r--doc/src/snippets/code/doc_src_emb-pointer.qdoc4
-rw-r--r--doc/src/snippets/code/doc_src_fdl.qdoc10
-rw-r--r--doc/src/snippets/code/doc_src_installation.qdoc17
-rw-r--r--doc/src/snippets/code/doc_src_linguist-manual.qdoc10
-rw-r--r--doc/src/snippets/code/doc_src_qmake-manual.qdoc18
-rw-r--r--doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp35
-rw-r--r--doc/src/snippets/code/src_qtestlib_qtestcase.cpp18
-rw-r--r--doc/src/snippets/declarative/borderimage/borderimage-defaults.qml55
-rw-r--r--doc/src/snippets/declarative/flipable/flipable.qml17
-rw-r--r--doc/src/snippets/declarative/keys/keys-handler.qml60
-rw-r--r--doc/src/snippets/declarative/keys/keys-pressed.qml65
-rw-r--r--doc/src/snippets/declarative/loader/sizeitem.qml62
-rw-r--r--doc/src/snippets/declarative/loader/sizeloader.qml62
-rw-r--r--doc/src/snippets/declarative/qtbinding/context-advanced/MyItem.qml46
-rw-r--r--doc/src/snippets/declarative/qtbinding/context-advanced/applicationdata.h52
-rw-r--r--doc/src/snippets/declarative/qtbinding/context-advanced/connections.qml52
-rw-r--r--doc/src/snippets/declarative/qtbinding/context-advanced/context-advanced.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/context-advanced/main.cpp60
-rw-r--r--doc/src/snippets/declarative/qtbinding/context/MyItem.qml45
-rw-r--r--doc/src/snippets/declarative/qtbinding/context/context.pro (renamed from doc/src/snippets/declarative/qtbinding/contextproperties/contextproperties.pro)0
-rw-r--r--doc/src/snippets/declarative/qtbinding/context/main.cpp56
-rw-r--r--doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp78
-rw-r--r--doc/src/snippets/declarative/qtbinding/contextproperties/main.qml55
-rw-r--r--doc/src/snippets/declarative/qtbinding/custompalette/custompalette.h79
-rw-r--r--doc/src/snippets/declarative/qtbinding/custompalette/custompalette.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/custompalette/main.cpp61
-rw-r--r--doc/src/snippets/declarative/qtbinding/custompalette/main.qml62
-rw-r--r--doc/src/snippets/declarative/qtbinding/enums/enums.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/enums/imageviewer.h68
-rw-r--r--doc/src/snippets/declarative/qtbinding/enums/main.cpp73
-rw-r--r--doc/src/snippets/declarative/qtbinding/enums/standalone.qml49
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-cpp/MyItem.qml55
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-cpp/functions-qml.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp59
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-cpp/myclass.h57
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-qml/MyItem.qml50
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-qml/functions-qml.pro2
-rw-r--r--doc/src/snippets/declarative/qtbinding/functions-qml/main.cpp63
-rw-r--r--doc/src/snippets/declarative/qtbinding/loading/MyItem.qml56
-rw-r--r--doc/src/snippets/declarative/qtbinding/loading/loading.pro2
-rw-r--r--doc/src/snippets/declarative/qtbinding/loading/main.cpp90
-rw-r--r--doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h56
-rw-r--r--doc/src/snippets/declarative/qtbinding/newelements/main.cpp62
-rw-r--r--doc/src/snippets/declarative/qtbinding/newelements/newelements.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/newelements/standalone.qml44
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-cpp/MyItem.qml54
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-cpp/applicationdata.h71
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-cpp/main.cpp58
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-cpp/properties-cpp.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-qml/MyItem.qml47
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-qml/main.cpp61
-rw-r--r--doc/src/snippets/declarative/qtbinding/properties-qml/properties-qml.pro2
-rw-r--r--doc/src/snippets/declarative/qtbinding/resources/main.qml5
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml50
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h64
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-cpp/main.cpp81
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-cpp/signals-cpp.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-cpp/standalone.qml48
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-qml/MyItem.qml55
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-qml/main.cpp59
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-qml/myclass.h51
-rw-r--r--doc/src/snippets/declarative/qtbinding/signals-qml/signals-qml.pro3
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/main.cpp62
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/main.qml58
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.cpp62
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.h61
-rw-r--r--doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.pro3
-rw-r--r--doc/src/snippets/sqldatabase/sqldatabase.cpp2
-rw-r--r--doc/src/sql-programming/qsqldatatype-table.qdoc10
-rw-r--r--doc/src/sql-programming/sql-driver.qdoc18
-rw-r--r--doc/src/sql-programming/sql-programming.qdoc10
-rwxr-xr-xdoc/src/template/scripts/functions.js6
-rw-r--r--doc/src/template/style/narrow.css1
-rwxr-xr-xdoc/src/template/style/style.css96
-rw-r--r--doc/src/tutorials/addressbook-fr.qdoc10
-rw-r--r--doc/src/tutorials/addressbook.qdoc10
-rw-r--r--doc/src/tutorials/modelview.qdoc10
-rw-r--r--doc/src/tutorials/widgets-tutorial.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/focus.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-cde.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-gtk.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-macintosh.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-motif.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-plastique.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-windows.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-windowsvista.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery-windowsxp.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/gallery.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/layout.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/styles.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/stylesheet.qdoc10
-rw-r--r--doc/src/widgets-and-layouts/widgets.qdoc10
-rw-r--r--doc/src/windows-and-dialogs/dialogs.qdoc10
-rw-r--r--doc/src/windows-and-dialogs/mainwindow.qdoc10
-rw-r--r--doc/src/xml-processing/xml-patterns.qdoc10
-rw-r--r--doc/src/xml-processing/xml-processing.qdoc10
-rw-r--r--doc/src/xml-processing/xquery-introduction.qdoc10
-rw-r--r--doc/src/zh_CN/bughowto.qdoc10
-rw-r--r--doc/src/zh_CN/getting-started/how-to-learn-qt.qdoc10
-rw-r--r--doc/src/zh_CN/getting-started/tutorials.qdoc10
-rw-r--r--doc/src/zh_CN/tutorials/addressbook.qdoc10
-rw-r--r--doc/src/zh_CN/tutorials/widgets-tutorial.qdoc10
-rw-r--r--examples/declarative/animation/behaviors/wigglytext.qml108
-rw-r--r--examples/declarative/cppextensions/imageprovider/imageprovider.pro2
-rw-r--r--examples/declarative/cppextensions/plugins/README2
-rw-r--r--examples/declarative/cppextensions/qwidgets/qwidgets.pro2
-rw-r--r--examples/declarative/i18n/i18n.qml3
-rw-r--r--examples/declarative/modelviews/listview/highlightranges.qml20
-rw-r--r--examples/declarative/positioners/positioners.qmlproject.user41
-rw-r--r--examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml34
-rwxr-xr-xexamples/declarative/tutorials/samegame/samegame4/content/samegame.js2
-rw-r--r--examples/desktop/systray/systray.pro4
-rw-r--r--examples/draganddrop/puzzle/puzzle.pro4
-rw-r--r--examples/multimedia/audiodevices/audiodevices.h4
-rw-r--r--examples/multimedia/audioinput/audioinput.h5
-rw-r--r--examples/multimedia/audiooutput/audiooutput.h5
-rw-r--r--examples/network/bearermonitor/bearermonitor.cpp22
-rw-r--r--examples/network/bearermonitor/bearermonitor.h4
-rw-r--r--examples/network/bearermonitor/bearermonitor.pro7
-rw-r--r--examples/network/bearermonitor/bearermonitor_maemo.ui601
-rw-r--r--examples/network/bearermonitor/main.cpp9
-rw-r--r--examples/network/bearermonitor/sessionwidget.cpp4
-rw-r--r--examples/network/bearermonitor/sessionwidget.h5
-rw-r--r--examples/painting/svgviewer/svgviewer.pro4
-rw-r--r--examples/richtext/syntaxhighlighter/syntaxhighlighter.pro2
-rw-r--r--examples/richtext/textobject/textobject.pro2
-rw-r--r--examples/script/context2d/context2d.pro2
-rw-r--r--examples/symbianpkgrules.pri5
-rw-r--r--examples/tools/undoframework/mainwindow.cpp2
-rw-r--r--examples/tutorials/gettingStarted/gsQml/filedialog/filedialog.pro (renamed from examples/tutorials/gettingStarted/gsQml/filedialog/cppPlugins.pro)0
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part0/Button.qml55
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/Button.qml97
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/EditMenu.qml76
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/FileMenu.qml91
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/SimpleButton.qml73
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_button.pngbin0 -> 1670 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_editmenu.pngbin0 -> 6177 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_filemenu.pngbin0 -> 6062 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_simplebutton.pngbin0 -> 1055 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part1/qml-texteditor.qmlproject16
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/Button.qml99
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/EditMenu.qml77
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/FileMenu.qml92
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/MenuBar.qml140
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/pics/qml-texteditor2_menubar.pngbin0 -> 6079 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part2/qml-texteditor2.qmlproject16
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/Button.qml99
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/EditMenu.qml77
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/FileMenu.qml92
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/MenuBar.qml140
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/TextArea.qml80
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/TextEditor.qml68
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/images/arrow.pngbin0 -> 583 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/pics/qml-texteditor3_texteditor.pngbin0 -> 59345 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part3/qml-texteditor3.qmlproject16
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/Button.qml109
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/EditMenu.qml81
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/FileMenu.qml96
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/MenuBar.qml146
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/SimpleButton.qml59
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/TextArea.qml80
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/TextEditor.qml146
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/images/arrow.pngbin0 -> 583 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/pics/qml-texteditor4_texteditor.pngbin0 -> 63629 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part4/qml-texteditor4.qmlproject16
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/TextEditor.qml127
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/Button.qml109
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/EditMenu.qml110
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileDialog.qml170
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileMenu.qml232
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/MenuBar.qml148
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/TextArea.qml86
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/core/qmldir13
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.cpp57
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.h57
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.cpp219
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.h108
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.cpp56
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.h67
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/filedialog.pro17
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/qmldir1
-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/images/arrow.pngbin0 -> 583 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_editmenu.pngbin0 -> 65123 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_filemenu.pngbin0 -> 21367 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_newfile.pngbin0 -> 76693 bytes-rw-r--r--examples/tutorials/gettingStarted/gsQml/parts/part5/qml-texteditor5.qmlproject18
-rw-r--r--examples/tutorials/gettingStarted/gsQml/texteditor.pro4
-rw-r--r--examples/webkit/imageanalyzer/README20
-rw-r--r--examples/webkit/imageanalyzer/imageanalyzer.cpp222
-rw-r--r--examples/webkit/imageanalyzer/imageanalyzer.h103
-rw-r--r--examples/webkit/imageanalyzer/imageanalyzer.pro14
-rw-r--r--examples/webkit/imageanalyzer/main.cpp53
-rw-r--r--examples/webkit/imageanalyzer/mainwindow.cpp80
-rw-r--r--examples/webkit/imageanalyzer/mainwindow.h68
-rw-r--r--examples/webkit/imageanalyzer/resources/imageanalyzer.qrc10
-rw-r--r--examples/webkit/imageanalyzer/resources/images/README2
-rw-r--r--examples/webkit/imageanalyzer/resources/images/bellaCoola.jpgbin0 -> 129886 bytes-rw-r--r--examples/webkit/imageanalyzer/resources/images/flower.jpgbin0 -> 67126 bytes-rw-r--r--examples/webkit/imageanalyzer/resources/images/mtRainier.jpgbin0 -> 104090 bytes-rw-r--r--examples/webkit/imageanalyzer/resources/images/seaShell.jpgbin0 -> 82690 bytes-rw-r--r--examples/webkit/imageanalyzer/resources/images/trees.jpgbin0 -> 98630 bytes-rw-r--r--examples/webkit/imageanalyzer/resources/index.html133
-rw-r--r--examples/webkit/webkit.pro1
-rw-r--r--examples/widgets/icons/icons.pro2
-rw-r--r--examples/widgets/movie/movie.pro2
-rw-r--r--examples/xml/dombookmarks/dombookmarks.pro2
-rw-r--r--examples/xml/htmlinfo/htmlinfo.pro2
-rw-r--r--examples/xml/saxbookmarks/saxbookmarks.pro4
-rw-r--r--header.FDL10
-rw-r--r--lib/fonts/dejavu_sans_11_50.qpf2bin0 -> 405944 bytes-rw-r--r--mkspecs/common/clang.conf17
-rw-r--r--mkspecs/common/g++-base.conf30
-rw-r--r--mkspecs/common/g++-macx.conf32
-rw-r--r--mkspecs/common/g++-unix.conf14
-rw-r--r--mkspecs/common/g++.conf58
-rw-r--r--mkspecs/common/gcc-base-macx.conf43
-rw-r--r--mkspecs/common/gcc-base-unix.conf21
-rw-r--r--mkspecs/common/gcc-base.conf60
-rw-r--r--mkspecs/common/llvm.conf53
-rw-r--r--mkspecs/common/mac-g++.conf81
-rw-r--r--mkspecs/common/mac-llvm.conf76
-rw-r--r--mkspecs/common/mac/qplatformdefs.h97
-rw-r--r--mkspecs/common/qws.conf2
-rw-r--r--mkspecs/common/symbian/symbian-makefile.conf4
-rw-r--r--mkspecs/common/symbian/symbian-mmp.conf10
-rw-r--r--mkspecs/common/symbian/symbian.conf19
-rw-r--r--mkspecs/features/link_pkgconfig.prf7
-rw-r--r--mkspecs/features/mac/objective_c.prf25
-rw-r--r--mkspecs/features/qt.prf4
-rw-r--r--mkspecs/features/qt_functions.prf8
-rw-r--r--mkspecs/features/qttest_p4.prf3
-rw-r--r--mkspecs/features/symbian/application_icon.prf18
-rw-r--r--mkspecs/features/symbian/data_caging_paths.prf4
-rw-r--r--mkspecs/features/symbian/def_files.prf18
-rw-r--r--mkspecs/features/symbian/default_post.prf19
-rw-r--r--mkspecs/features/symbian/do_not_build_as_thumb.prf2
-rw-r--r--mkspecs/features/symbian/qt_config.prf2
-rw-r--r--mkspecs/features/symbian/run_on_phone.prf3
-rw-r--r--mkspecs/features/symbian/sis_targets.prf3
-rw-r--r--mkspecs/features/symbian/symbian_building.prf90
-rw-r--r--mkspecs/freebsd-g++/qmake.conf3
-rw-r--r--mkspecs/linux-g++-32/qmake.conf3
-rw-r--r--mkspecs/linux-g++-64/qmake.conf4
-rw-r--r--mkspecs/linux-g++-maemo/qmake.conf10
-rw-r--r--mkspecs/linux-g++/qmake.conf3
-rw-r--r--mkspecs/linux-llvm/qmake.conf3
-rw-r--r--mkspecs/macx-g++/qmake.conf8
-rw-r--r--mkspecs/macx-g++/qplatformdefs.h56
-rw-r--r--mkspecs/macx-g++40/qmake.conf9
-rw-r--r--mkspecs/macx-g++40/qplatformdefs.h56
-rw-r--r--mkspecs/macx-g++42/qmake.conf9
-rw-r--r--mkspecs/macx-g++42/qplatformdefs.h56
-rw-r--r--mkspecs/macx-icc/qplatformdefs.h2
-rw-r--r--mkspecs/macx-llvm/qmake.conf9
-rw-r--r--mkspecs/macx-llvm/qplatformdefs.h56
-rwxr-xr-xmkspecs/macx-xcode/qmake.conf12
-rw-r--r--mkspecs/macx-xcode/qplatformdefs.h56
-rw-r--r--mkspecs/qws/linux-arm-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-armv6-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-avr32-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-cellon-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-dm7000-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-dm800-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-generic-g++-32/qmake.conf3
-rw-r--r--mkspecs/qws/linux-generic-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-ipaq-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-lsb-g++/qmake.conf4
-rw-r--r--mkspecs/qws/linux-mips-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-nacl-g++/qmake.conf74
-rw-r--r--mkspecs/qws/linux-nacl-g++/qplatformdefs.h175
-rw-r--r--mkspecs/qws/linux-powerpc-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sh-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sh4al-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sharp-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-x86-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-x86_64-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-zylonite-g++/qmake.conf3
-rw-r--r--mkspecs/qws/macx-generic-g++/qmake.conf8
-rw-r--r--mkspecs/qws/macx-nacl-g++/qmake.conf95
-rw-r--r--mkspecs/qws/macx-nacl-g++/qplatformdefs.h175
-rw-r--r--mkspecs/symbian-armcc/features/default_post.prf (renamed from mkspecs/symbian/linux-gcce/features/default_post.prf)0
-rw-r--r--mkspecs/symbian-armcc/qmake.conf62
-rw-r--r--mkspecs/symbian-armcc/qplatformdefs.h42
-rw-r--r--mkspecs/symbian-gcce/features/default_post.prf (renamed from mkspecs/symbian/linux-armcc/features/default_post.prf)0
-rw-r--r--mkspecs/symbian-gcce/qmake.conf93
-rw-r--r--mkspecs/symbian-gcce/qplatformdefs.h43
-rw-r--r--mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm2
-rw-r--r--mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm4
-rw-r--r--mkspecs/symbian/linux-armcc/qmake.conf62
-rw-r--r--mkspecs/symbian/linux-armcc/qplatformdefs.h42
-rw-r--r--mkspecs/symbian/linux-gcce/qmake.conf95
-rw-r--r--mkspecs/symbian/linux-gcce/qplatformdefs.h43
-rw-r--r--mkspecs/unsupported/linux-clang/qmake.conf19
-rw-r--r--mkspecs/unsupported/linux-clang/qplatformdefs.h102
-rw-r--r--mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/macx-clang/Info.plist.app20
-rw-r--r--mkspecs/unsupported/macx-clang/Info.plist.lib18
-rw-r--r--mkspecs/unsupported/macx-clang/qmake.conf21
-rw-r--r--mkspecs/unsupported/macx-clang/qplatformdefs.h97
-rw-r--r--mkspecs/unsupported/qnx-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf23
-rw-r--r--mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h42
-rw-r--r--mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf1
-rw-r--r--mkspecs/unsupported/vxworks-ppc-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2003/qmake.conf2
-rw-r--r--mkspecs/win32-msvc2005/qmake.conf2
-rw-r--r--mkspecs/win32-msvc2008/qmake.conf2
-rw-r--r--mkspecs/win32-msvc2010/qmake.conf2
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp1
-rw-r--r--qmake/generators/metamakefile.cpp1
-rw-r--r--qmake/generators/symbian/initprojectdeploy_symbian.cpp10
-rw-r--r--qmake/generators/symbian/symbian_makefile.h4
-rw-r--r--qmake/generators/symbian/symbiancommon.cpp4
-rw-r--r--qmake/generators/symbian/symmake.cpp4
-rw-r--r--qmake/generators/symbian/symmake_abld.cpp20
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.cpp2
-rw-r--r--qmake/generators/unix/unixmake.cpp45
-rw-r--r--qmake/generators/unix/unixmake2.cpp28
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp2
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp2
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp12
-rw-r--r--qmake/generators/win32/winmakefile.cpp2
-rw-r--r--qmake/project.cpp22
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-buffer.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h9
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gdef.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-global.h4
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-gsub.h9
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp25
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-open.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.h8
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-stream.h8
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/main.cpp29
-rw-r--r--src/3rdparty/md5/md5.cpp1
-rw-r--r--src/3rdparty/phonon/gstreamer/devicemanager.cpp4
-rw-r--r--src/3rdparty/phonon/gstreamer/videowidget.cpp4
-rw-r--r--src/3rdparty/phonon/gstreamer/x11renderer.h4
-rw-r--r--src/3rdparty/phonon/mmf/abstractvideooutput.cpp14
-rw-r--r--src/3rdparty/phonon/mmf/videowidget.cpp2
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel.h3
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro7
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h2
-rw-r--r--src/activeqt/container/qaxwidget.cpp2
-rw-r--r--src/activeqt/shared/qaxtypes.cpp2
-rw-r--r--src/corelib/animation/qabstractanimation.cpp146
-rw-r--r--src/corelib/animation/qabstractanimation.h31
-rw-r--r--src/corelib/animation/qabstractanimation_p.h52
-rw-r--r--src/corelib/arch/qatomic_arch.h2
-rw-r--r--src/corelib/arch/qatomic_arm.h2
-rw-r--r--src/corelib/arch/symbian/heap_hybrid.cpp8
-rw-r--r--src/corelib/arch/symbian/qatomic_generic_armv6.cpp2
-rw-r--r--src/corelib/codecs/codecs.qdoc10
-rw-r--r--src/corelib/codecs/qutfcodec.cpp2
-rw-r--r--src/corelib/concurrent/qtconcurrentrunbase.h25
-rw-r--r--src/corelib/corelib.pro16
-rw-r--r--src/corelib/global/global.pri6
-rw-r--r--src/corelib/global/qconfig-minimal-system-dependencies.h371
-rw-r--r--src/corelib/global/qendian.qdoc10
-rw-r--r--src/corelib/global/qfeatures.h10
-rw-r--r--src/corelib/global/qfeatures.txt2
-rw-r--r--src/corelib/global/qglobal.cpp26
-rw-r--r--src/corelib/global/qglobal.h45
-rw-r--r--src/corelib/global/qmalloc.cpp16
-rw-r--r--src/corelib/global/qnaclunimplemented.cpp156
-rw-r--r--src/corelib/global/qnaclunimplemented.h95
-rw-r--r--src/corelib/global/qnamespace.h2
-rw-r--r--src/corelib/global/qnamespace.qdoc34
-rw-r--r--src/corelib/io/io.pri10
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents.cpp3
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents_p.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify.cpp16
-rw-r--r--src/corelib/io/qfilesystemwatcher_kqueue.cpp4
-rw-r--r--src/corelib/io/qfilesystemwatcher_kqueue_p.h2
-rw-r--r--src/corelib/io/qiodevice_p.h2
-rw-r--r--src/corelib/io/qresource.cpp4
-rw-r--r--src/corelib/io/qsettings.cpp41
-rw-r--r--src/corelib/io/qsettings_p.h2
-rw-r--r--src/corelib/io/qurl.cpp8
-rw-r--r--src/corelib/io/qurl.h2
-rw-r--r--src/corelib/kernel/kernel.pri4
-rw-r--r--src/corelib/kernel/qabstractitemmodel.cpp23
-rw-r--r--src/corelib/kernel/qcore_mac_p.h8
-rw-r--r--src/corelib/kernel/qcore_unix.cpp3
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp9
-rw-r--r--src/corelib/kernel/qcoreevent.h1
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib.cpp9
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp9
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h4
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix.cpp14
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix_p.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp20
-rw-r--r--src/corelib/kernel/qmath.qdoc10
-rw-r--r--src/corelib/kernel/qmimedata.cpp2
-rw-r--r--src/corelib/kernel/qobject.cpp10
-rw-r--r--src/corelib/kernel/qobject_p.h1
-rw-r--r--src/corelib/kernel/qsharedmemory.cpp5
-rw-r--r--src/corelib/kernel/qvariant.cpp8
-rw-r--r--src/corelib/kernel/qvariant.h2
-rw-r--r--src/corelib/plugin/qelfparser_p.cpp10
-rw-r--r--src/corelib/plugin/qelfparser_p.h5
-rw-r--r--src/corelib/plugin/qlibrary.cpp3
-rw-r--r--src/corelib/plugin/qplugin.qdoc10
-rw-r--r--src/corelib/plugin/qsystemlibrary.cpp4
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp2
-rw-r--r--src/corelib/thread/qthread.cpp4
-rw-r--r--src/corelib/thread/qthread_unix.cpp53
-rw-r--r--src/corelib/thread/qthread_win.cpp1
-rw-r--r--src/corelib/thread/qwaitcondition.qdoc10
-rw-r--r--src/corelib/tools/qalgorithms.qdoc10
-rw-r--r--src/corelib/tools/qbitarray.cpp7
-rw-r--r--src/corelib/tools/qbitarray.h2
-rw-r--r--src/corelib/tools/qbytearray.cpp21
-rw-r--r--src/corelib/tools/qbytearray.h2
-rw-r--r--src/corelib/tools/qcache.qdoc10
-rw-r--r--src/corelib/tools/qcontiguouscache.cpp7
-rw-r--r--src/corelib/tools/qcontiguouscache.h1
-rw-r--r--src/corelib/tools/qdatetime.cpp1
-rw-r--r--src/corelib/tools/qelapsedtimer.cpp2
-rw-r--r--src/corelib/tools/qhash.cpp14
-rw-r--r--src/corelib/tools/qhash.h2
-rw-r--r--src/corelib/tools/qiterator.qdoc10
-rw-r--r--src/corelib/tools/qlinkedlist.cpp11
-rw-r--r--src/corelib/tools/qlinkedlist.h1
-rw-r--r--src/corelib/tools/qlist.cpp9
-rw-r--r--src/corelib/tools/qlist.h1
-rw-r--r--src/corelib/tools/qlocale.cpp7
-rw-r--r--src/corelib/tools/qlocale.h2
-rw-r--r--src/corelib/tools/qmap.cpp14
-rw-r--r--src/corelib/tools/qmap.h2
-rw-r--r--src/corelib/tools/qpair.qdoc10
-rw-r--r--src/corelib/tools/qpoint.cpp6
-rw-r--r--src/corelib/tools/qqueue.cpp8
-rw-r--r--src/corelib/tools/qqueue.h1
-rw-r--r--src/corelib/tools/qregexp.cpp8
-rw-r--r--src/corelib/tools/qregexp.h1
-rw-r--r--src/corelib/tools/qscopedpointer.h12
-rw-r--r--src/corelib/tools/qset.h1
-rw-r--r--src/corelib/tools/qset.qdoc17
-rw-r--r--src/corelib/tools/qshareddata.h14
-rw-r--r--src/corelib/tools/qsharedpointer.cpp6
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h24
-rw-r--r--src/corelib/tools/qsimd.cpp9
-rw-r--r--src/corelib/tools/qsimd_p.h3
-rw-r--r--src/corelib/tools/qsize.cpp6
-rw-r--r--src/corelib/tools/qstack.cpp8
-rw-r--r--src/corelib/tools/qstack.h1
-rw-r--r--src/corelib/tools/qstring.cpp45
-rw-r--r--src/corelib/tools/qstring.h1
-rw-r--r--src/corelib/tools/qvarlengtharray.h124
-rw-r--r--src/corelib/tools/qvarlengtharray.qdoc218
-rw-r--r--src/corelib/tools/qvector.cpp7
-rw-r--r--src/corelib/tools/qvector.h7
-rw-r--r--src/corelib/tools/tools.pri2
-rw-r--r--src/corelib/xml/qxmlstream.h1
-rw-r--r--src/dbus/qdbusabstractinterface.cpp2
-rw-r--r--src/dbus/qdbusargument.h2
-rw-r--r--src/dbus/qdbusconnection.cpp6
-rw-r--r--src/dbus/qdbusintegrator.cpp2
-rw-r--r--src/dbus/qdbusmarshaller.cpp2
-rw-r--r--src/dbus/qdbusmessage.cpp6
-rw-r--r--src/dbus/qdbusmetatype.cpp4
-rw-r--r--src/dbus/qdbuspendingreply.h2
-rw-r--r--src/dbus/qdbusutil.cpp2
-rw-r--r--src/declarative/debugger/qdeclarativedebug_p.h30
-rw-r--r--src/declarative/debugger/qdeclarativedebugclient.cpp2
-rw-r--r--src/declarative/debugger/qdeclarativedebugclient_p.h6
-rw-r--r--src/declarative/debugger/qdeclarativedebuggerstatus_p.h4
-rw-r--r--src/declarative/debugger/qdeclarativedebughelper.cpp8
-rw-r--r--src/declarative/debugger/qdeclarativedebughelper_p.h6
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp19
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice_p.h4
-rw-r--r--src/declarative/debugger/qpacketprotocol_p.h8
-rw-r--r--src/declarative/graphicsitems/qdeclarativeanchors.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativeanchors_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativeborderimage.cpp2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeevents.cpp21
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp109
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable_p_p.h16
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflipable.cpp27
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp91
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimage.cpp43
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimage_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp56
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp258
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeloader.cpp60
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativepainteditem.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativepath.cpp2
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp58
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview_p_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativepositioners_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativerectangle.cpp7
-rw-r--r--src/declarative/graphicsitems/qdeclarativerectangle_p.h6
-rw-r--r--src/declarative/graphicsitems/qdeclarativerepeater.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h11
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp968
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p_p.h48
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextedit.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput.cpp30
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout.cpp19
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp57
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h4
-rw-r--r--src/declarative/qml/parser/qdeclarativejs.g4
-rw-r--r--src/declarative/qml/parser/qdeclarativejslexer.cpp15
-rw-r--r--src/declarative/qml/parser/qdeclarativejsparser.cpp4
-rw-r--r--src/declarative/qml/qdeclarativebinding_p.h4
-rw-r--r--src/declarative/qml/qdeclarativecompiledbindings.cpp2
-rw-r--r--src/declarative/qml/qdeclarativecompileddata.cpp2
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp38
-rw-r--r--src/declarative/qml/qdeclarativecompiler_p.h5
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp95
-rw-r--r--src/declarative/qml/qdeclarativecomponent_p.h7
-rw-r--r--src/declarative/qml/qdeclarativecontext.cpp25
-rw-r--r--src/declarative/qml/qdeclarativedata_p.h20
-rw-r--r--src/declarative/qml/qdeclarativedom_p.h26
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp91
-rw-r--r--src/declarative/qml/qdeclarativeengine_p.h2
-rw-r--r--src/declarative/qml/qdeclarativeenginedebug.cpp3
-rw-r--r--src/declarative/qml/qdeclarativeenginedebug_p.h8
-rw-r--r--src/declarative/qml/qdeclarativefastproperties.cpp9
-rw-r--r--src/declarative/qml/qdeclarativeglobal_p.h19
-rw-r--r--src/declarative/qml/qdeclarativeimport.cpp11
-rw-r--r--src/declarative/qml/qdeclarativeinfo.cpp3
-rw-r--r--src/declarative/qml/qdeclarativemetatype_p.h5
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp309
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass_p.h9
-rw-r--r--src/declarative/qml/qdeclarativeparser_p.h5
-rw-r--r--src/declarative/qml/qdeclarativeprivate.h5
-rw-r--r--src/declarative/qml/qdeclarativeproperty.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeproperty_p.h8
-rw-r--r--src/declarative/qml/qdeclarativepropertycache.cpp139
-rw-r--r--src/declarative/qml/qdeclarativepropertycache_p.h9
-rw-r--r--src/declarative/qml/qdeclarativestringconverters_p.h22
-rw-r--r--src/declarative/qml/qdeclarativetypeloader.cpp27
-rw-r--r--src/declarative/qml/qdeclarativetypeloader_p.h2
-rw-r--r--src/declarative/qml/qdeclarativevaluetype_p.h4
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp12
-rw-r--r--src/declarative/qml/qdeclarativevmemetaobject.cpp25
-rw-r--r--src/declarative/qml/qdeclarativevmemetaobject_p.h19
-rw-r--r--src/declarative/qml/qdeclarativeworkerscript.cpp30
-rw-r--r--src/declarative/qml/qmetaobjectbuilder.cpp12
-rw-r--r--src/declarative/qml/qmetaobjectbuilder_p.h10
-rw-r--r--src/declarative/util/qdeclarativeanimation_p.h4
-rw-r--r--src/declarative/util/qdeclarativeanimation_p_p.h2
-rw-r--r--src/declarative/util/qdeclarativebehavior_p.h2
-rw-r--r--src/declarative/util/qdeclarativefontloader.cpp25
-rw-r--r--src/declarative/util/qdeclarativelistmodel_p.h2
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent.cpp2
-rw-r--r--src/declarative/util/qdeclarativeopenmetaobject_p.h7
-rw-r--r--src/declarative/util/qdeclarativepixmapcache.cpp5
-rw-r--r--src/declarative/util/qdeclarativepropertychanges_p.h2
-rw-r--r--src/declarative/util/qdeclarativestate.cpp12
-rw-r--r--src/declarative/util/qdeclarativestate_p.h6
-rw-r--r--src/declarative/util/qdeclarativestate_p_p.h2
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp2
-rw-r--r--src/declarative/util/qdeclarativetimer_p.h4
-rw-r--r--src/declarative/util/qdeclarativetransition.cpp6
-rw-r--r--src/declarative/util/qdeclarativetransitionmanager.cpp16
-rw-r--r--src/declarative/util/qdeclarativeview.cpp8
-rw-r--r--src/declarative/util/qlistmodelinterface.cpp8
-rw-r--r--src/declarative/util/qlistmodelinterface_p.h4
-rw-r--r--src/gui/accessible/accessible.pri2
-rw-r--r--src/gui/accessible/qaccessible_mac_p.h4
-rw-r--r--src/gui/dialogs/dialogs.pri4
-rw-r--r--src/gui/dialogs/qdialog.cpp2
-rw-r--r--src/gui/dialogs/qfiledialog.cpp5
-rw-r--r--src/gui/dialogs/qfiledialog_mac.mm9
-rw-r--r--src/gui/dialogs/qfiledialog_win.cpp3
-rw-r--r--src/gui/dialogs/qfileinfogatherer_p.h3
-rw-r--r--src/gui/dialogs/qfilesystemmodel.cpp45
-rw-r--r--src/gui/dialogs/qfontdialog_mac.mm4
-rw-r--r--src/gui/dialogs/qinputdialog.cpp44
-rw-r--r--src/gui/dialogs/qinputdialog.h25
-rw-r--r--src/gui/dialogs/qprintdialog.qdoc10
-rw-r--r--src/gui/egl/egl.pri28
-rw-r--r--src/gui/egl/qegl.cpp6
-rw-r--r--src/gui/egl/qegl_qpa.cpp111
-rw-r--r--src/gui/embedded/qcopchannel_qws.cpp2
-rw-r--r--src/gui/embedded/qkbd_defaultmap_qws_p.h7
-rw-r--r--src/gui/embedded/qkbd_qws.cpp24
-rw-r--r--src/gui/embedded/qtransportauth_qws.cpp4
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp39
-rw-r--r--src/gui/graphicsview/qgraphicsitem_p.h6
-rw-r--r--src/gui/graphicsview/qgraphicslayoutitem.cpp4
-rw-r--r--src/gui/graphicsview/qgraphicsproxywidget.cpp6
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp14
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h2
-rw-r--r--src/gui/graphicsview/qgraphicssceneevent.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp10
-rw-r--r--src/gui/graphicsview/qgraphicsview_p.h2
-rw-r--r--src/gui/graphicsview/qgraphicswidget.cpp18
-rw-r--r--src/gui/graphicsview/qgridlayoutengine.cpp317
-rw-r--r--src/gui/graphicsview/qgridlayoutengine_p.h13
-rw-r--r--src/gui/gui.pro5
-rw-r--r--src/gui/image/image.pri5
-rw-r--r--src/gui/image/qbitmap.cpp8
-rw-r--r--src/gui/image/qbitmap.h1
-rw-r--r--src/gui/image/qicon.cpp8
-rw-r--r--src/gui/image/qicon.h2
-rw-r--r--src/gui/image/qimage.cpp12
-rw-r--r--src/gui/image/qimage.h2
-rw-r--r--src/gui/image/qimage_ssse3.cpp2
-rw-r--r--src/gui/image/qnativeimage.cpp20
-rw-r--r--src/gui/image/qpicture.cpp8
-rw-r--r--src/gui/image/qpicture.h1
-rw-r--r--src/gui/image/qpixmap.cpp13
-rw-r--r--src/gui/image/qpixmap.h2
-rw-r--r--src/gui/image/qpixmap_blitter.cpp311
-rw-r--r--src/gui/image/qpixmap_blitter_p.h166
-rw-r--r--src/gui/image/qpixmap_qpa.cpp49
-rw-r--r--src/gui/image/qpixmap_s60.cpp3
-rw-r--r--src/gui/image/qpixmap_x11_p.h2
-rw-r--r--src/gui/image/qpixmapdata_p.h3
-rw-r--r--src/gui/image/qpixmapdatafactory.cpp7
-rw-r--r--src/gui/image/qpnghandler.cpp82
-rw-r--r--src/gui/image/qtiffhandler.cpp1
-rw-r--r--src/gui/image/qxbmhandler.cpp25
-rw-r--r--src/gui/image/qxpmhandler.cpp2
-rw-r--r--src/gui/inputmethod/inputmethod.pri2
-rw-r--r--src/gui/inputmethod/qinputcontextfactory.cpp4
-rw-r--r--src/gui/itemviews/qabstractitemview.cpp14
-rw-r--r--src/gui/itemviews/qabstractproxymodel.cpp26
-rw-r--r--src/gui/itemviews/qabstractproxymodel.h3
-rw-r--r--src/gui/itemviews/qdirmodel.cpp19
-rw-r--r--src/gui/itemviews/qitemselectionmodel.cpp15
-rw-r--r--src/gui/itemviews/qlistview.cpp7
-rw-r--r--src/gui/itemviews/qstringlistmodel.cpp3
-rw-r--r--src/gui/itemviews/qtableview.cpp4
-rw-r--r--src/gui/kernel/kernel.pri66
-rw-r--r--src/gui/kernel/mac.pri2
-rw-r--r--src/gui/kernel/qapplication.cpp56
-rw-r--r--src/gui/kernel/qapplication_mac.mm4
-rw-r--r--src/gui/kernel/qapplication_p.h57
-rw-r--r--src/gui/kernel/qapplication_qpa.cpp928
-rw-r--r--src/gui/kernel/qapplication_s60.cpp20
-rw-r--r--src/gui/kernel/qapplication_win.cpp15
-rw-r--r--src/gui/kernel/qapplication_x11.cpp26
-rw-r--r--src/gui/kernel/qclipboard_qpa.cpp163
-rw-r--r--src/gui/kernel/qclipboard_s60.cpp84
-rw-r--r--src/gui/kernel/qclipboard_win.cpp2
-rw-r--r--src/gui/kernel/qclipboard_x11.cpp4
-rw-r--r--src/gui/kernel/qcocoamenuloader_mac.mm10
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm17
-rw-r--r--src/gui/kernel/qcursor.h2
-rw-r--r--src/gui/kernel/qcursor_p.h2
-rw-r--r--src/gui/kernel/qcursor_qpa.cpp127
-rw-r--r--src/gui/kernel/qdesktopwidget.qdoc10
-rw-r--r--src/gui/kernel/qdesktopwidget_qpa.cpp180
-rw-r--r--src/gui/kernel/qdesktopwidget_qpa_p.h76
-rw-r--r--src/gui/kernel/qdnd_p.h4
-rw-r--r--src/gui/kernel/qeventdispatcher_glib_qpa.cpp147
-rw-r--r--src/gui/kernel/qeventdispatcher_glib_qpa_p.h88
-rw-r--r--src/gui/kernel/qeventdispatcher_qpa.cpp302
-rw-r--r--src/gui/kernel/qeventdispatcher_qpa_p.h86
-rw-r--r--src/gui/kernel/qeventdispatcher_s60.cpp66
-rw-r--r--src/gui/kernel/qeventdispatcher_s60_p.h24
-rw-r--r--src/gui/kernel/qgenericplugin_qpa.cpp112
-rw-r--r--src/gui/kernel/qgenericplugin_qpa.h84
-rw-r--r--src/gui/kernel/qgenericpluginfactory_qpa.cpp115
-rw-r--r--src/gui/kernel/qgenericpluginfactory_qpa.h67
-rw-r--r--src/gui/kernel/qgesture.cpp27
-rw-r--r--src/gui/kernel/qgesturemanager.cpp14
-rw-r--r--src/gui/kernel/qgesturemanager_p.h1
-rw-r--r--src/gui/kernel/qguifunctions_wince.cpp3
-rw-r--r--src/gui/kernel/qguiplatformplugin.cpp2
-rw-r--r--src/gui/kernel/qkeymapper_mac.cpp2
-rw-r--r--src/gui/kernel/qkeysequence.cpp8
-rw-r--r--src/gui/kernel/qkeysequence.h1
-rw-r--r--src/gui/kernel/qmotifdnd_x11.cpp5
-rw-r--r--src/gui/kernel/qplatformcursor_qpa.cpp660
-rw-r--r--src/gui/kernel/qplatformcursor_qpa.h103
-rw-r--r--src/gui/kernel/qplatformeventloopintegration_qpa.cpp41
-rw-r--r--src/gui/kernel/qplatformeventloopintegration_qpa.h64
-rw-r--r--src/gui/kernel/qplatformglcontext_qpa.cpp57
-rw-r--r--src/gui/kernel/qplatformglcontext_qpa.h79
-rw-r--r--src/gui/kernel/qplatformintegration_qpa.cpp77
-rw-r--r--src/gui/kernel/qplatformintegration_qpa.h97
-rw-r--r--src/gui/kernel/qplatformintegrationfactory_qpa.cpp88
-rw-r--r--src/gui/kernel/qplatformintegrationfactory_qpa_p.h78
-rw-r--r--src/gui/kernel/qplatformintegrationplugin_qpa.cpp55
-rw-r--r--src/gui/kernel/qplatformintegrationplugin_qpa.h92
-rw-r--r--src/gui/kernel/qplatformscreen_qpa.cpp66
-rw-r--r--src/gui/kernel/qplatformscreen_qpa.h81
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.cpp129
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.h94
-rw-r--r--src/gui/kernel/qplatformwindowformat_qpa.cpp1012
-rw-r--r--src/gui/kernel/qplatformwindowformat_qpa.h241
-rw-r--r--src/gui/kernel/qsizepolicy.qdoc10
-rw-r--r--src/gui/kernel/qsoftkeymanager_s60.cpp2
-rw-r--r--src/gui/kernel/qstandardgestures.cpp25
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm37
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac_p.h2
-rw-r--r--src/gui/kernel/qt_x11_p.h1
-rw-r--r--src/gui/kernel/qwidget.cpp153
-rw-r--r--src/gui/kernel/qwidget.h19
-rw-r--r--src/gui/kernel/qwidget_mac.mm52
-rw-r--r--src/gui/kernel/qwidget_p.h25
-rw-r--r--src/gui/kernel/qwidget_qpa.cpp895
-rw-r--r--src/gui/kernel/qwidget_qws.cpp24
-rw-r--r--src/gui/kernel/qwidget_s60.cpp7
-rw-r--r--src/gui/kernel/qwidget_win.cpp23
-rw-r--r--src/gui/kernel/qwindowdefs.h6
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa.cpp255
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa.h95
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa_p.h189
-rw-r--r--src/gui/painting/painting.pri43
-rw-r--r--src/gui/painting/qbackingstore.cpp49
-rw-r--r--src/gui/painting/qblendfunctions_armv6_rvct.s222
-rw-r--r--src/gui/painting/qblittable.cpp105
-rw-r--r--src/gui/painting/qblittable_p.h91
-rw-r--r--src/gui/painting/qbrush.cpp9
-rw-r--r--src/gui/painting/qbrush.h2
-rw-r--r--src/gui/painting/qcolormap.qdoc10
-rw-r--r--src/gui/painting/qcolormap_qpa.cpp231
-rw-r--r--src/gui/painting/qdrawhelper.cpp159
-rw-r--r--src/gui/painting/qdrawhelper_arm_simd.cpp332
-rw-r--r--src/gui/painting/qdrawhelper_arm_simd_p.h76
-rw-r--r--src/gui/painting/qdrawhelper_armv6_p.h81
-rw-r--r--src/gui/painting/qdrawhelper_armv6_rvct.inc496
-rw-r--r--src/gui/painting/qdrawhelper_armv6_rvct.s177
-rw-r--r--src/gui/painting/qgraphicssystem.cpp7
-rw-r--r--src/gui/painting/qgraphicssystem_p.h6
-rw-r--r--src/gui/painting/qgraphicssystem_qws.cpp2
-rw-r--r--src/gui/painting/qgrayraster.c35
-rw-r--r--src/gui/painting/qgrayraster_p.h2
-rw-r--r--src/gui/painting/qimagescale.cpp2
-rw-r--r--src/gui/painting/qpaintdevice.cpp2
-rw-r--r--src/gui/painting/qpaintdevice.qdoc10
-rw-r--r--src/gui/painting/qpaintdevice_qpa.cpp68
-rw-r--r--src/gui/painting/qpaintengine.h4
-rw-r--r--src/gui/painting/qpaintengine_blitter.cpp663
-rw-r--r--src/gui/painting/qpaintengine_blitter_p.h113
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp107
-rw-r--r--src/gui/painting/qpaintengine_raster_p.h3
-rw-r--r--src/gui/painting/qpainter.cpp4
-rw-r--r--src/gui/painting/qpainterpath.cpp8
-rw-r--r--src/gui/painting/qpainterpath.h1
-rw-r--r--src/gui/painting/qpdf.cpp1
-rw-r--r--src/gui/painting/qpen.cpp8
-rw-r--r--src/gui/painting/qpen.h1
-rw-r--r--src/gui/painting/qpolygon.cpp16
-rw-r--r--src/gui/painting/qpolygon.h3
-rw-r--r--src/gui/painting/qprinterinfo.qdoc10
-rw-r--r--src/gui/painting/qregion.cpp12
-rw-r--r--src/gui/painting/qregion.h9
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp11
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac.cpp257
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac_p.h100
-rw-r--r--src/gui/painting/qwindowsurface.cpp28
-rw-r--r--src/gui/painting/qwindowsurface_p.h9
-rw-r--r--src/gui/painting/qwindowsurface_raster.cpp50
-rw-r--r--src/gui/painting/qwindowsurface_raster_p.h2
-rw-r--r--src/gui/painting/qwindowsurface_s60.cpp8
-rw-r--r--src/gui/painting/qwindowsurface_x11.cpp2
-rw-r--r--src/gui/s60framework/qs60mainapplication.cpp7
-rw-r--r--src/gui/styles/qmacstyle.qdoc10
-rw-r--r--src/gui/styles/qmacstyle_mac.mm5
-rw-r--r--src/gui/styles/qs60style.cpp123
-rw-r--r--src/gui/styles/qs60style_feedbackinterface_p.h50
-rw-r--r--src/gui/styles/qs60style_p.h11
-rw-r--r--src/gui/styles/qs60style_s60.cpp99
-rw-r--r--src/gui/styles/qstyle.cpp8
-rw-r--r--src/gui/styles/qstylesheetstyle.cpp143
-rw-r--r--src/gui/styles/qstylesheetstyle_p.h20
-rw-r--r--src/gui/styles/qwindowsxpstyle.cpp2
-rw-r--r--src/gui/styles/styles.pri2
-rw-r--r--src/gui/text/qfont.cpp26
-rw-r--r--src/gui/text/qfont_qpa.cpp114
-rw-r--r--src/gui/text/qfontdatabase.cpp69
-rw-r--r--src/gui/text/qfontdatabase.h3
-rw-r--r--src/gui/text/qfontdatabase_qpa.cpp393
-rw-r--r--src/gui/text/qfontdatabase_qws.cpp10
-rw-r--r--src/gui/text/qfontdatabase_x11.cpp30
-rw-r--r--src/gui/text/qfontengine.cpp25
-rw-r--r--src/gui/text/qfontengine_ft.cpp32
-rw-r--r--src/gui/text/qfontengine_ft_p.h25
-rw-r--r--src/gui/text/qfontengine_mac.mm24
-rw-r--r--src/gui/text/qfontengine_p.h23
-rw-r--r--src/gui/text/qfontengine_qpa.cpp691
-rw-r--r--src/gui/text/qfontengine_qpa_p.h262
-rw-r--r--src/gui/text/qfontengine_s60.cpp68
-rw-r--r--src/gui/text/qfontengine_s60_p.h3
-rw-r--r--src/gui/text/qfontengine_win.cpp2
-rw-r--r--src/gui/text/qfontsubset.cpp4
-rw-r--r--src/gui/text/qplatformfontdatabase_qpa.cpp241
-rw-r--r--src/gui/text/qplatformfontdatabase_qpa.h108
-rw-r--r--src/gui/text/qstatictext.cpp22
-rw-r--r--src/gui/text/qstatictext_p.h54
-rw-r--r--src/gui/text/qtextcontrol.cpp3
-rw-r--r--src/gui/text/qtextcursor.h1
-rw-r--r--src/gui/text/qtextdocument.cpp8
-rw-r--r--src/gui/text/qtextdocument_p.cpp4
-rw-r--r--src/gui/text/qtextengine.cpp18
-rw-r--r--src/gui/text/qtextlayout.cpp2
-rw-r--r--src/gui/text/text.pri19
-rw-r--r--src/gui/util/qcompleter.cpp20
-rw-r--r--src/gui/util/qcompleter_p.h1
-rw-r--r--src/gui/util/qdesktopservices.cpp2
-rw-r--r--src/gui/util/util.pri4
-rw-r--r--src/gui/widgets/qabstractslider.cpp2
-rw-r--r--src/gui/widgets/qcocoamenu_mac.mm22
-rw-r--r--src/gui/widgets/qcombobox.cpp2
-rw-r--r--src/gui/widgets/qdatetimeedit.cpp4
-rw-r--r--src/gui/widgets/qlinecontrol.cpp4
-rw-r--r--src/gui/widgets/qlineedit.cpp5
-rw-r--r--src/gui/widgets/qmainwindow.cpp19
-rw-r--r--src/gui/widgets/qmainwindowlayout_mac.mm31
-rw-r--r--src/gui/widgets/qmainwindowlayout_p.h15
-rw-r--r--src/gui/widgets/qmenu.h4
-rw-r--r--src/gui/widgets/qmenubar.cpp30
-rw-r--r--src/gui/widgets/qtextedit.cpp2
-rw-r--r--src/gui/widgets/qvalidator.cpp45
-rw-r--r--src/gui/widgets/widgets.pri2
-rw-r--r--src/imports/folderlistmodel/folderlistmodel.pro5
-rw-r--r--src/imports/gestures/gestures.pro5
-rw-r--r--src/imports/particles/particles.pro5
-rw-r--r--src/multimedia/audio/audio.pri4
-rw-r--r--src/multimedia/audio/qaudioengine.cpp4
-rw-r--r--src/multimedia/audio/qaudioinput.cpp2
-rw-r--r--src/multimedia/audio/qaudioinput_alsa_p.cpp21
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.cpp11
-rw-r--r--src/multimedia/audio/qaudiooutput.cpp2
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp2
-rw-r--r--src/network/access/qhttp.cpp2
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp166
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h36
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp54
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel_p.h7
-rw-r--r--src/network/access/qhttpnetworkheader.cpp12
-rw-r--r--src/network/access/qhttpnetworkreply.cpp5
-rw-r--r--src/network/access/qhttpnetworkreply_p.h8
-rw-r--r--src/network/access/qnetworkaccessbackend.cpp14
-rw-r--r--src/network/access/qnetworkaccessbackend_p.h1
-rw-r--r--src/network/access/qnetworkaccesscachebackend.cpp12
-rw-r--r--src/network/access/qnetworkaccesscachebackend_p.h2
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend.cpp6
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend_p.h1
-rw-r--r--src/network/access/qnetworkaccessfilebackend.cpp6
-rw-r--r--src/network/access/qnetworkaccessfilebackend_p.h1
-rw-r--r--src/network/access/qnetworkaccessftpbackend.cpp17
-rw-r--r--src/network/access/qnetworkaccessftpbackend_p.h1
-rw-r--r--src/network/access/qnetworkaccesshttpbackend.cpp84
-rw-r--r--src/network/access/qnetworkaccesshttpbackend_p.h2
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp49
-rw-r--r--src/network/access/qnetworkaccessmanager_p.h6
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp2
-rw-r--r--src/network/access/qnetworkrequest.cpp20
-rw-r--r--src/network/bearer/qnetworkconfigmanager.cpp38
-rw-r--r--src/network/bearer/qnetworksession.cpp8
-rw-r--r--src/network/kernel/qauthenticator.cpp24
-rw-r--r--src/network/kernel/qauthenticator_p.h1
-rw-r--r--src/network/kernel/qnetworkproxy.cpp6
-rw-r--r--src/network/socket/qabstractsocket.cpp30
-rw-r--r--src/network/socket/qabstractsocket.h1
-rw-r--r--src/network/socket/qabstractsocket_p.h7
-rw-r--r--src/network/socket/qlocalserver_unix.cpp2
-rw-r--r--src/network/socket/qnativesocketengine_win.cpp4
-rw-r--r--src/network/ssl/qsslconfiguration.cpp7
-rw-r--r--src/network/ssl/qsslsocket.cpp14
-rw-r--r--src/network/ssl/qsslsocket_openssl.cpp121
-rw-r--r--src/network/ssl/qsslsocket_openssl_p.h2
-rw-r--r--src/network/ssl/qsslsocket_p.h2
-rw-r--r--src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp5
-rw-r--r--src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h2
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadermanager_p.h4
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadersource_p.h5
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp68
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp20
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h4
-rw-r--r--src/opengl/gl2paintengineex/qtriangulator.cpp21
-rw-r--r--src/opengl/opengl.pro7
-rw-r--r--src/opengl/qgl.cpp49
-rw-r--r--src/opengl/qgl.h1
-rw-r--r--src/opengl/qgl_egl.cpp6
-rw-r--r--src/opengl/qgl_p.h102
-rw-r--r--src/opengl/qgl_qpa.cpp345
-rw-r--r--src/opengl/qgl_x11egl.cpp2
-rw-r--r--src/opengl/qglextensions_p.h23
-rw-r--r--src/opengl/qglframebufferobject.cpp27
-rw-r--r--src/opengl/qglpixelbuffer.cpp4
-rw-r--r--src/opengl/qglpixelbuffer_p.h4
-rw-r--r--src/opengl/qglpixelbuffer_stub.cpp84
-rw-r--r--src/opengl/qglpixmapfilter.cpp6
-rw-r--r--src/opengl/qglshaderprogram.cpp10
-rw-r--r--src/opengl/qpaintengine_opengl.cpp10
-rw-r--r--src/opengl/qpixmapdata_gl.cpp4
-rw-r--r--src/opengl/qpixmapdata_gl_p.h1
-rw-r--r--src/opengl/qpixmapdata_x11gl_egl.cpp4
-rw-r--r--src/opengl/qwindowsurface_gl.cpp194
-rw-r--r--src/opengl/qwindowsurface_gl_p.h7
-rw-r--r--src/openvg/qpaintengine_vg.cpp98
-rw-r--r--src/openvg/qpaintengine_vg_p.h1
-rw-r--r--src/openvg/qpixmapdata_vg.cpp27
-rw-r--r--src/openvg/qpixmapdata_vg_p.h2
-rw-r--r--src/openvg/qvg_p.h5
-rw-r--r--src/openvg/qvg_symbian.cpp14
-rw-r--r--src/openvg/qvgfontglyphcache_p.h6
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.cpp6
-rw-r--r--src/plugins/bearer/connman/qconnmanengine.cpp83
-rw-r--r--src/plugins/bearer/connman/qconnmanengine.h27
-rw-r--r--src/plugins/bearer/connman/qconnmanservice_linux.cpp15
-rw-r--r--src/plugins/bearer/connman/qofonoservice_linux.cpp12
-rw-r--r--src/plugins/bearer/corewlan/corewlan.pro5
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.mm89
-rw-r--r--src/plugins/bearer/icd/icd.pro2
-rw-r--r--src/plugins/bearer/icd/maemo_icd.cpp2
-rw-r--r--src/plugins/bearer/icd/qnetworksession_impl.cpp2
-rw-r--r--src/plugins/bearer/platformdefs_win.h3
-rw-r--r--src/plugins/bearer/symbian/qnetworksession_impl.cpp10
-rw-r--r--src/plugins/bearer/symbian/symbian.pri2
-rw-r--r--src/plugins/bearer/symbian/symbianengine.cpp37
-rw-r--r--src/plugins/bearer/symbian/symbianengine.h6
-rw-r--r--src/plugins/generic/linuxinput/linuxinput.pro18
-rw-r--r--src/plugins/generic/linuxinput/main.cpp80
-rw-r--r--src/plugins/generic/linuxinput/qlinuxinput.cpp557
-rw-r--r--src/plugins/generic/linuxinput/qlinuxinput.h111
-rw-r--r--src/plugins/generic/tslib/main.cpp78
-rw-r--r--src/plugins/generic/tslib/qtslib.cpp144
-rw-r--r--src/plugins/generic/tslib/qtslib.h77
-rw-r--r--src/plugins/generic/tslib/tslib.pro13
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp86
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp18
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp36
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbscreen.h1
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp9
-rw-r--r--src/plugins/graphicssystems/graphicssystems.pro4
-rw-r--r--src/plugins/graphicssystems/meego/dithering.cpp306
-rw-r--r--src/plugins/graphicssystems/meego/meego.pro4
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.cpp80
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.h22
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.cpp244
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.h30
-rw-r--r--src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp292
-rw-r--r--src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h71
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp74
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.h2
-rw-r--r--src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp60
-rw-r--r--src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.h55
-rw-r--r--src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp8
-rw-r--r--src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp4
-rw-r--r--src/plugins/phonon/gstreamer/gstreamer.pro2
-rw-r--r--src/plugins/phonon/mmf/mmf.pro8
-rw-r--r--src/plugins/platforms/cocoa/cocoa.pro29
-rw-r--r--src/plugins/platforms/cocoa/main.mm74
-rw-r--r--src/plugins/platforms/cocoa/qcocoaautoreleasepool.h57
-rw-r--r--src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm52
-rw-r--r--src/plugins/platforms/cocoa/qcocoaeventloopintegration.h74
-rw-r--r--src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm128
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.h98
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm122
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h75
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm116
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindowsurface.h73
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindowsurface.mm103
-rw-r--r--src/plugins/platforms/cocoa/qnsview.h79
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm211
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.h61
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.mm73
-rw-r--r--src/plugins/platforms/directfb/directfb.pro35
-rw-r--r--src/plugins/platforms/directfb/main.cpp72
-rw-r--r--src/plugins/platforms/directfb/qdirectfbblitter.cpp155
-rw-r--r--src/plugins/platforms/directfb/qdirectfbblitter.h76
-rw-r--r--src/plugins/platforms/directfb/qdirectfbconvenience.cpp376
-rw-r--r--src/plugins/platforms/directfb/qdirectfbconvenience.h84
-rw-r--r--src/plugins/platforms/directfb/qdirectfbcursor.cpp80
-rw-r--r--src/plugins/platforms/directfb/qdirectfbcursor.h63
-rw-r--r--src/plugins/platforms/directfb/qdirectfbglcontext.cpp99
-rw-r--r--src/plugins/platforms/directfb/qdirectfbglcontext.h69
-rw-r--r--src/plugins/platforms/directfb/qdirectfbinput.cpp208
-rw-r--r--src/plugins/platforms/directfb/qdirectfbinput.h86
-rw-r--r--src/plugins/platforms/directfb/qdirectfbintegration.cpp144
-rw-r--r--src/plugins/platforms/directfb/qdirectfbintegration.h104
-rw-r--r--src/plugins/platforms/directfb/qdirectfbwindow.cpp191
-rw-r--r--src/plugins/platforms/directfb/qdirectfbwindow.h79
-rw-r--r--src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp141
-rw-r--r--src/plugins/platforms/directfb/qdirectfbwindowsurface.h77
-rw-r--r--src/plugins/platforms/eglconvenience/qeglconvenience.cpp316
-rw-r--r--src/plugins/platforms/eglconvenience/qeglconvenience.h59
-rw-r--r--src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp155
-rw-r--r--src/plugins/platforms/eglconvenience/qeglplatformcontext.h71
-rw-r--r--src/plugins/platforms/eglfs/eglfs.pro31
-rw-r--r--src/plugins/platforms/eglfs/main.cpp72
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.cpp101
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.h76
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.cpp203
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.h76
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.cpp84
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.h71
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindowsurface.cpp104
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindowsurface.h67
-rw-r--r--src/plugins/platforms/fb_base/fb_base.cpp507
-rw-r--r--src/plugins/platforms/fb_base/fb_base.h210
-rw-r--r--src/plugins/platforms/fb_base/fb_base.pri2
-rw-r--r--src/plugins/platforms/fb_base/fb_base.pro23
-rw-r--r--src/plugins/platforms/fontdatabases/basicunix/basicunix.pri82
-rw-r--r--src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp326
-rw-r--r--src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h67
-rw-r--r--src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri12
-rw-r--r--src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp572
-rw-r--r--src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h56
-rw-r--r--src/plugins/platforms/fontdatabases/genericunix/genericunix.pri10
-rw-r--r--src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h53
-rw-r--r--src/plugins/platforms/linuxfb/linuxfb.pro13
-rw-r--r--src/plugins/platforms/linuxfb/main.cpp72
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp866
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.h133
-rw-r--r--src/plugins/platforms/minimal/main.cpp73
-rw-r--r--src/plugins/platforms/minimal/minimal.pro13
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.cpp74
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.h84
-rw-r--r--src/plugins/platforms/minimal/qminimalwindowsurface.cpp86
-rw-r--r--src/plugins/platforms/minimal/qminimalwindowsurface.h67
-rw-r--r--src/plugins/platforms/openkode/main.cpp72
-rw-r--r--src/plugins/platforms/openkode/openkode.pro42
-rw-r--r--src/plugins/platforms/openkode/openkodekeytranslator.h244
-rw-r--r--src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp119
-rw-r--r--src/plugins/platforms/openkode/qopenkodeeventloopintegration.h69
-rw-r--r--src/plugins/platforms/openkode/qopenkodeintegration.cpp240
-rw-r--r--src/plugins/platforms/openkode/qopenkodeintegration.h116
-rw-r--r--src/plugins/platforms/openkode/qopenkodewindow.cpp316
-rw-r--r--src/plugins/platforms/openkode/qopenkodewindow.h89
-rw-r--r--src/plugins/platforms/openkode/resources.qrc6
-rw-r--r--src/plugins/platforms/openkode/shaders/frag.glslf49
-rw-r--r--src/plugins/platforms/openkode/shaders/vert.glslv55
-rw-r--r--src/plugins/platforms/openvglite/main.cpp71
-rw-r--r--src/plugins/platforms/openvglite/openvglite.pro12
-rw-r--r--src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp193
-rw-r--r--src/plugins/platforms/openvglite/qgraphicssystem_vglite.h93
-rw-r--r--src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp131
-rw-r--r--src/plugins/platforms/openvglite/qwindowsurface_vglite.h91
-rw-r--r--src/plugins/platforms/platforms.pro4
-rw-r--r--src/plugins/platforms/qvfb/main.cpp73
-rw-r--r--src/plugins/platforms/qvfb/qvfb.pro13
-rw-r--r--src/plugins/platforms/qvfb/qvfbintegration.cpp448
-rw-r--r--src/plugins/platforms/qvfb/qvfbintegration.h100
-rw-r--r--src/plugins/platforms/qvfb/qvfbwindowsurface.cpp108
-rw-r--r--src/plugins/platforms/qvfb/qvfbwindowsurface.h80
-rw-r--r--src/plugins/platforms/testlite/main.cpp79
-rw-r--r--src/plugins/platforms/testlite/qglxintegration.cpp370
-rw-r--r--src/plugins/platforms/testlite/qglxintegration.h93
-rw-r--r--src/plugins/platforms/testlite/qtestliteintegration.cpp153
-rw-r--r--src/plugins/platforms/testlite/qtestliteintegration.h102
-rw-r--r--src/plugins/platforms/testlite/qtestlitewindow.cpp1587
-rw-r--r--src/plugins/platforms/testlite/qtestlitewindow.h157
-rw-r--r--src/plugins/platforms/testlite/qtestlitewindowsurface.cpp226
-rw-r--r--src/plugins/platforms/testlite/qtestlitewindowsurface.h88
-rw-r--r--src/plugins/platforms/testlite/testlite.pro29
-rw-r--r--src/plugins/platforms/vnc/main.cpp73
-rw-r--r--src/plugins/platforms/vnc/qvnccursor.cpp156
-rw-r--r--src/plugins/platforms/vnc/qvnccursor.h76
-rw-r--r--src/plugins/platforms/vnc/qvncintegration.cpp242
-rw-r--r--src/plugins/platforms/vnc/qvncintegration.h109
-rw-r--r--src/plugins/platforms/vnc/qvncserver.cpp1935
-rw-r--r--src/plugins/platforms/vnc/qvncserver.h533
-rw-r--r--src/plugins/platforms/vnc/vnc.pro22
-rw-r--r--src/plugins/plugins.pro6
-rw-r--r--src/plugins/s60/feedback/feedback.pro18
-rw-r--r--src/plugins/s60/feedback/qtactileFeedback.h54
-rw-r--r--src/plugins/s60/feedback/qtactileFeedback_s60.cpp83
-rw-r--r--src/plugins/s60/s60.pro4
-rw-r--r--src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri10
-rw-r--r--src/qbase.pri12
-rw-r--r--src/qt3support/canvas/q3canvas.cpp2
-rw-r--r--src/qt3support/sql/q3sqlfieldinfo.qdoc10
-rw-r--r--src/qt3support/sql/q3sqlrecordinfo.qdoc10
-rw-r--r--src/qt3support/text/q3richtext.cpp2
-rw-r--r--src/qt3support/tools/q3asciicache.qdoc10
-rw-r--r--src/qt3support/tools/q3asciidict.qdoc10
-rw-r--r--src/qt3support/tools/q3cache.qdoc10
-rw-r--r--src/qt3support/tools/q3dict.qdoc10
-rw-r--r--src/qt3support/tools/q3intcache.qdoc10
-rw-r--r--src/qt3support/tools/q3intdict.qdoc10
-rw-r--r--src/qt3support/tools/q3memarray.qdoc10
-rw-r--r--src/qt3support/tools/q3ptrdict.qdoc10
-rw-r--r--src/qt3support/tools/q3ptrlist.qdoc10
-rw-r--r--src/qt3support/tools/q3ptrqueue.qdoc10
-rw-r--r--src/qt3support/tools/q3ptrstack.qdoc10
-rw-r--r--src/qt3support/tools/q3ptrvector.qdoc10
-rw-r--r--src/qt3support/tools/q3valuelist.qdoc10
-rw-r--r--src/qt3support/tools/q3valuestack.qdoc10
-rw-r--r--src/qt3support/tools/q3valuevector.h4
-rw-r--r--src/qt3support/tools/q3valuevector.qdoc10
-rw-r--r--src/qt_install.pri2
-rw-r--r--src/s60installs/bwins/QtCoreu.def63
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def2215
-rw-r--r--src/s60installs/bwins/QtGuiu.def72
-rw-r--r--src/s60installs/bwins/QtOpenVGu.def1
-rw-r--r--src/s60installs/eabi/QtCoreu.def49
-rw-r--r--src/s60installs/eabi/QtDeclarativeu.def2389
-rw-r--r--src/s60installs/eabi/QtGuiu.def67
-rw-r--r--src/s60installs/eabi/QtOpenVGu.def1
-rw-r--r--src/s60installs/qt.iby11
-rw-r--r--src/s60installs/qtdemoapps.iby15
-rw-r--r--src/s60installs/s60installs.pro65
-rw-r--r--src/s60main/s60main.pro2
-rw-r--r--src/script/api/qscriptengine.cpp18
-rw-r--r--src/script/api/qscriptengine.h5
-rw-r--r--src/script/api/qscriptvalue.cpp14
-rw-r--r--src/script/bridge/qscriptclassobject.cpp12
-rw-r--r--src/script/script.pro10
-rw-r--r--src/scripttools/debugging/qscriptdebuggeragent.cpp6
-rw-r--r--src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp8
-rw-r--r--src/scripttools/debugging/qscriptdebugoutputwidget.cpp8
-rw-r--r--src/scripttools/debugging/qscripterrorlogwidget.cpp8
-rw-r--r--src/sql/drivers/oci/qsql_oci.cpp239
-rw-r--r--src/sql/kernel/qsql.qdoc10
-rw-r--r--src/sql/kernel/qsqldriver.cpp8
-rw-r--r--src/src.pro1
-rw-r--r--src/testlib/qsignalspy.qdoc10
-rw-r--r--src/testlib/qtestcase.cpp3
-rw-r--r--src/testlib/qtestevent.qdoc10
-rw-r--r--src/testlib/testlib.pro10
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp4
-rw-r--r--src/tools/uic/ui4.cpp11
-rw-r--r--src/tools/uic/ui4.h8
-rw-r--r--src/xmlpatterns/data/qabstractfloat.cpp2
-rw-r--r--src/xmlpatterns/data/qatomicvalue.cpp2
-rw-r--r--src/xmlpatterns/data/qschematime_p.h2
-rwxr-xr-xsrc/xmlpatterns/parser/createTokenLookup.sh15
-rw-r--r--src/xmlpatterns/schema/qxsdschemaparser.cpp8
-rw-r--r--src/xmlpatterns/schema/qxsdschemaparser_setup.cpp2
-rw-r--r--src/xmlpatterns/schema/qxsdstatemachine_p.h4
-rw-r--r--src/xmlpatterns/type/qtypechecker.cpp2
-rw-r--r--tests/arthur/.gitignore2
-rw-r--r--tests/arthur/baselineserver/.gitignore2
-rwxr-xr-xtests/arthur/baselineserver/bin/runserver13
-rw-r--r--tests/arthur/baselineserver/src/baselineserver.cpp519
-rw-r--r--tests/arthur/baselineserver/src/baselineserver.h128
-rw-r--r--tests/arthur/baselineserver/src/baselineserver.pro27
-rw-r--r--tests/arthur/baselineserver/src/htmlpage.cpp228
-rw-r--r--tests/arthur/baselineserver/src/htmlpage.h77
-rw-r--r--tests/arthur/baselineserver/src/main.cpp70
-rw-r--r--tests/arthur/common/baselineprotocol.cpp405
-rw-r--r--tests/arthur/common/baselineprotocol.h168
-rw-r--r--tests/arthur/common/baselineprotocol.pri10
-rw-r--r--tests/arthur/common/lookup3.cpp786
-rw-r--r--tests/arthur/common/paintcommands.cpp29
-rw-r--r--tests/arthur/common/paintcommands.h5
-rw-r--r--tests/arthur/lance/lance.pro2
-rw-r--r--tests/auto/checkxmlfiles/checkxmlfiles.pro2
-rw-r--r--tests/auto/collections/collections.pro1
-rw-r--r--tests/auto/collections/tst_collections.cpp212
-rw-r--r--tests/auto/declarative/examples/examples.pro2
-rw-r--r--tests/auto/declarative/examples/tst_examples.cpp1
-rw-r--r--tests/auto/declarative/moduleqt47/moduleqt47.pro2
-rw-r--r--tests/auto/declarative/parserstress/parserstress.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro2
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml7
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro2
-rw-r--r--tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro2
-rw-r--r--tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp78
-rw-r--r--tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp5
-rw-r--r--tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h4
-rw-r--r--tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp7
-rw-r--r--tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp4
-rw-r--r--tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/ConstantsOverrideBindings.qml6
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/constantsOverrideBindings.4.qml11
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/outerBindingOverridesInnerBinding.qml3
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/propertySplicing.qml10
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.h43
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp93
-rw-r--r--tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml24
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp32
-rw-r--r--tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/data/gridview-noCurrent.qml52
-rw-r--r--tests/auto/declarative/qdeclarativegridview/data/header.qml32
-rw-r--r--tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp78
-rw-r--r--tests/auto/declarative/qdeclarativeimage/data/rect.pngbin0 -> 171 bytes-rw-r--r--tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp108
-rw-r--r--tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/data/keystest.qml1
-rw-r--r--tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp22
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/AliasPropertyChangeSignalsType.qml20
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.2.qml10
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.qml10
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/testtypes.h2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp126
-rw-r--r--tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp10
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/listview-noCurrent.qml50
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/sizelessthan1.qml26
-rw-r--r--tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp103
-rw-r--r--tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml4
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir1
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp83
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro10
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml16
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp47
-rw-r--r--tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp27
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro2
-rw-r--r--tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro2
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro2
-rw-r--r--tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro2
-rw-r--r--tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro2
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro2
-rw-r--r--tests/auto/declarative/qdeclarativestates/data/QTBUG-14830.qml29
-rw-r--r--tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro2
-rw-r--r--tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp13
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_cb.pngbin496 -> 496 bytes-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_cc.pngbin556 -> 556 bytes-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_ct.pngbin533 -> 533 bytes-rw-r--r--tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro2
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro2
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro2
-rw-r--r--tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro2
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties.qml17
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties2.qml17
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp132
-rw-r--r--tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro2
-rw-r--r--tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro2
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro2
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/basic1.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/basic2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/basic3.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/basic4.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml159
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml187
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml147
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml171
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.pngbin961 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.pngbin972 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.pngbin962 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.pngbin962 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.pngbin962 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.pngbin970 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.pngbin961 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml2203
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.pngbin1588 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.pngbin1575 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.pngbin1502 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.pngbin1583 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.pngbin1681 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.pngbin1524 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.pngbin1627 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.pngbin1524 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.pngbin1678 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.pngbin1573 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.pngbin1670 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.pngbin1658 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml3079
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml159
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml187
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml147
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml171
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic1.0.pngbin0 -> 948 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic1.qml150
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic2.0.pngbin0 -> 948 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic2.qml178
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic3.0.pngbin0 -> 948 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic3.qml138
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic4.0.pngbin0 -> 948 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/basic4.qml162
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.0.pngbin0 -> 680 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.1.pngbin0 -> 680 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.2.pngbin0 -> 704 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.3.pngbin0 -> 695 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.4.pngbin0 -> 680 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.5.pngbin0 -> 710 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.6.pngbin0 -> 705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/enforcerange.qml2119
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.pngbin961 -> 976 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.pngbin972 -> 976 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.pngbin962 -> 986 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.pngbin962 -> 977 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.pngbin962 -> 977 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.pngbin970 -> 977 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.pngbin961 -> 990 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.7.pngbin0 -> 976 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml380
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.0.pngbin1510 -> 1525 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.1.pngbin1510 -> 1647 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.10.pngbin1588 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.11.pngbin1575 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.12.pngbin1502 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.13.pngbin1583 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.14.pngbin1681 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.15.pngbin1524 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.16.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.17.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.18.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.19.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.2.pngbin1656 -> 1584 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.3.pngbin1524 -> 1648 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.4.pngbin1678 -> 1613 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.5.pngbin1510 -> 1663 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.6.pngbin1573 -> 1666 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.7.pngbin1669 -> 1579 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.8.pngbin1658 -> 1579 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.9.pngbin1510 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/ListView/data/listview.qml2618
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/enforcerange.qml31
-rw-r--r--tests/auto/declarative/qmlvisual/ListView/listview.qml13
-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.pngbin714 -> 766 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.pngbin798 -> 797 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.pngbin773 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.pngbin773 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.pngbin754 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.pngbin742 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.pngbin733 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.pngbin712 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.pngbin730 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.pngbin730 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.pngbin730 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.pngbin744 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.pngbin757 -> 794 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.pngbin754 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.pngbin721 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.pngbin732 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.pngbin813 -> 822 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.pngbin756 -> 801 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.pngbin752 -> 803 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.pngbin752 -> 774 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.pngbin774 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.pngbin774 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.pngbin754 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml3194
-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml16
-rw-r--r--tests/auto/declarative/qmlvisual/TEST_GUIDELINES7
-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml6
-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.pngbin817 -> 832 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.pngbin815 -> 830 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.pngbin817 -> 829 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.pngbin815 -> 830 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.pngbin813 -> 830 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.pngbin815 -> 832 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.6.pngbin817 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml1178
-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.pngbin0 -> 622 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.pngbin0 -> 627 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.pngbin0 -> 626 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.pngbin0 -> 625 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml951
-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/data/easing.0.pngbin3393 -> 1267 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.pngbin3381 -> 1648 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.pngbin3101 -> 1617 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.pngbin16542 -> 1267 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml494
-rw-r--r--tests/auto/declarative/qmlvisual/animation/easing/easing.qml21
-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.pngbin508 -> 502 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.pngbin507 -> 508 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.pngbin508 -> 507 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.pngbin508 -> 508 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.pngbin505 -> 508 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.pngbin508 -> 507 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.6.pngbin0 -> 508 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml26
-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.0.pngbin0 -> 379 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.qml338
-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.0.pngbin774 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.1.pngbin762 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.2.pngbin773 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation-visual.qml19
-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.0.pngbin0 -> 1635 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.1.pngbin0 -> 1619 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.2.pngbin0 -> 1586 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.3.pngbin0 -> 1635 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.4.pngbin0 -> 1653 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.qml1216
-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.0.pngbin3742 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.1.pngbin3727 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.2.pngbin3742 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.3.pngbin3628 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.4.pngbin3610 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.5.pngbin3742 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation-visual.qml18
-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.0.pngbin2046 -> 2011 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.1.pngbin2059 -> 2047 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.2.pngbin2052 -> 2058 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.3.pngbin2011 -> 2052 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.qml16
-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.0.pngbin0 -> 3224 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.1.pngbin0 -> 3226 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.2.pngbin0 -> 3229 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.3.pngbin0 -> 3224 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.4.pngbin0 -> 3226 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.5.pngbin0 -> 3229 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.6.pngbin0 -> 3229 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.qml26
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.pngbin1418 -> 336 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.pngbin1430 -> 335 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.pngbin1431 -> 344 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.3.pngbin0 -> 336 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml552
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml13
-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.pngbin1149 -> 1131 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.pngbin1173 -> 1135 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.pngbin1173 -> 1141 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.pngbin1149 -> 1147 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.pngbin0 -> 1132 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml870
-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml6
-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.0.pngbin1265 -> 1281 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.1.pngbin0 -> 1265 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.qml6
-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.pngbin637 -> 637 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.pngbin642 -> 637 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.pngbin637 -> 642 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.pngbin637 -> 647 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.pngbin647 -> 637 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.pngbin637 -> 646 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.pngbin637 -> 637 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.pngbin637 -> 637 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.pngbin642 -> 647 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.9.pngbin0 -> 642 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml38
-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.pngbin0 -> 334 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.pngbin0 -> 335 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.2.pngbin0 -> 335 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml298
-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.pngbin1418 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.pngbin1431 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml4
-rw-r--r--tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.pngbin28886 -> 16855 bytes-rw-r--r--tests/auto/declarative/qmlvisual/fillmode/face.pngbin905 -> 1011 bytes-rw-r--r--tests/auto/declarative/qmlvisual/fillmode/fillmode.qml14
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.pngbin14875 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.pngbin14875 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.pngbin14863 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.pngbin14877 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.pngbin14877 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.pngbin14877 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml1599
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.pngbin5375 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.pngbin5375 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml607
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.pngbin12749 -> 1549 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.pngbin12667 -> 1140 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.pngbin12373 -> 1338 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.pngbin12150 -> 1221 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.pngbin11944 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.pngbin12150 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.pngbin12373 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.pngbin12667 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.pngbin12749 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.pngbin12710 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml2554
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.pngbin11501 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.pngbin11501 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.pngbin11486 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.pngbin11500 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.pngbin11500 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.pngbin11500 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml1599
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.pngbin4656 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.pngbin4656 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml607
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.pngbin10093 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.pngbin10051 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.pngbin9812 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.pngbin9625 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.pngbin9458 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.pngbin9645 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.pngbin9812 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.pngbin10051 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.pngbin10087 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.pngbin10072 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml2879
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.0.pngbin14836 -> 1974 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.1.pngbin14836 -> 1968 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.2.pngbin14821 -> 1968 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.3.pngbin14833 -> 1974 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.4.pngbin14833 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.5.pngbin14833 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test.qml1330
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test2.0.pngbin5359 -> 305 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test2.1.pngbin5359 -> 305 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test2.qml442
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.0.pngbin12616 -> 487 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.1.pngbin12538 -> 509 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.2.pngbin12257 -> 491 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.3.pngbin12035 -> 499 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.4.pngbin11877 -> 487 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.5.pngbin12046 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.6.pngbin12257 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.7.pngbin12538 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.8.pngbin12616 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.9.pngbin12581 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/data/test3.qml2562
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/test.qml13
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/test2.qml26
-rw-r--r--tests/auto/declarative/qmlvisual/focusscope/test3.qml34
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated-smooth.qml105
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml97
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml10
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci8
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci8
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.pngbin1655 -> 713 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/qmldir1
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.pngbin61731 -> 4686 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.pngbin98927 -> 25454 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.pngbin48780 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.pngbin32431 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.pngbin35835 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.pngbin79428 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.pngbin45928 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml1660
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.pngbin23684 -> 4686 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.pngbin29115 -> 9642 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.pngbin27580 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.pngbin14822 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.pngbin21356 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.pngbin31143 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.pngbin26468 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.pngbin16225 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml1916
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.pngbin22832 -> 28741 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.pngbin1427 -> 1439 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.pngbin1357 -> 1424 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.pngbin1405 -> 1428 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.pngbin1427 -> 1397 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.pngbin0 -> 1454 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml1150
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.pngbin1951 -> 1073 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.pngbin1951 -> 1063 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.pngbin1952 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.pngbin1930 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.pngbin1974 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.pngbin1961 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.pngbin1959 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.pngbin1937 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.pngbin1618 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.pngbin1952 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.pngbin1952 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.pngbin1930 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.pngbin1976 -> 1080 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.pngbin1930 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.pngbin1947 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.pngbin1941 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.pngbin1951 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png0
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.pngbin1987 -> 1080 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.pngbin1947 -> 1056 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.pngbin1975 -> 1075 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.pngbin1928 -> 1029 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.pngbin1928 -> 1073 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.pngbin1928 -> 1053 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.pngbin1928 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml6406
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml6
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.pngbin1090 -> 942 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.pngbin1134 -> 1111 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.pngbin961 -> 1152 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.pngbin1076 -> 976 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.pngbin1134 -> 1096 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.pngbin969 -> 1154 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.6.pngbin0 -> 984 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml26
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.0.pngbin0 -> 1649 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml2
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.pngbin1303 -> 1318 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.pngbin1317 -> 1318 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.10.pngbin0 -> 1318 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.pngbin1318 -> 1332 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.pngbin1306 -> 1331 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.pngbin1308 -> 1321 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.pngbin1303 -> 1325 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.pngbin1323 -> 1321 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.pngbin1325 -> 1341 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.pngbin1346 -> 1341 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.pngbin1303 -> 1359 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml772
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.pngbin1310 -> 1325 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.pngbin1322 -> 1325 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.pngbin1341 -> 1337 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.pngbin1368 -> 1360 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.pngbin1319 -> 1406 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.pngbin1352 -> 1337 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.pngbin1309 -> 1340 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.pngbin1347 -> 1327 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.pngbin1310 -> 1353 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.pngbin1354 -> 1325 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml670
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml2
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.0.pngbin1578 -> 1578 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.1.pngbin1585 -> 1578 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.2.pngbin1568 -> 1585 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.3.pngbin1578 -> 1568 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.4.pngbin1584 -> 1578 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.5.pngbin1584 -> 1583 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.6.pngbin1581 -> 1581 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.7.pngbin1581 -> 1582 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.8.pngbin1567 -> 1581 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.qml34
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.pngbin1701 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.pngbin1701 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.pngbin1721 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.pngbin1705 -> 1721 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.pngbin1705 -> 1705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.pngbin1701 -> 1705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.14.pngbin0 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.pngbin1704 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.pngbin1704 -> 1704 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.pngbin1705 -> 1704 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.pngbin1705 -> 1705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.pngbin1701 -> 1705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.pngbin1701 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.pngbin1705 -> 1701 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.pngbin1701 -> 1705 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml454
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.0.pngbin0 -> 486 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.1.pngbin0 -> 486 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.10.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.11.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.12.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.13.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.14.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.15.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.2.pngbin0 -> 489 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.3.pngbin0 -> 489 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.4.pngbin0 -> 489 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.5.pngbin0 -> 496 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.6.pngbin0 -> 496 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.7.pngbin0 -> 496 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.8.pngbin0 -> 496 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.9.pngbin0 -> 494 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.qml62
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.pngbin10219 -> 1055 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.pngbin13469 -> 10086 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.pngbin14051 -> 14829 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.3.pngbin0 -> 14095 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml384
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.pngbin2263 -> 1114 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.pngbin2329 -> 1105 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.pngbin2279 -> 1088 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.pngbin2263 -> 1096 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.pngbin2263 -> 1143 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.pngbin2308 -> 1143 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.pngbin2280 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml2056
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.pngbin2412 -> 1169 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.pngbin2443 -> 1182 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.pngbin2398 -> 1211 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.pngbin2390 -> 1184 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.pngbin2416 -> 1152 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.pngbin2395 -> 1141 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.pngbin0 -> 1189 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml1940
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml30
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml19
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.pngbin1429 -> 263 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.pngbin1433 -> 280 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.pngbin1431 -> 270 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.pngbin1428 -> 280 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.pngbin1432 -> 280 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.pngbin1434 -> 283 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.6.pngbin0 -> 281 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml798
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.0.pngbin2790 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.pngbin0 -> 1199 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml268
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml65
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.pngbin1305 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.pngbin1306 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.pngbin1305 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.3.pngbin1303 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.4.pngbin1303 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.5.pngbin1305 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.6.pngbin1306 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.qml1807
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/smoothedfollow.0.pngbin3692 -> 1513 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/smoothedfollow.1.pngbin3697 -> 1537 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/smoothedfollow.2.pngbin3696 -> 1537 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/smoothedfollow.3.pngbin0 -> 1537 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/smoothedfollow.qml394
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedanimation.qml45
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedfollow.qml78
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/clock.qml64
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/background.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png)bin46895 -> 46895 bytes-rwxr-xr-xtests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/center.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png)bin765 -> 765 bytes-rwxr-xr-xtests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/clock.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png)bin20653 -> 20653 bytes-rwxr-xr-xtests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/hour.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png)bin625 -> 625 bytes-rwxr-xr-xtests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/minute.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png)bin625 -> 625 bytes-rwxr-xr-xtests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/second.png (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png)bin303 -> 303 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.0.pngbin0 -> 16333 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.1.pngbin0 -> 16437 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.2.pngbin0 -> 16543 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.qml615
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.pngbin0 -> 941 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.pngbin0 -> 975 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.pngbin0 -> 1235 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.pngbin0 -> 1225 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.pngbin0 -> 1247 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.pngbin0 -> 1243 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.pngbin0 -> 1234 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.7.pngbin0 -> 1242 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml1763
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringanimation/follow.qml (renamed from tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml)0
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml67
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.pngbin17294 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.pngbin17394 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.pngbin17524 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.pngbin17572 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml1135
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.pngbin959 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.pngbin1244 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.pngbin1299 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.pngbin1224 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.pngbin1243 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.pngbin1230 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.pngbin1231 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.pngbin1239 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.pngbin1241 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.pngbin1237 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.pngbin1229 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml1763
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.pngbin0 -> 2388 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml247
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.pngbin0 -> 762 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml247
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.0.pngbin0 -> 1895 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.qml247
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/align/multilineAlign.qml25
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml131
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.0.pngbin0 -> 1313 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml62
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml7
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/QTBUG-14469.qml23
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.0.pngbin0 -> 210 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.qml475
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.0.pngbin0 -> 422 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.qml475
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.0.pngbin0 -> 1640 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.1.pngbin0 -> 625 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-MAC/qtbug_14865.qml447
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.0.pngbin0 -> 303 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.1.pngbin0 -> 303 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data-X11/qtbug_14865.qml447
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data/qtbug_14865.0.pngbin0 -> 1400 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/data/qtbug_14865.qml447
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.pngbin2276 -> 1706 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml130
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.pngbin4818 -> 3564 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.pngbin4089 -> 3271 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.pngbin3128 -> 2549 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.pngbin1963 -> 1574 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml480
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.pngbin736 -> 2883 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml146
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.pngbin1002 -> 483 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.1.pngbin0 -> 483 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml132
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.pngbin0 -> 1189 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.pngbin0 -> 1068 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.2.pngbin0 -> 948 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.3.pngbin0 -> 819 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.4.pngbin0 -> 682 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml991
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.pngbin596 -> 747 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.pngbin0 -> 814 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.pngbin0 -> 809 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.pngbin0 -> 527 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.pngbin0 -> 526 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.5.pngbin0 -> 399 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml1168
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.pngbin1604 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml279
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.pngbin4818 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.pngbin4089 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.pngbin3128 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.pngbin1963 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml991
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/elide.qml9
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/elide2.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/elide/multilength.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/BorderedText.qml9
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.pngbin103018 -> 96247 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml340
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.0.pngbin0 -> 3481 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.0.pngbin0 -> 53503 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext3.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.pngbin136492 -> 118835 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml348
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.pngbin0 -> 13140 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.0.pngbin0 -> 1503 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext3.0.pngbin0 -> 6368 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext3.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.pngbin0 -> 9297 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.0.pngbin0 -> 10626 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.pngbin94120 -> 77181 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml340
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext2.0.pngbin0 -> 2778 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext3.0.pngbin0 -> 53503 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext3.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.pngbin121122 -> 103375 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml348
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext2.0.pngbin0 -> 10671 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext2.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml168
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext2.qml23
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext3.qml62
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml76
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext2.qml43
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetext/qtbug_14865.qml18
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml15
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml21
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.pngbin793 -> 3636 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.pngbin795 -> 3611 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.pngbin803 -> 3612 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.pngbin805 -> 3612 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.pngbin805 -> 3609 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.pngbin805 -> 3147 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.pngbin799 -> 3145 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.pngbin799 -> 3146 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.pngbin803 -> 3144 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.9.pngbin0 -> 3135 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml3050
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.pngbin365 -> 3273 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.pngbin365 -> 3265 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.pngbin366 -> 3266 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.pngbin362 -> 3245 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml530
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.0.pngbin0 -> 5123 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.1.pngbin0 -> 5500 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.10.pngbin0 -> 8641 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.11.pngbin0 -> 8641 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.2.pngbin0 -> 6163 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.3.pngbin0 -> 6785 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.4.pngbin0 -> 6943 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.5.pngbin0 -> 7043 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.6.pngbin0 -> 7428 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.7.pngbin0 -> 6860 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.8.pngbin0 -> 8659 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.9.pngbin0 -> 8641 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.qml4687
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.0.pngbin0 -> 11626 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.1.pngbin0 -> 11869 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.2.pngbin0 -> 12264 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.3.pngbin0 -> 12607 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.4.pngbin0 -> 13243 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.5.pngbin0 -> 13260 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.6.pngbin0 -> 13260 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.qml2467
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.0.pngbin0 -> 1173 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.1.pngbin0 -> 1249 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.2.pngbin0 -> 1331 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.3.pngbin0 -> 1212 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.4.pngbin0 -> 1208 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.5.pngbin0 -> 1213 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.6.pngbin0 -> 3145 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.7.pngbin0 -> 3146 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.8.pngbin0 -> 3144 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.9.pngbin0 -> 3135 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.qml1499
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.pngbin0 -> 688 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.pngbin0 -> 693 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.pngbin0 -> 695 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.pngbin0 -> 694 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.4.pngbin0 -> 688 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml1371
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.0.pngbin0 -> 1357 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.1.pngbin0 -> 1371 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.10.pngbin0 -> 2032 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.11.pngbin0 -> 2032 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.12.pngbin0 -> 2032 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.2.pngbin0 -> 1451 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.3.pngbin0 -> 1565 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.4.pngbin0 -> 1691 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.5.pngbin0 -> 1763 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.6.pngbin0 -> 1779 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.7.pngbin0 -> 1843 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.8.pngbin0 -> 1825 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.9.pngbin0 -> 2024 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.qml4687
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.pngbin1110 -> 3493 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.pngbin1110 -> 3617 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.pngbin1110 -> 3688 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.pngbin1110 -> 3766 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.pngbin1110 -> 3839 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.pngbin1110 -> 3940 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.pngbin1110 -> 3943 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.7.pngbin0 -> 3943 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml858
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.pngbin3322 -> 3171 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.pngbin3323 -> 3603 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.pngbin3325 -> 3152 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.pngbin3332 -> 3147 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.pngbin3329 -> 3145 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.pngbin3818 -> 3147 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.pngbin3333 -> 3145 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.pngbin3332 -> 3146 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.pngbin3347 -> 3144 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.9.pngbin0 -> 3135 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml3050
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.0.pngbin0 -> 4006 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.1.pngbin0 -> 4293 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.10.pngbin0 -> 6074 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.11.pngbin0 -> 6074 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.2.pngbin0 -> 4683 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.3.pngbin0 -> 5114 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.4.pngbin0 -> 5270 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.5.pngbin0 -> 5401 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.6.pngbin0 -> 5591 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.7.pngbin0 -> 5261 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.8.pngbin0 -> 6072 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.9.pngbin0 -> 6074 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.qml4687
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml8
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/usingMultilineEdit.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextedit/wrap.qml9
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/LineEdit.qml12
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml10
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.pngbin793 -> 3613 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.pngbin796 -> 4140 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.pngbin804 -> 3593 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.pngbin805 -> 3605 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.pngbin805 -> 3605 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml2966
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.0.pngbin0 -> 703 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.pngbin0 -> 1360 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.pngbin0 -> 2031 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml1043
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/hAlign.qml107
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.0.pngbin0 -> 1173 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.1.pngbin0 -> 1143 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.2.pngbin0 -> 1312 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.3.pngbin0 -> 1250 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.4.pngbin0 -> 1193 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.5.pngbin0 -> 1193 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.qml1551
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.pngbin716 -> 256 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.pngbin1352 -> 339 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.pngbin2047 -> 446 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.pngbin2827 -> 510 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.pngbin2827 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml382
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.pngbin1245 -> 3661 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml50
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.0.pngbin3137 -> 1265 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.1.pngbin3195 -> 1337 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.10.pngbin3853 -> 1389 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.11.pngbin0 -> 1468 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.2.pngbin3171 -> 1337 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.3.pngbin3228 -> 1279 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.4.pngbin3198 -> 1368 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.5.pngbin3310 -> 1367 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.6.pngbin3233 -> 1377 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.7.pngbin3607 -> 1368 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.8.pngbin3657 -> 1384 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.9.pngbin3262 -> 1471 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.qml1408
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.pngbin3314 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.pngbin3377 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.pngbin3323 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.pngbin3325 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.pngbin3322 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.pngbin3322 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.pngbin3326 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.pngbin3814 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.pngbin3324 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml2966
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.pngbin999 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.pngbin1880 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.pngbin2962 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.pngbin2827 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.pngbin2827 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.pngbin1245 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/echoMode.qml9
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml28
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativetextinput/usingLineEdit.qml6
-rw-r--r--tests/auto/declarative/qmlvisual/qmlvisual.pro2
-rw-r--r--tests/auto/declarative/qmlvisual/rect/GradientRect.qml4
-rw-r--r--tests/auto/declarative/qmlvisual/rect/MyRect.qml4
-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/GradientRect.0.pngbin0 -> 248 bytes-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/GradientRect.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/MyRect.0.pngbin0 -> 135 bytes-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/MyRect.qml11
-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.pngbin29725 -> 15272 bytes-rw-r--r--tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml276
-rw-r--r--tests/auto/declarative/qmlvisual/rect/rect-painting.qml4
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/basic1.qml24
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/basic2.qml24
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/basic3.qml28
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/basic4.qml28
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.pngbin1550 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml323
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.pngbin1550 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml331
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.pngbin1550 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml347
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.pngbin1550 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml419
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.pngbin1354 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml323
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.pngbin1354 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml331
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.pngbin1354 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml347
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.pngbin1354 -> 0 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml419
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic1.0.pngbin1513 -> 707 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic1.qml312
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic2.0.pngbin1513 -> 707 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic2.qml320
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic3.0.pngbin1513 -> 707 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic3.qml336
-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic4.0.pngbin1513 -> 707 bytes-rw-r--r--tests/auto/declarative/qmlvisual/repeater/data/basic4.qml408
-rw-r--r--tests/auto/declarative/qmlvisual/shared/DejaVuSansMono.ttfbin0 -> 237788 bytes-rw-r--r--tests/auto/declarative/qmlvisual/shared/README7
-rw-r--r--tests/auto/declarative/qmlvisual/shared/TestText.qml8
-rw-r--r--tests/auto/declarative/qmlvisual/shared/TestTextEdit.qml14
-rw-r--r--tests/auto/declarative/qmlvisual/shared/TestTextInput.qml14
-rw-r--r--tests/auto/declarative/qmlvisual/shared/qmldir3
-rw-r--r--tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp56
-rw-r--r--tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/autosize/data-X11/autosize.qml115
-rw-r--r--tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml13
-rw-r--r--tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml3
-rw-r--r--tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml3
-rw-r--r--tests/auto/exceptionsafety/exceptionsafety.pro1
-rw-r--r--tests/auto/gestures/tst_gestures.cpp4
-rw-r--r--tests/auto/guiapplauncher/guiapplauncher.pro1
-rw-r--r--tests/auto/lancelot/.gitignore1
-rw-r--r--tests/auto/lancelot/lancelot.pro15
-rw-r--r--tests/auto/lancelot/scripts/aliasing.qps156
-rw-r--r--tests/auto/lancelot/scripts/arcs.qps68
-rw-r--r--tests/auto/lancelot/scripts/arcs2.qps47
-rw-r--r--tests/auto/lancelot/scripts/background.qps136
-rw-r--r--tests/auto/lancelot/scripts/background_brush.qps5
-rw-r--r--tests/auto/lancelot/scripts/beziers.qps147
-rw-r--r--tests/auto/lancelot/scripts/bitmaps.qps166
-rw-r--r--tests/auto/lancelot/scripts/borderimage.qps120
-rw-r--r--tests/auto/lancelot/scripts/brush_pens.qps104
-rw-r--r--tests/auto/lancelot/scripts/brushes.qps79
-rw-r--r--tests/auto/lancelot/scripts/clippaths.qps60
-rw-r--r--tests/auto/lancelot/scripts/clipping.qps182
-rw-r--r--tests/auto/lancelot/scripts/clipping_state.qps47
-rw-r--r--tests/auto/lancelot/scripts/cliprects.qps59
-rw-r--r--tests/auto/lancelot/scripts/conical_gradients.qps85
-rw-r--r--tests/auto/lancelot/scripts/conical_gradients_perspectives.qps64
-rw-r--r--tests/auto/lancelot/scripts/dashes.qps268
-rw-r--r--tests/auto/lancelot/scripts/degeneratebeziers.qps10
-rw-r--r--tests/auto/lancelot/scripts/deviceclipping.qps48
-rw-r--r--tests/auto/lancelot/scripts/drawpoints.qps101
-rw-r--r--tests/auto/lancelot/scripts/ellipses.qps86
-rw-r--r--tests/auto/lancelot/scripts/filltest.qps413
-rw-r--r--tests/auto/lancelot/scripts/gradients.qps44
-rw-r--r--tests/auto/lancelot/scripts/image_formats.qps81
-rw-r--r--tests/auto/lancelot/scripts/images.qps106
-rw-r--r--tests/auto/lancelot/scripts/images2.qps145
-rw-r--r--tests/auto/lancelot/scripts/join_cap_styles.qps63
-rw-r--r--tests/auto/lancelot/scripts/join_cap_styles_duplicate_control_points.qps68
-rw-r--r--tests/auto/lancelot/scripts/linear_gradients.qps144
-rw-r--r--tests/auto/lancelot/scripts/linear_gradients_perspectives.qps62
-rw-r--r--tests/auto/lancelot/scripts/linear_resolving_gradients.qps66
-rw-r--r--tests/auto/lancelot/scripts/lineconsistency.qps72
-rw-r--r--tests/auto/lancelot/scripts/linedashes.qps94
-rw-r--r--tests/auto/lancelot/scripts/linedashes2.qps154
-rw-r--r--tests/auto/lancelot/scripts/linedashes2_aa.qps5
-rw-r--r--tests/auto/lancelot/scripts/lines.qps558
-rw-r--r--tests/auto/lancelot/scripts/lines2.qps179
-rw-r--r--tests/auto/lancelot/scripts/pathfill.qps38
-rw-r--r--tests/auto/lancelot/scripts/paths.qps34
-rw-r--r--tests/auto/lancelot/scripts/paths_aa.qps4
-rw-r--r--tests/auto/lancelot/scripts/pens.qps133
-rw-r--r--tests/auto/lancelot/scripts/pens_aa.qps6
-rw-r--r--tests/auto/lancelot/scripts/pens_cosmetic.qps110
-rw-r--r--tests/auto/lancelot/scripts/perspectives.qps72
-rw-r--r--tests/auto/lancelot/scripts/perspectives2.qps309
-rw-r--r--tests/auto/lancelot/scripts/pixmap_rotation.qps30
-rw-r--r--tests/auto/lancelot/scripts/pixmap_scaling.qps224
-rw-r--r--tests/auto/lancelot/scripts/pixmap_subpixel.qps117
-rw-r--r--tests/auto/lancelot/scripts/pixmaps.qps106
-rw-r--r--tests/auto/lancelot/scripts/porter_duff.qps251
-rw-r--r--tests/auto/lancelot/scripts/porter_duff2.qps261
-rw-r--r--tests/auto/lancelot/scripts/primitives.qps184
-rw-r--r--tests/auto/lancelot/scripts/radial_gradients.qps99
-rw-r--r--tests/auto/lancelot/scripts/radial_gradients_perspectives.qps62
-rw-r--r--tests/auto/lancelot/scripts/rasterops.qps87
-rw-r--r--tests/auto/lancelot/scripts/sizes.qps150
-rw-r--r--tests/auto/lancelot/scripts/text.qps124
-rw-r--r--tests/auto/lancelot/scripts/text_perspectives.qps102
-rw-r--r--tests/auto/lancelot/scripts/tiled_pixmap.qps84
-rw-r--r--tests/auto/lancelot/tst_lancelot.cpp301
-rwxr-xr-xtests/auto/mediaobject/mediaobject.pro2
-rw-r--r--tests/auto/mediaobject/tst_mediaobject.cpp2
-rw-r--r--tests/auto/moc/moc.pro2
-rw-r--r--tests/auto/modeltest/dynamictreemodel.cpp7
-rw-r--r--tests/auto/networkselftest/networkselftest.pro4
-rw-r--r--tests/auto/other.pro1
-rw-r--r--tests/auto/patternistexamples/patternistexamples.pro12
-rw-r--r--tests/auto/platformquirks.h122
-rw-r--r--tests/auto/q_func_info/q_func_info.pro1
-rw-r--r--tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp6
-rw-r--r--tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro2
-rw-r--r--tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp5
-rw-r--r--tests/auto/qabstractslider/tst_qabstractslider.cpp17
-rw-r--r--tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro2
-rw-r--r--tests/auto/qaccessibility/qaccessibility.pro2
-rw-r--r--tests/auto/qaccessibility/tst_qaccessibility.cpp8
-rw-r--r--tests/auto/qaction/tst_qaction.cpp2
-rw-r--r--tests/auto/qalgorithms/tst_qalgorithms.cpp23
-rw-r--r--tests/auto/qanimationgroup/qanimationgroup.pro1
-rw-r--r--tests/auto/qapplication/test/test.pro10
-rw-r--r--tests/auto/qatomicint/qatomicint.pro1
-rw-r--r--tests/auto/qatomicpointer/qatomicpointer.pro1
-rw-r--r--tests/auto/qaudioinput/qaudioinput.pro2
-rw-r--r--tests/auto/qaudiooutput/qaudiooutput.pro2
-rw-r--r--tests/auto/qbitarray/qbitarray.pro1
-rw-r--r--tests/auto/qbitarray/tst_qbitarray.cpp9
-rw-r--r--tests/auto/qboxlayout/tst_qboxlayout.cpp5
-rw-r--r--tests/auto/qbrush/tst_qbrush.cpp9
-rw-r--r--tests/auto/qbuffer/qbuffer.pro1
-rw-r--r--tests/auto/qbuttongroup/tst_qbuttongroup.cpp9
-rw-r--r--tests/auto/qbytearray/qbytearray.pro3
-rw-r--r--tests/auto/qbytearray/tst_qbytearray.cpp9
-rw-r--r--tests/auto/qbytearraymatcher/qbytearraymatcher.pro1
-rw-r--r--tests/auto/qcache/qcache.pro1
-rw-r--r--tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp5
-rw-r--r--tests/auto/qchar/qchar.pro3
-rw-r--r--tests/auto/qclipboard/test/test.pro14
-rw-r--r--tests/auto/qclipboard/tst_qclipboard.cpp82
-rw-r--r--tests/auto/qcolumnview/tst_qcolumnview.cpp21
-rw-r--r--tests/auto/qcombobox/tst_qcombobox.cpp14
-rw-r--r--tests/auto/qcompleter/tst_qcompleter.cpp159
-rw-r--r--tests/auto/qcomplextext/tst_qcomplextext.cpp39
-rw-r--r--tests/auto/qcontiguouscache/qcontiguouscache.pro1
-rw-r--r--tests/auto/qcontiguouscache/tst_qcontiguouscache.cpp13
-rw-r--r--tests/auto/qcoreapplication/qcoreapplication.pro1
-rw-r--r--tests/auto/qcryptographichash/qcryptographichash.pro1
-rw-r--r--tests/auto/qcssparser/qcssparser.pro4
-rw-r--r--tests/auto/qdatastream/qdatastream.pro4
-rw-r--r--tests/auto/qdate/qdate.pro1
-rw-r--r--tests/auto/qdatetime/qdatetime.pro1
-rw-r--r--tests/auto/qdebug/qdebug.pro1
-rw-r--r--tests/auto/qdesktopservices/qdesktopservices.pro12
-rw-r--r--tests/auto/qdir/qdir.pro2
-rw-r--r--tests/auto/qdiriterator/qdiriterator.pro1
-rw-r--r--tests/auto/qdirmodel/qdirmodel.pro6
-rw-r--r--tests/auto/qdom/qdom.pro2
-rw-r--r--tests/auto/qdoublevalidator/tst_qdoublevalidator.cpp12
-rw-r--r--tests/auto/qeasingcurve/qeasingcurve.pro1
-rw-r--r--tests/auto/qelapsedtimer/qelapsedtimer.pro1
-rw-r--r--tests/auto/qevent/qevent.pro1
-rw-r--r--tests/auto/qeventloop/tst_qeventloop.cpp2
-rw-r--r--tests/auto/qexplicitlyshareddatapointer/qexplicitlyshareddatapointer.pro1
-rw-r--r--tests/auto/qfile/test/test.pro4
-rw-r--r--tests/auto/qfiledialog/qfiledialog.pro4
-rw-r--r--tests/auto/qfiledialog2/qfiledialog2.pro4
-rw-r--r--tests/auto/qfileinfo/qfileinfo.pro4
-rw-r--r--tests/auto/qfileinfo/tst_qfileinfo.cpp8
-rw-r--r--tests/auto/qfilesystemmodel/qfilesystemmodel.pro2
-rw-r--r--tests/auto/qflags/qflags.pro1
-rw-r--r--tests/auto/qfontdatabase/qfontdatabase.pro2
-rw-r--r--tests/auto/qftp/qftp.pro4
-rw-r--r--tests/auto/qfuture/qfuture.pro1
-rw-r--r--tests/auto/qfuturewatcher/qfuturewatcher.pro1
-rw-r--r--tests/auto/qgetputenv/qgetputenv.pro1
-rw-r--r--tests/auto/qgl/tst_qgl.cpp122
-rw-r--r--tests/auto/qglobal/qglobal.pro1
-rw-r--r--tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp6
-rw-r--r--tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp250
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp100
-rw-r--r--tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp65
-rw-r--r--tests/auto/qgraphicsscene/qgraphicsscene.pro4
-rw-r--r--tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp12
-rw-r--r--tests/auto/qgraphicsview/tst_qgraphicsview.cpp203
-rw-r--r--tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp15
-rw-r--r--tests/auto/qgridlayout/tst_qgridlayout.cpp17
-rw-r--r--tests/auto/qhash/qhash.pro1
-rw-r--r--tests/auto/qhash/tst_qhash.cpp11
-rw-r--r--tests/auto/qheaderview/tst_qheaderview.cpp29
-rw-r--r--tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro4
-rw-r--r--tests/auto/qhelpenginecore/qhelpenginecore.pro4
-rw-r--r--tests/auto/qhttp/qhttp.pro12
-rw-r--r--tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp54
-rw-r--r--tests/auto/qicoimageformat/qicoimageformat.pro10
-rw-r--r--tests/auto/qicon/qicon.pro12
-rw-r--r--tests/auto/qicon/tst_qicon.cpp16
-rw-r--r--tests/auto/qimage/qimage.pro6
-rw-r--r--tests/auto/qimage/tst_qimage.cpp15
-rw-r--r--tests/auto/qimagereader/qimagereader.pro8
-rw-r--r--tests/auto/qimagereader/tst_qimagereader.cpp98
-rw-r--r--tests/auto/qimagewriter/qimagewriter.pro6
-rw-r--r--tests/auto/qinputcontext/tst_qinputcontext.cpp4
-rw-r--r--tests/auto/qinputdialog/tst_qinputdialog.cpp28
-rw-r--r--tests/auto/qiodevice/qiodevice.pro4
-rw-r--r--tests/auto/qitemmodel/qitemmodel.pro4
-rw-r--r--tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp66
-rw-r--r--tests/auto/qkeysequence/tst_qkeysequence.cpp10
-rw-r--r--tests/auto/qlabel/qlabel.pro2
-rw-r--r--tests/auto/qlayout/qlayout.pro2
-rw-r--r--tests/auto/qlayout/tst_qlayout.cpp5
-rw-r--r--tests/auto/qlibrary/qlibrary.pro1
-rw-r--r--tests/auto/qlibrary/tst/tst.pro6
-rw-r--r--tests/auto/qline/qline.pro1
-rw-r--r--tests/auto/qlist/tst_qlist.cpp7
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp35
-rw-r--r--tests/auto/qlistwidget/tst_qlistwidget.cpp53
-rw-r--r--tests/auto/qlocale/test/test.pro2
-rw-r--r--tests/auto/qlocalsocket/test/test.pro6
-rw-r--r--tests/auto/qmainwindow/tst_qmainwindow.cpp10
-rw-r--r--tests/auto/qmap/qmap.pro1
-rw-r--r--tests/auto/qmap/tst_qmap.cpp12
-rw-r--r--tests/auto/qmargins/qmargins.pro1
-rw-r--r--tests/auto/qmath/qmath.pro1
-rw-r--r--tests/auto/qmdiarea/tst_qmdiarea.cpp19
-rw-r--r--tests/auto/qmenu/tst_qmenu.cpp13
-rw-r--r--tests/auto/qmenubar/tst_qmenubar.cpp4
-rw-r--r--tests/auto/qmetatype/qmetatype.pro1
-rw-r--r--tests/auto/qmouseevent_modal/tst_qmouseevent_modal.cpp4
-rw-r--r--tests/auto/qmovie/qmovie.pro6
-rw-r--r--tests/auto/qmutex/qmutex.pro1
-rw-r--r--tests/auto/qmutexlocker/qmutexlocker.pro1
-rw-r--r--tests/auto/qnetworkreply/test/test.pro6
-rw-r--r--tests/auto/qnetworkreply/tst_qnetworkreply.cpp623
-rw-r--r--tests/auto/qnumeric/qnumeric.pro1
-rw-r--r--tests/auto/qobject/qobject.pro1
-rw-r--r--tests/auto/qobject/tst_qobject.cpp78
-rw-r--r--tests/auto/qobject/tst_qobject.pro4
-rw-r--r--tests/auto/qobjectrace/qobjectrace.pro1
-rw-r--r--tests/auto/qpainter/qpainter.pro2
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp84
-rw-r--r--tests/auto/qpainterpath/tst_qpainterpath.cpp13
-rw-r--r--tests/auto/qpathclipper/tst_qpathclipper.cpp3
-rw-r--r--tests/auto/qpauseanimation/tst_qpauseanimation.cpp5
-rw-r--r--tests/auto/qpen/tst_qpen.cpp9
-rw-r--r--tests/auto/qpicture/tst_qpicture.cpp13
-rw-r--r--tests/auto/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gifbin0 -> 4075 bytes-rw-r--r--tests/auto/qpixmap/qpixmap.pro8
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp94
-rw-r--r--tests/auto/qpixmapfilter/qpixmapfilter.pro2
-rw-r--r--tests/auto/qplaintextedit/tst_qplaintextedit.cpp1
-rw-r--r--tests/auto/qplugin/qplugin.pro1
-rw-r--r--tests/auto/qplugin/tst_qplugin.pro4
-rw-r--r--tests/auto/qpluginloader/qpluginloader.pro1
-rw-r--r--tests/auto/qpluginloader/tst/tst.pro6
-rw-r--r--tests/auto/qpoint/qpoint.pro1
-rw-r--r--tests/auto/qpolygon/tst_qpolygon.cpp10
-rw-r--r--tests/auto/qprinter/tst_qprinter.cpp12
-rw-r--r--tests/auto/qprocess/test/test.pro40
-rw-r--r--tests/auto/qprocessenvironment/qprocessenvironment.pro1
-rw-r--r--tests/auto/qqueue/qqueue.pro1
-rw-r--r--tests/auto/qrand/qrand.pro1
-rw-r--r--tests/auto/qreadlocker/qreadlocker.pro1
-rw-r--r--tests/auto/qreadwritelock/qreadwritelock.pro1
-rw-r--r--tests/auto/qrect/qrect.pro1
-rw-r--r--tests/auto/qregexp/qregexp.pro1
-rw-r--r--tests/auto/qregexp/tst_qregexp.cpp9
-rw-r--r--tests/auto/qregion/tst_qregion.cpp10
-rw-r--r--tests/auto/qresourceengine/qresourceengine.pro19
-rw-r--r--tests/auto/qringbuffer/qringbuffer.pro1
-rw-r--r--tests/auto/qscopedpointer/qscopedpointer.pro1
-rw-r--r--tests/auto/qscriptable/tst_qscriptable.cpp4
-rw-r--r--tests/auto/qscriptclass/tst_qscriptclass.cpp61
-rw-r--r--tests/auto/qscriptcontext/tst_qscriptcontext.cpp207
-rw-r--r--tests/auto/qscriptengine/idtranslatable-unicode.js5
-rw-r--r--tests/auto/qscriptengine/qscriptengine.pro2
-rw-r--r--tests/auto/qscriptengine/qscriptengine.qrc2
-rw-r--r--tests/auto/qscriptengine/translatable-unicode.js9
-rw-r--r--tests/auto/qscriptengine/translations/idtranslatable-unicode.qmbin0 -> 209 bytes-rw-r--r--tests/auto/qscriptengine/translations/idtranslatable-unicode.ts26
-rw-r--r--tests/auto/qscriptengine/translations/translatable-unicode.qmbin0 -> 322 bytes-rw-r--r--tests/auto/qscriptengine/translations/translatable-unicode.ts37
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp384
-rw-r--r--tests/auto/qscriptenginedebugger/tst_qscriptenginedebugger.cpp94
-rw-r--r--tests/auto/qscriptextensionplugin/qscriptextensionplugin.pro3
-rw-r--r--tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.cpp79
-rw-r--r--tests/auto/qscriptextensionplugin/simpleplugin/simpleplugin.pro10
-rw-r--r--tests/auto/qscriptextensionplugin/staticplugin/__init__.js6
-rw-r--r--tests/auto/qscriptextensionplugin/staticplugin/staticplugin.cpp75
-rw-r--r--tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro7
-rw-r--r--tests/auto/qscriptextensionplugin/staticplugin/staticplugin.qrc6
-rw-r--r--tests/auto/qscriptextensionplugin/test/test.pro18
-rw-r--r--tests/auto/qscriptextensionplugin/tst_qscriptextensionplugin.cpp167
-rw-r--r--tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp157
-rw-r--r--tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro2
-rw-r--r--tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro2
-rw-r--r--tests/auto/qscriptvalue/qscriptvalue.pro8
-rw-r--r--tests/auto/qscriptvalue/testgen/data.txt161
-rw-r--r--tests/auto/qscriptvalue/testgen/testgenerator.cpp794
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue.cpp1593
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue.h404
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue_generated_cast.cpp1453
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp7026
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue_generated_init.cpp198
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue_generated_isXXX.cpp830
-rw-r--r--tests/auto/qscriptvalue/tst_qscriptvalue_generated_toXXX.cpp1897
-rw-r--r--tests/auto/qscriptvaluegenerated/.gitignore1
-rw-r--r--tests/auto/qscriptvaluegenerated/qscriptvaluegenerated.pro18
-rw-r--r--tests/auto/qscriptvaluegenerated/testgen/data.txt167
-rwxr-xr-xtests/auto/qscriptvaluegenerated/testgen/gen.py (renamed from tests/auto/qscriptvalue/testgen/gen.py)0
-rw-r--r--tests/auto/qscriptvaluegenerated/testgen/main.cpp (renamed from tests/auto/qscriptvalue/testgen/main.cpp)0
-rw-r--r--tests/auto/qscriptvaluegenerated/testgen/testgen.pro (renamed from tests/auto/qscriptvalue/testgen/testgen.pro)0
-rw-r--r--tests/auto/qscriptvaluegenerated/testgen/testgenerator.cpp795
-rw-r--r--tests/auto/qscriptvaluegenerated/testgen/testgenerator.h (renamed from tests/auto/qscriptvalue/testgen/testgenerator.h)0
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue.cpp116
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue.h370
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue_generated_cast.cpp1504
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue_generated_comparison.cpp7542
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue_generated_init.cpp204
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue_generated_isXXX.cpp862
-rw-r--r--tests/auto/qscriptvaluegenerated/tst_qscriptvalue_generated_toXXX.cpp1963
-rw-r--r--tests/auto/qscriptvalueiterator/tst_qscriptvalueiterator.cpp21
-rw-r--r--tests/auto/qsemaphore/qsemaphore.pro1
-rw-r--r--tests/auto/qsequentialanimationgroup/qsequentialanimationgroup.pro1
-rw-r--r--tests/auto/qset/qset.pro1
-rw-r--r--tests/auto/qset/tst_qset.cpp11
-rw-r--r--tests/auto/qsharedpointer/qsharedpointer.pro1
-rw-r--r--tests/auto/qsignalspy/qsignalspy.pro1
-rw-r--r--tests/auto/qsize/qsize.pro1
-rw-r--r--tests/auto/qsizef/qsizef.pro1
-rw-r--r--tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp138
-rw-r--r--tests/auto/qsound/qsound.pro2
-rw-r--r--tests/auto/qsound/tst_qsound.cpp7
-rw-r--r--tests/auto/qsplitter/qsplitter.pro2
-rw-r--r--tests/auto/qsplitter/tst_qsplitter.cpp12
-rw-r--r--tests/auto/qsql/qsql.pro2
-rw-r--r--tests/auto/qsqldatabase/qsqldatabase.pro4
-rw-r--r--tests/auto/qsqldatabase/tst_databases.h2
-rw-r--r--tests/auto/qsqldriver/qsqldriver.pro4
-rw-r--r--tests/auto/qsqlerror/qsqlerror.pro2
-rw-r--r--tests/auto/qsqlfield/qsqlfield.pro2
-rw-r--r--tests/auto/qsqlquery/qsqlquery.pro4
-rw-r--r--tests/auto/qsqlquery/tst_qsqlquery.cpp131
-rw-r--r--tests/auto/qsqlquerymodel/qsqlquerymodel.pro2
-rw-r--r--tests/auto/qsqlrecord/qsqlrecord.pro2
-rw-r--r--tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro4
-rw-r--r--tests/auto/qsqltablemodel/qsqltablemodel.pro4
-rw-r--r--tests/auto/qsqlthread/qsqlthread.pro4
-rw-r--r--tests/auto/qsslcertificate/qsslcertificate.pro5
-rw-r--r--tests/auto/qsslkey/qsslkey.pro4
-rw-r--r--tests/auto/qsslsocket/qsslsocket.pro4
-rw-r--r--tests/auto/qstate/qstate.pro1
-rw-r--r--tests/auto/qstl/qstl.pro1
-rw-r--r--tests/auto/qstring/qstring.pro1
-rw-r--r--tests/auto/qstring/tst_qstring.cpp51
-rw-r--r--tests/auto/qstringbuilder1/qstringbuilder1.pro1
-rw-r--r--tests/auto/qstringbuilder2/qstringbuilder2.pro1
-rw-r--r--tests/auto/qstringbuilder3/qstringbuilder3.pro1
-rw-r--r--tests/auto/qstringbuilder4/qstringbuilder4.pro1
-rw-r--r--tests/auto/qstringlist/qstringlist.pro1
-rw-r--r--tests/auto/qstringmatcher/qstringmatcher.pro1
-rw-r--r--tests/auto/qstringref/qstringref.pro1
-rw-r--r--tests/auto/qstyle/qstyle.pro2
-rw-r--r--tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp40
-rw-r--r--tests/auto/qsvggenerator/qsvggenerator.pro2
-rw-r--r--tests/auto/qsvgrenderer/qsvgrenderer.pro2
-rw-r--r--tests/auto/qtableview/tst_qtableview.cpp24
-rw-r--r--tests/auto/qtconcurrentfilter/qtconcurrentfilter.pro2
-rw-r--r--tests/auto/qtconcurrentiteratekernel/qtconcurrentiteratekernel.pro2
-rw-r--r--tests/auto/qtconcurrentmap/qtconcurrentmap.pro2
-rw-r--r--tests/auto/qtconcurrentrun/qtconcurrentrun.pro2
-rw-r--r--tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp38
-rw-r--r--tests/auto/qtconcurrentthreadengine/qtconcurrentthreadengine.pro2
-rw-r--r--tests/auto/qtcpserver/test/test.pro4
-rw-r--r--tests/auto/qtemporaryfile/qtemporaryfile.pro2
-rw-r--r--tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro3
-rw-r--r--tests/auto/qtextbrowser/qtextbrowser.pro4
-rw-r--r--tests/auto/qtextcodec/test/test.pro2
-rw-r--r--tests/auto/qtextdocument/tst_qtextdocument.cpp1
-rw-r--r--tests/auto/qtextedit/qtextedit.pro2
-rw-r--r--tests/auto/qtextedit/tst_qtextedit.cpp11
-rw-r--r--tests/auto/qtextstream/test/test.pro6
-rw-r--r--tests/auto/qthread/qthread.pro1
-rw-r--r--tests/auto/qthread/tst_qthread.cpp14
-rw-r--r--tests/auto/qthreadonce/qthreadonce.pro1
-rw-r--r--tests/auto/qthreadpool/qthreadpool.pro1
-rw-r--r--tests/auto/qthreadstorage/qthreadstorage.pro1
-rw-r--r--tests/auto/qtime/qtime.pro1
-rw-r--r--tests/auto/qtimeline/qtimeline.pro1
-rw-r--r--tests/auto/qtimer/qtimer.pro1
-rw-r--r--tests/auto/qtipc/qsharedmemory/test/test.pro6
-rw-r--r--tests/auto/qtipc/qsharedmemory/tst_qsharedmemory.cpp33
-rw-r--r--tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro4
-rw-r--r--tests/auto/qtmd5/qtmd5.pro1
-rw-r--r--tests/auto/qtokenautomaton/qtokenautomaton.pro1
-rw-r--r--tests/auto/qtranslator/qtranslator.pro2
-rw-r--r--tests/auto/qtreeview/tst_qtreeview.cpp23
-rw-r--r--tests/auto/qtreewidget/tst_qtreewidget.cpp6
-rw-r--r--tests/auto/qudpsocket/test/test.pro2
-rw-r--r--tests/auto/qurl/qurl.pro1
-rw-r--r--tests/auto/qurl/tst_qurl.cpp9
-rw-r--r--tests/auto/quuid/quuid.pro1
-rw-r--r--tests/auto/quuid/test/test.pro4
-rw-r--r--tests/auto/qvariant/tst_qvariant.cpp11
-rw-r--r--tests/auto/qvarlengtharray/qvarlengtharray.pro1
-rw-r--r--tests/auto/qvector/qvector.pro1
-rw-r--r--tests/auto/qvector/tst_qvector.cpp12
-rw-r--r--tests/auto/qwaitcondition/qwaitcondition.pro1
-rw-r--r--tests/auto/qwaitcondition/tst_qwaitcondition.cpp2
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp62
-rw-r--r--tests/auto/qwineventnotifier/qwineventnotifier.pro1
-rw-r--r--tests/auto/qwritelocker/qwritelocker.pro1
-rw-r--r--tests/auto/qxml/qxml.pro2
-rw-r--r--tests/auto/qxmlformatter/qxmlformatter.pro2
-rw-r--r--tests/auto/qxmlquery/qxmlquery.pro4
-rw-r--r--tests/auto/qxmlquery/tst_qxmlquery.cpp29
-rw-r--r--tests/auto/qxmlsimplereader/qxmlsimplereader.pro2
-rw-r--r--tests/auto/qxmlstream/qxmlstream.pro2
-rw-r--r--tests/auto/qzip/qzip.pro2
-rw-r--r--tests/auto/script.pro2
-rw-r--r--tests/auto/selftests/selftests.pro1
-rw-r--r--tests/auto/symbols/tst_symbols.cpp2
-rw-r--r--tests/auto/uic/baseline/gridalignment.ui49
-rw-r--r--tests/auto/uic/baseline/gridalignment.ui.h83
-rw-r--r--tests/auto/uiloader/uiloader/uiloader.pro4
-rw-r--r--tests/auto/utf8/utf8.pro1
-rw-r--r--tests/auto/windowsmobile/test/test.pro2
-rw-r--r--tests/auto/xmlpatterns.pri4
-rw-r--r--tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro2
-rw-r--r--tests/auto/xmlpatternsview/xmlpatternsview.pro2
-rw-r--r--tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro2
-rw-r--r--tests/benchmarks/benchmarks.pro3
-rw-r--r--tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro2
-rw-r--r--tests/benchmarks/corelib/corelib.pro10
-rwxr-xr-xtests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro2
-rw-r--r--tests/benchmarks/corelib/tools/qstring/data.cpp19
-rw-r--r--tests/benchmarks/corelib/tools/qstring/data.h7
-rw-r--r--tests/benchmarks/corelib/tools/qstring/generatelist.pl8
-rw-r--r--tests/benchmarks/corelib/tools/qstring/main.cpp2
-rw-r--r--tests/benchmarks/corelib/tools/qstring/qstring.pro2
-rw-r--r--tests/benchmarks/declarative/binding/binding.pro2
-rw-r--r--tests/benchmarks/declarative/compilation/compilation.pro2
-rw-r--r--tests/benchmarks/declarative/creation/creation.pro2
-rw-r--r--tests/benchmarks/declarative/creation/tst_creation.cpp4
-rw-r--r--tests/benchmarks/declarative/declarative.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro2
-rw-r--r--tests/benchmarks/declarative/qmltime/qmltime.cpp65
-rw-r--r--tests/benchmarks/declarative/qmltime/qmltime.pro2
-rw-r--r--tests/benchmarks/declarative/script/script.pro2
-rw-r--r--tests/benchmarks/declarative/typeimports/typeimports.pro2
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro2
-rw-r--r--tests/benchmarks/gui/gui.pro7
-rw-r--r--tests/benchmarks/gui/image/qimagereader/qimagereader.pro6
-rw-r--r--tests/benchmarks/gui/text/qtext/qtext.pro2
-rw-r--r--tests/benchmarks/network/network.pro7
-rw-r--r--tests/benchmarks/opengl/opengl.pro2
-rw-r--r--tests/benchmarks/script/qscriptengine/tst_qscriptengine.cpp314
-rw-r--r--tests/benchmarks/script/qscriptqobject/tst_qscriptqobject.cpp28
-rw-r--r--tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp862
-rw-r--r--tests/benchmarks/script/script.pro11
-rw-r--r--tests/benchmarks/script/sunspider/sunspider.pro20
-rw-r--r--tests/benchmarks/script/sunspider/tests/3d-cube.js337
-rw-r--r--tests/benchmarks/script/sunspider/tests/3d-morph.js54
-rw-r--r--tests/benchmarks/script/sunspider/tests/3d-raytrace.js441
-rw-r--r--tests/benchmarks/script/sunspider/tests/VERSION1
-rw-r--r--tests/benchmarks/script/sunspider/tests/access-binary-trees.js50
-rw-r--r--tests/benchmarks/script/sunspider/tests/access-fannkuch.js66
-rw-r--r--tests/benchmarks/script/sunspider/tests/access-nbody.js169
-rw-r--r--tests/benchmarks/script/sunspider/tests/access-nsieve.js38
-rw-r--r--tests/benchmarks/script/sunspider/tests/bitops-3bit-bits-in-byte.js32
-rw-r--r--tests/benchmarks/script/sunspider/tests/bitops-bits-in-byte.js21
-rw-r--r--tests/benchmarks/script/sunspider/tests/bitops-bitwise-and.js28
-rw-r--r--tests/benchmarks/script/sunspider/tests/bitops-nsieve-bits.js32
-rw-r--r--tests/benchmarks/script/sunspider/tests/controlflow-recursive.js25
-rw-r--r--tests/benchmarks/script/sunspider/tests/crypto-aes.js422
-rw-r--r--tests/benchmarks/script/sunspider/tests/crypto-md5.js286
-rw-r--r--tests/benchmarks/script/sunspider/tests/crypto-sha1.js224
-rw-r--r--tests/benchmarks/script/sunspider/tests/date-format-tofte.js299
-rw-r--r--tests/benchmarks/script/sunspider/tests/date-format-xparb.js417
-rw-r--r--tests/benchmarks/script/sunspider/tests/math-cordic.js95
-rw-r--r--tests/benchmarks/script/sunspider/tests/math-partial-sums.js33
-rw-r--r--tests/benchmarks/script/sunspider/tests/math-spectral-norm.js51
-rw-r--r--tests/benchmarks/script/sunspider/tests/regexp-dna.js1712
-rw-r--r--tests/benchmarks/script/sunspider/tests/string-base64.js135
-rw-r--r--tests/benchmarks/script/sunspider/tests/string-fasta.js85
-rw-r--r--tests/benchmarks/script/sunspider/tests/string-tagcloud.js265
-rw-r--r--tests/benchmarks/script/sunspider/tests/string-unpack-code.js68
-rw-r--r--tests/benchmarks/script/sunspider/tests/string-validate-input.js89
-rw-r--r--tests/benchmarks/script/sunspider/tst_sunspider.cpp129
-rw-r--r--tests/benchmarks/script/v8/tests/README.txt79
-rw-r--r--tests/benchmarks/script/v8/tests/base.js284
-rw-r--r--tests/benchmarks/script/v8/tests/crypto.js1698
-rw-r--r--tests/benchmarks/script/v8/tests/deltablue.js880
-rw-r--r--tests/benchmarks/script/v8/tests/earley-boyer.js4684
-rw-r--r--tests/benchmarks/script/v8/tests/raytrace.js904
-rw-r--r--tests/benchmarks/script/v8/tests/regexp.js1764
-rw-r--r--tests/benchmarks/script/v8/tests/richards.js539
-rw-r--r--tests/benchmarks/script/v8/tests/splay.js394
-rw-r--r--tests/benchmarks/script/v8/tst_v8.cpp142
-rw-r--r--tests/benchmarks/script/v8/v8.pro20
-rw-r--r--tests/benchmarks/svg/svg.pro2
-rw-r--r--tests/benchmarks/trusted-benchmarks.pri8
-rw-r--r--tests/manual/bearerex/datatransferer.cpp2
-rw-r--r--tests/manual/mkspecs/.gitignore2
-rwxr-xr-xtests/manual/mkspecs/test.sh64
-rw-r--r--tests/manual/qtouchevent/qtouchevent.pro (renamed from tests/manual/qtouchevent/multitouch.pro)0
-rw-r--r--tests/manual/textrendering/glyphshaping/glyphshaping.pro2
-rw-r--r--tools/assistant/lib/qhelpgenerator.cpp13
-rw-r--r--tools/assistant/tools/assistant/doc/assistant.qdoc10
-rw-r--r--tools/assistant/tools/assistant/openpagesmanager.cpp3
-rw-r--r--tools/configure/configureapp.cpp5
-rw-r--r--tools/designer/data/ui4.xsd1
-rw-r--r--tools/designer/src/components/formeditor/formwindow.cpp17
-rw-r--r--tools/designer/src/lib/sdk/abstractdnditem.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/abstracticoncache.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/dynamicpropertysheet.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/layoutdecoration.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/membersheet.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/propertysheet.qdoc10
-rw-r--r--tools/designer/src/lib/sdk/taskmenu.qdoc10
-rw-r--r--tools/designer/src/lib/shared/morphmenu.cpp2
-rw-r--r--tools/designer/src/lib/shared/qdesigner_command2.cpp62
-rw-r--r--tools/designer/src/lib/shared/qdesigner_command2_p.h22
-rw-r--r--tools/designer/src/lib/shared/qdesigner_taskmenu.cpp139
-rw-r--r--tools/designer/src/lib/shared/qdesigner_taskmenu_p.h1
-rw-r--r--tools/designer/src/lib/shared/qlayout_widget.cpp14
-rw-r--r--tools/designer/src/lib/shared/qtresourcemodel.cpp6
-rw-r--r--tools/designer/src/lib/uilib/abstractformbuilder.cpp82
-rw-r--r--tools/designer/src/lib/uilib/container.qdoc10
-rw-r--r--tools/designer/src/lib/uilib/customwidget.qdoc10
-rw-r--r--tools/designer/src/lib/uilib/ui4.cpp11
-rw-r--r--tools/designer/src/lib/uilib/ui4_p.h8
-rw-r--r--tools/linguist/linguist/mainwindow.cpp4
-rw-r--r--tools/linguist/linguist/printout.cpp2
-rw-r--r--tools/linguist/shared/ts.dtd23
-rw-r--r--tools/macdeployqt/shared/shared.cpp2
-rw-r--r--tools/porting/src/preprocessorcontrol.cpp2
-rw-r--r--tools/porting/src/textreplacement.h4
-rw-r--r--tools/qconfig/qconfig.pro1
-rw-r--r--tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp4
-rw-r--r--tools/qdoc3/ditaxmlgenerator.cpp4
-rw-r--r--tools/qdoc3/doc/qdoc-manual.qdoc10
-rw-r--r--tools/qdoc3/doc/qdoc-manual.qdocconf253
-rw-r--r--tools/qdoc3/helpprojectwriter.cpp16
-rw-r--r--tools/qdoc3/htmlgenerator.cpp151
-rw-r--r--tools/qdoc3/htmlgenerator.h2
-rw-r--r--tools/qdoc3/pagegenerator.cpp4
-rw-r--r--tools/qdoc3/qdoc3.pro4
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf8
-rw-r--r--tools/qdoc3/test/qt-cpp-ignore.qdocconf5
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf34
-rw-r--r--tools/qdoc3/test/qt.qdocconf5
-rw-r--r--tools/qdoc3/tokenizer.h2
-rw-r--r--tools/qdoc3/tree.cpp71
-rw-r--r--tools/qmeegographicssystemhelper/qmeegofencesync.cpp79
-rw-r--r--tools/qmeegographicssystemhelper/qmeegofencesync.h101
-rw-r--r--tools/qmeegographicssystemhelper/qmeegofencesync_p.h60
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h2
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro4
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp66
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.h11
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h6
-rw-r--r--tools/qmeegographicssystemhelper/qmeegooverlaywidget.cpp9
-rw-r--r--tools/qmeegographicssystemhelper/qmeegooverlaywidget.h2
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.cpp98
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.h14
-rw-r--r--tools/qml/main.cpp3
-rw-r--r--tools/qml/qdeclarativetester.cpp46
-rw-r--r--tools/qml/qdeclarativetester.h1
-rw-r--r--tools/qml/qmlruntime.cpp3
-rw-r--r--tools/qml/qmlruntime.h3
-rw-r--r--tools/qtconfig/mainwindow.cpp20
-rw-r--r--tools/qtestlib/wince/cetest/activesyncconnection.cpp2
-rw-r--r--tools/qtestlib/wince/cetest/deployment.cpp10
-rw-r--r--tools/qtestlib/wince/cetest/main.cpp2
-rw-r--r--tools/qvfb/qvfb.cpp2
-rw-r--r--tools/runonphone/serenum_unix.cpp35
-rw-r--r--tools/runonphone/symbianutils/tcftrkdevice.h2
-rw-r--r--tools/runonphone/symbianutils/tcftrkmessage.h2
-rw-r--r--tools/tools.pro2
-rw-r--r--translations/assistant_de.ts37
-rw-r--r--[-rwxr-xr-x]translations/assistant_ja.ts0
-rw-r--r--translations/assistant_ru.ts581
-rw-r--r--translations/designer_ru.ts172
-rw-r--r--[-rwxr-xr-x]translations/linguist_ja.ts0
-rw-r--r--translations/linguist_ru.ts955
-rw-r--r--translations/qt_de.ts4
-rw-r--r--[-rwxr-xr-x]translations/qt_ja.ts0
-rw-r--r--translations/qt_ru.ts166
-rw-r--r--translations/qt_zh_CN.ts2
-rw-r--r--translations/qtconfig_ru.ts82
-rw-r--r--translations/qvfb_ru.ts139
-rw-r--r--util/normalize/main.cpp2
-rw-r--r--util/qlalr/doc/src/qlalr.qdoc10
-rw-r--r--util/s60pixelmetrics/pm_mapperapp.cpp20
3245 files changed, 159533 insertions, 94301 deletions
diff --git a/.commit-template b/.commit-template
index 589ca89..6e0e3a4 100644
--- a/.commit-template
+++ b/.commit-template
@@ -5,6 +5,6 @@
# ---[ Fields ]-----------------[ uncomment and edit as applicable ]---|
#Task-number:
-#Reviewed-by:
+Reviewed-by: pending
# ==================================[ please wrap at 72 characters ]===|
diff --git a/.gitignore b/.gitignore
index 7bacc11..af52197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,6 +51,7 @@ Makefile*
*.prl
*.app
*.pro.user
+*.qmlproject.user
*.gcov
bin/Qt*.dll
bin/assistant*
diff --git a/bin/createpackage.pl b/bin/createpackage.pl
index 41ba2e3..522d1fb 100755
--- a/bin/createpackage.pl
+++ b/bin/createpackage.pl
@@ -140,7 +140,12 @@ unless (GetOptions('i|install' => \$install,
}
my $epocroot = $ENV{EPOCROOT};
-$epocroot =~ s,[\\/]$,,x;
+if ($epocroot ne "") {
+ $epocroot =~ s,\\,/,g;
+ if ($epocroot =~ m,[^/]$,) {
+ $epocroot = $epocroot."/";
+ }
+}
my $certfilepath = abs_path(dirname($certfile));
@@ -328,11 +333,11 @@ if ($preprocessonly) {
if($stub) {
if(!($epocroot)) { die("ERROR: EPOCROOT must be set to create stub sis files"); }
- my $systeminstall = "$epocroot/epoc32/data/z/system/install";
+ my $systeminstall = "${epocroot}epoc32/data/z/system/install";
mkpath($systeminstall);
my $stub_sis_name = $systeminstall."/".$stub_sis_name;
# Create stub SIS.
- system ("$epocroot/epoc32/tools/makesis -s $pkgoutput $stub_sis_name");
+ system ("${epocroot}epoc32/tools/makesis -s $pkgoutput $stub_sis_name");
} else {
if ($certtext eq "Self Signed"
&& !@certificates
@@ -346,7 +351,7 @@ if($stub) {
# Create SIS.
# The 'and' is because system uses 0 to indicate success.
if($epocroot) {
- system ("$epocroot/epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed");
+ system ("${epocroot}epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed");
} else {
system ("makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed");
}
diff --git a/bin/elf2e32_qtwrapper b/bin/elf2e32_qtwrapper
index 694d54a..a3a4065 100755
--- a/bin/elf2e32_qtwrapper
+++ b/bin/elf2e32_qtwrapper
@@ -1,145 +1,3 @@
-#!/usr/bin/perl -w
-
-# A script to get around some shortcomings in elf2e32, namely:
-# - Returning 0 even when there are errors.
-# - Excluding symbols from the dso file even when they are present in the ELF file.
-# - Including symbols in the the dso file even when they are not present in the ELF file.
-# - Overwriting the old dso file even when there are no changes (increases build time).
-
-use File::Copy;
-
-my @args = ();
-my @definput;
-my @defoutput;
-my @dso;
-my @tmpdso;
-foreach (@ARGV) {
- if (/^--definput/o) {
- @definput = split('=', $_);
- } elsif (/^--defoutput/o) {
- @defoutput = split('=', $_);
- } elsif (/^--dso/o) {
- @dso = split('=', $_);
- } elsif (/^--tmpdso/o) {
- @tmpdso = split('=', $_);
- $tmpdso[0] = "--dso";
- } else {
- push(@args, $_);
- }
-}
-
-@definput = () if (!@definput || ! -e $definput[1]);
-
-if (@dso && !@tmpdso || !@dso && @tmpdso) {
- print("--dso and --tmpdso must be used together.\n");
- exit 1;
-}
-
-my $buildingLibrary = (@defoutput && @dso) ? 1 : 0;
-
-my $fixupFile = "";
-my $runCount = 0;
-my $returnCode = 0;
-
-while (1) {
- if (++$runCount > 2) {
- print("Internal error in $0, link succeeded, but exports may be wrong.\n");
- last;
- }
-
- my $elf2e32Pipe;
- my $elf2e32Cmd = "elf2e32 @args"
- . " " . join("=", @definput)
- . " " . join("=", @defoutput)
- . " " . join("=", @tmpdso);
- open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32");
-
- my %fixupSymbols;
- my $foundBrokenSymbols = 0;
- my $errors = 0;
- while (<$elf2e32Pipe>) {
- print;
- if (/Error:/io) {
- $errors = 1;
- } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) {
- $fixupSymbols{$1} = 1;
- $foundBrokenSymbols = 1;
- } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) {
- $foundBrokenSymbols = 1;
- }
- }
- close($elf2e32Pipe);
-
- if ($errors) {
- $returnCode = 1;
- last;
- }
-
- if ($buildingLibrary) {
- my $tmpDefFile;
- my $defFile;
- open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]");
- open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp");
- $fixupFile = "$defoutput[1].tmp";
- while (<$defFile>) {
- s/\r//;
- s/\n//;
- next if (/; NEW:/);
- if (/([a-z0-9_]+) @/i) {
- if (exists($fixupSymbols{$1})) {
- s/ ABSENT//;
- } elsif (s/; MISSING://) {
- s/$/ ABSENT/;
- }
- }
- print($tmpDefFile "$_\n");
- }
- close($defFile);
- close($tmpDefFile);
-
- $definput[1] = "$defoutput[1].tmp";
-
- if (!$foundBrokenSymbols || $errors) {
- last;
- }
-
- print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n");
- } else {
- last;
- }
-};
-
-if ($fixupFile) {
- unlink($defoutput[1]);
- move($fixupFile, $defoutput[1]);
-}
-
-exit $returnCode if ($returnCode != 0);
-
-if ($buildingLibrary) {
- my $differenceFound = 0;
-
- if (-e $dso[1]) {
- my $dsoFile;
- my $tmpdsoFile;
- my $dsoBuf;
- my $tmpdsoBuf;
- open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]");
- open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]");
- binmode($dsoFile);
- binmode($tmpdsoFile);
- while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) {
- if ($dsoBuf ne $tmpdsoBuf) {
- $differenceFound = 1;
- }
- }
- close($tmpdsoFile);
- close($dsoFile);
- } else {
- $differenceFound = 1;
- }
-
- if ($differenceFound) {
- copy($tmpdso[1], $dso[1]);
- }
-}
+#!/bin/sh
+scriptpath=`dirname $0`
+perl $scriptpath/elf2e32_qtwrapper.pl "$@"
diff --git a/bin/elf2e32_qtwrapper.bat b/bin/elf2e32_qtwrapper.bat
new file mode 100644
index 0000000..52910df
--- /dev/null
+++ b/bin/elf2e32_qtwrapper.bat
@@ -0,0 +1,3 @@
+@echo off
+set scriptpath=%~dp0
+perl %scriptpath%elf2e32_qtwrapper.pl %*
diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl
new file mode 100755
index 0000000..4eeb098
--- /dev/null
+++ b/bin/elf2e32_qtwrapper.pl
@@ -0,0 +1,225 @@
+#!/usr/bin/perl -w
+
+# A script to get around some shortcomings in elf2e32, namely:
+# - Returning 0 even when there are errors.
+# - Excluding symbols from the dso file even when they are present in the ELF file.
+# - Including symbols in the the dso file even when they are not present in the ELF file.
+# - Overwriting the old dso file even when there are no changes (increases build time).
+
+use File::Copy;
+
+my @args = ();
+my @definput;
+my @defoutput;
+my @dso;
+my @tmpdso;
+foreach (@ARGV) {
+ if (/^--definput/o) {
+ @definput = split('=', $_);
+ } elsif (/^--defoutput/o) {
+ @defoutput = split('=', $_);
+ } elsif (/^--dso/o) {
+ @dso = split('=', $_);
+ } elsif (/^--tmpdso/o) {
+ @tmpdso = split('=', $_);
+ $tmpdso[0] = "--dso";
+ } else {
+ push(@args, $_);
+ }
+}
+
+@definput = () if (!@definput || ! -e $definput[1]);
+
+if (@dso && !@tmpdso || !@dso && @tmpdso) {
+ print("--dso and --tmpdso must be used together.\n");
+ exit 1;
+}
+
+my $buildingLibrary = (@defoutput && @dso) ? 1 : 0;
+
+my $fixupFile = "";
+my $runCount = 0;
+my $returnCode = 0;
+
+while (1) {
+ if (++$runCount > 2) {
+ print("Internal error in $0, link succeeded, but exports may be wrong.\n");
+ last;
+ }
+
+ my $elf2e32Pipe;
+ my $elf2e32Cmd = "elf2e32 @args"
+ . " " . join("=", @definput)
+ . " " . join("=", @defoutput)
+ . " " . join("=", @tmpdso);
+ open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32");
+
+ my %fixupSymbols;
+ my $foundBrokenSymbols = 0;
+ my $errors = 0;
+ while (<$elf2e32Pipe>) {
+ print;
+ if (/Error:/io) {
+ $errors = 1;
+ } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) {
+ $fixupSymbols{$1} = 1;
+ $foundBrokenSymbols = 1;
+ } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) {
+ $foundBrokenSymbols = 1;
+ }
+ }
+ close($elf2e32Pipe);
+
+ if ($errors) {
+ $returnCode = 1;
+ last;
+ }
+
+ if ($buildingLibrary && $runCount == 1) {
+ my $tmpDefFile;
+ my $newDefFile;
+ my $origDefFile;
+ my $savedNewDefFileLine = "";
+ if ($definput[1]) {
+ open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]");
+ }
+ open($newDefFile, "< $defoutput[1]") or die("Could not open $defoutput[1]");
+ open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp");
+ print($tmpDefFile "EXPORTS\n");
+ $fixupFile = "$defoutput[1].tmp";
+ while (1) {
+ my $origDefLine;
+ my $origSym;
+ my $origOrdinal;
+ my $origExtraData;
+ my $newDefLine;
+ my $newSym;
+ my $newOrdinal;
+ my $newExtraData;
+ my $defLine;
+ my $sym;
+ my $ordinal;
+ my $extraData;
+ if ($definput[1]) {
+ # Read from original def file, and skip non-symbol lines
+ while (1) {
+ $origDefLine = <$origDefFile>;
+ if (defined($origDefLine)) {
+ $origDefLine =~ s/[\n\r]//;
+ if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) {
+ $origSym = $1;
+ $origOrdinal = $2;
+ $origExtraData = $3;
+ last;
+ }
+ } else {
+ last;
+ }
+ }
+ }
+
+ if ($savedNewDefFileLine) {
+ # This happens if the new def file was missing an entry.
+ $newDefLine = $savedNewDefFileLine;
+ $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen");
+ $newSym = $1;
+ $newOrdinal = $2;
+ $newExtraData = $3;
+ } else {
+ # Read from new def file, and skip non-symbol lines
+ while (1) {
+ $newDefLine = <$newDefFile>;
+ if (defined($newDefLine)) {
+ $newDefLine =~ s/[\n\r]//;
+ if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) {
+ $newSym = $1;
+ $newOrdinal = $2;
+ $newExtraData = $3;
+ last;
+ }
+ } else {
+ last;
+ }
+ }
+ }
+ $savedNewDefFileLine = "";
+ last if (!defined($origDefLine) && !defined($newDefLine));
+
+ if (defined($origOrdinal) && (!defined($newOrdinal) || $origOrdinal != $newOrdinal)) {
+ # If the symbol is missing from the new def file, use the original symbol.
+ $savedNewDefFileLine = $newDefLine;
+ $defLine = $origDefLine;
+ $sym = $origSym;
+ $ordinal = $origOrdinal;
+ $extraData = $origExtraData;
+ } else {
+ $defLine = $newDefLine;
+ $sym = $newSym;
+ $ordinal = $newOrdinal;
+ if ($newExtraData =~ /ABSENT/) {
+ # Special case to keep "DATA [0-9]+" data in absent entries.
+ $extraData = $origExtraData;
+ } else {
+ $extraData = $newExtraData;
+ }
+ }
+ if (exists($fixupSymbols{$sym})) {
+ # Fix symbols that have returned after first being marked ABSENT.
+ $extraData =~ s/ ABSENT//;
+ } elsif ($defLine =~ s/; MISSING://) {
+ # Auto-absent symbols.
+ $extraData .= " ABSENT";
+ }
+ print($tmpDefFile "\t$sym \@ $ordinal $extraData\n");
+ }
+ print($tmpDefFile "\n");
+ close($origDefFile) if ($definput[1]);
+ close($newDefFile);
+ close($tmpDefFile);
+
+ $definput[1] = "$defoutput[1].tmp";
+
+ if (!$foundBrokenSymbols || $errors) {
+ last;
+ }
+
+ print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n");
+ } else {
+ last;
+ }
+};
+
+if ($fixupFile) {
+ unlink($defoutput[1]);
+ move($fixupFile, $defoutput[1]);
+}
+
+exit $returnCode if ($returnCode != 0);
+
+if ($buildingLibrary) {
+ my $differenceFound = 0;
+
+ if (-e $dso[1]) {
+ my $dsoFile;
+ my $tmpdsoFile;
+ my $dsoBuf;
+ my $tmpdsoBuf;
+ open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]");
+ open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]");
+ binmode($dsoFile);
+ binmode($tmpdsoFile);
+ while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) {
+ if ($dsoBuf ne $tmpdsoBuf) {
+ $differenceFound = 1;
+ }
+ }
+ close($tmpdsoFile);
+ close($dsoFile);
+ } else {
+ $differenceFound = 1;
+ }
+
+ if ($differenceFound) {
+ copy($tmpdso[1], $dso[1]);
+ }
+}
diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl
index 06ab116..5230480 100755
--- a/bin/patch_capabilities.pl
+++ b/bin/patch_capabilities.pl
@@ -269,6 +269,9 @@ if (@ARGV)
if (@capabilitiesSpecified)
{
$commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesSpecified));
+ $executeNeeded = 1;
+ my $capString = join(" ", @capabilitiesSpecified);
+ print ("Patching: Patching the the Vendor ID to 0 and the capabilities used to: \"$capString\" in \"$binaryBaseName\".\n");
} else {
# Test which capabilities are present and then restrict them to the allowed set.
# This avoid raising the capabilities of apps that already have none.
diff --git a/bin/syncqt b/bin/syncqt
index faa3575..99562fb 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -694,10 +694,7 @@ my @ignore_for_qt_begin_header_check = ( "qiconset.h", "qconfig.h", "qconfig-dis
my @ignore_for_qt_begin_namespace_check = ( "qconfig.h", "qconfig-dist.h", "qconfig-large.h", "qconfig-medium.h", "qconfig-minimal.h", "qconfig-small.h", "qfeatures.h", "qatomic_arch.h", "qatomic_windowsce.h", "qt_windows.h", "qatomic_macosx.h", "qatomic_arm.h", "qatomic_armv7.h" );
my @ignore_for_qt_module_check = ( "$modules{QtCore}/arch", "$modules{QtCore}/global", "$modules{QtSql}/drivers", "$modules{QtTest}", "$modules{QtDesigner}", "$modules{QtUiTools}", "$modules{QtDBus}", "$modules{phonon}" );
my %colliding_headers = ();
-my %inject_headers;
-# Force generation of forwarding header for qconfig.h if (and only if) we can't
-# find the header by normal means.
-%inject_headers = ( "$basedir/src/corelib/global" => ( "*qconfig.h" ) ) unless (-e "$basedir/src/corelib/global/qconfig.h");
+my %inject_headers = ( "$basedir/src/corelib/global" => ( "qconfig.h" ) ); # all from build dir
foreach my $lib (@modules_to_sync) {
#iteration info
@@ -799,7 +796,12 @@ foreach my $lib (@modules_to_sync) {
#calc files and "copy" them
foreach my $subdir (@subdirs) {
my @headers = findFiles($subdir, "^[-a-z0-9_]*\\.h\$" , 0);
- push @headers, $inject_headers{$subdir} if (defined $inject_headers{$subdir});
+ if (defined $inject_headers{$subdir}) {
+ foreach my $if ($inject_headers{$subdir}) {
+ @headers = grep(!/^\Q$if\E$/, @headers); #in case we configure'd previously
+ push @headers, "*".$if;
+ }
+ }
foreach my $header (@headers) {
my $shadow = ($header =~ s/^\*//);
$header = 0 if($header =~ /^ui_.*.h/);
@@ -877,7 +879,7 @@ foreach my $lib (@modules_to_sync) {
@headers = ( "$out_basedir/include/$lib/private/$header" );
}
foreach(@headers) { #sync them
- $header_copies++ if(syncHeader($_, $iheader, $copy_headers, $ts));
+ $header_copies++ if(syncHeader($_, $iheader, $copy_headers && !$shadow, $ts));
}
if($public_header) {
diff --git a/config.tests/mac/coreservices/coreservices.mm b/config.tests/mac/coreservices/coreservices.mm
new file mode 100644
index 0000000..0091e49
--- /dev/null
+++ b/config.tests/mac/coreservices/coreservices.mm
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the config.tests 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 <CoreServices/CoreServices.h>
+
+int main()
+{
+ FSRef ref;
+ return 0;
+}
diff --git a/config.tests/mac/coreservices/coreservices.pro b/config.tests/mac/coreservices/coreservices.pro
new file mode 100644
index 0000000..c9bf8ec
--- /dev/null
+++ b/config.tests/mac/coreservices/coreservices.pro
@@ -0,0 +1,3 @@
+SOURCES = coreservices.mm
+LIBS += -framework CoreServices
+CONFIG -= app_bundle qt
diff --git a/config.tests/mac/corewlan/corewlan.pro b/config.tests/mac/corewlan/corewlan.pro
index 8451af3..a9c2560 100644
--- a/config.tests/mac/corewlan/corewlan.pro
+++ b/config.tests/mac/corewlan/corewlan.pro
@@ -1,3 +1,3 @@
-SOURCES = corewlantest.mm
+OBJECTIVE_SOURCES = corewlantest.mm
LIBS += -framework CoreWLAN -framework Foundation
CONFIG -= app_bundle qt
diff --git a/config.tests/symbian/audio/audio.pro b/config.tests/symbian/audio/audio.pro
index b2a1986..b496341 100644
--- a/config.tests/symbian/audio/audio.pro
+++ b/config.tests/symbian/audio/audio.pro
@@ -6,4 +6,5 @@ INCLUDEPATH += $${EPOCROOT}epoc32/include/mmf/common
INCLUDEPATH += $${EPOCROOT}epoc32/include/platform
LIBS += -lmmfdevsound
+CONFIG -= qt
QT =
diff --git a/config.tests/symbian/simple/simple.pro b/config.tests/symbian/simple/simple.pro
index fa086c9..9c60d62 100644
--- a/config.tests/symbian/simple/simple.pro
+++ b/config.tests/symbian/simple/simple.pro
@@ -1,4 +1,5 @@
TEMPLATE = app
+CONFIG -= qt
QT =
SOURCES += main.cpp
diff --git a/config.tests/unix/doubleformat/doubleformattest.cpp b/config.tests/unix/doubleformat/doubleformattest.cpp
index 8e83251..2c51d0c 100644
--- a/config.tests/unix/doubleformat/doubleformattest.cpp
+++ b/config.tests/unix/doubleformat/doubleformattest.cpp
@@ -44,8 +44,8 @@
LE: strings | grep 0123ABCD0123ABCD
BE: strings | grep DCBA3210DCBA3210
-LE arm-swaped-dword-order: strings | grep ABCD0123ABCD0123
-BE arm-swaped-dword-order: strings | grep 3210DCBA3210DCBA (untested)
+LE arm-swapped-dword-order: strings | grep ABCD0123ABCD0123
+BE arm-swapped-dword-order: strings | grep 3210DCBA3210DCBA (untested)
tested on x86, arm-le (gp), aix
diff --git a/config.tests/unix/opengldesktop/opengldesktop.cpp b/config.tests/unix/opengldesktop/opengldesktop.cpp
new file mode 100644
index 0000000..969767c
--- /dev/null
+++ b/config.tests/unix/opengldesktop/opengldesktop.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the config.tests 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 <GL/gl.h>
+
+int main(int, char **)
+{
+ glBegin(GL_TRIANGLES);
+ glVertex2f(20.0f, 10.0f);
+ glVertex2f(10.0f, 30.0f);
+ glVertex2f(20.0f, 50.0f);
+ glEnd();
+ return 0;
+}
diff --git a/config.tests/unix/opengldesktop/opengldesktop.pro b/config.tests/unix/opengldesktop/opengldesktop.pro
new file mode 100644
index 0000000..ac70ca3
--- /dev/null
+++ b/config.tests/unix/opengldesktop/opengldesktop.pro
@@ -0,0 +1,9 @@
+SOURCES = opengldesktop.cpp
+INCLUDEPATH += $$QMAKE_INCDIR_OPENGL
+
+for(p, QMAKE_LIBDIR_OPENGL) {
+ exists($$p):LIBS += -L$$p
+}
+
+CONFIG -= qt
+LIBS += $$QMAKE_LIBS_OPENGL
diff --git a/configure b/configure
index bf81e26..875fef4 100755
--- a/configure
+++ b/configure
@@ -186,9 +186,12 @@ fi
PLATFORM_X11=no
PLATFORM_MAC=no
-PLATFORM_QWS=no
+PLATFORM_QWS=maybe
+PLATFORM_QPA=maybe
+BUILD_ON_MAC=no;
+[ -d /System/Library/Frameworks/Carbon.framework ] && BUILD_ON_MAC=yes
-if [ -f "$relpath"/src/gui/kernel/qapplication_mac.mm ] && [ -d /System/Library/Frameworks/Carbon.framework ]; then
+if [ -f "$relpath"/src/gui/kernel/qapplication_mac.mm ] && [ $BUILD_ON_MAC = "yes" ]; then
# Qt/Mac
# ~ the Carbon SDK exists
# ~ src/gui/base/qapplication_mac.cpp is present
@@ -283,6 +286,22 @@ earlyArgParse()
VAL=$1
fi
;;
+ -embedded-lite|-qpa)
+ VAR=qpa
+ # this option may or may not be followed by an argument
+ if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then
+ VAL=auto
+ else
+ shift;
+ VAL=$1
+ fi
+ ;;
+ -nacl)
+ shift;
+ VAR=nacl
+ VAL=$1
+ ;;
+
-h|help|--help|-help)
if [ "$VAL" = "yes" ]; then
OPT_HELP="$VAL"
@@ -319,12 +338,36 @@ earlyArgParse()
PLATFORM_X11=no
PLATFORM_MAC=no
PLATFORM_QWS=yes
+ PLATFORM_QPA=no
fi
else
echo "No license exists to enable Qt for Embedded Linux. Disabling."
CFG_EMBEDDED=no
fi
;;
+ qpa)
+ CFG_EMBEDDED="$VAL"
+ if [ "$PLATFORM_QPA" != "no" ]; then
+ if [ "$PLATFORM_QPA" = "maybe" ]; then
+ PLATFORM_X11=no
+ PLATFORM_MAC=no
+ PLATFORM_QWS=no
+ PLATFORM_QPA=yes
+ fi
+ else
+ echo "No license exists to enable Qt QPA. Disabling."
+ CFG_EMBEDDED=no
+ fi
+ ;;
+ nacl)
+ echo "Using NaCl at $VAL."
+ PLATFORM_X11=no
+ PLATFORM_MAC=no
+ PLATFORM_QWS=no
+ CFG_NACL_PATH=$VAL
+ CFG_EMBEDDED=nacl
+ ;;
+
developer-build)
CFG_DEV="yes"
;;
@@ -383,6 +426,7 @@ elif [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes"
elif [ $COMMERCIAL_USER = "yes" ]; then
# one of commercial editions
[ "$PLATFORM_MAC" = "maybe" ] && PLATFORM_MAC=yes
+ [ "$PLATFORM_QPA" = "maybe" ] && PLATFORM_QPA=no
[ "$PLATFORM_QWS" = "maybe" ] && PLATFORM_QWS=no
# read in the license file
@@ -475,6 +519,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
PlatformCode=`echo "$PlatformCode" | sed 's/.$//'`
;;
esac
+ ### EMBEDDED_QPA logic missing ###
case "$PlatformCode,$PLATFORM_MAC,$PLATFORM_QWS" in
X9,* | XC,* | XU,* | XW,* | XM,*)
# Qt All-OS
@@ -784,8 +829,10 @@ L_FLAGS=
RPATH_FLAGS=
l_FLAGS=
QCONFIG_FLAGS=
-XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian/linux-gcce"
+XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce"
XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*)
+XPLATFORM_SYMBIAN=no # Whether target platform is SYMBIAN (*symbian*)
+XPLATFORM_SYMBIAN_SBSV2=no # Whether target platform is SYMBIAN_SBSV2 (symbian-sbsv2)
PLATFORM=$QMAKESPEC
QT_CROSS_COMPILE=no
OPT_CONFIRM_LICENSE=no
@@ -905,6 +952,44 @@ if [ -d "$relpath/src/plugins/gfxdrivers" ]; then
fi
#-------------------------------------------------------------------------------
+# Set Default NaCl options
+#-------------------------------------------------------------------------------
+if [ "$CFG_EMBEDDED" = "nacl" ]; then
+ echo "Setting NaCl options:"
+ echo "-static"
+ CFG_SHARED=no
+ echo "-qpa nacl"
+ PLATFORM_QPA=yes
+ echo "-fast"
+ OPT_FAST=yes
+ echo "-release"
+ CFG_DEBUG=no
+ echo "-qconfig minimal-system-dependencies"
+ CFG_QCONFIG=minimal-system-dependencies
+
+ if [ `uname` = "Linux" ]; then
+ I_FLAGS="$I_FLAGS -I${CFG_NACL_PATH}/toolchain/linux_x86/sdk/nacl-sdk/include"
+ L_FLAGS="$L_FLAGS -I${CFG_NACL_PATH}/toolchain/linux_x86/sdk/nacl-sdk/lib"
+ else
+ I_FLAGS="$I_FLAGS -I${CFG_NACL_PATH}/toolchain/mac_x86/sdk/nacl-sdk/include"
+ L_FLAGS="$L_FLAGS -I${CFG_NACL_PATH}/toolchain/mac_x86/sdk/nacl-sdk/lib"
+ fi
+
+ echo "-no-multimedia -no-webkit -no-phonon -no-nultimedia -no-mediaservices -no-xmlpatterns -no-script -no-sql-sqlite -nomake tests"
+ CFG_MULTIMEDIA=no
+ CFG_WEBKIT=no
+ CFG_PHONON=no
+ CFG_MULTIMEDIA=no
+ CFG_MEDIASERVICES=no
+ CFG_XMLPATTERNS=no
+ CFG_SCRIPT=no
+ CFG_SQLITE=no
+ CFG_SQL_sqlite=no
+ CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS tests"
+ QT_CONFIG="$QT_CONFIG nacl"
+fi
+
+#-------------------------------------------------------------------------------
# parse command line arguments
#-------------------------------------------------------------------------------
@@ -964,7 +1049,7 @@ while [ "$#" -gt 0 ]; do
;;
#Qt style options that pass an argument
-qconfig)
- if [ "$PLATFORM_QWS" != "yes" ]; then
+ if [ "$PLATFORM_QWS" != "yes" -a "$PLATFORM_QPA" != "yes" ]; then
echo
echo "WARNING: -qconfig is only tested and supported on Qt for Embedded Linux."
echo
@@ -1004,6 +1089,20 @@ while [ "$#" -gt 0 ]; do
VAL=$1
fi
;;
+ -embedded-lite|-qpa)
+ VAR=qpa
+ # this option may or may not be followed by an argument
+ if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then
+ VAL=auto
+ else
+ shift;
+ VAL=$1
+ fi
+ ;;
+ -nacl)
+ VAR=nacl
+ shift;
+ ;;
-opengl)
VAR=opengl
# this option may or may not be followed by an argument
@@ -1226,12 +1325,29 @@ while [ "$#" -gt 0 ]; do
PLATFORM_X11=no
PLATFORM_MAC=no
PLATFORM_QWS=yes
+ PLATFORM_QPA=no
fi
else
echo "No license exists to enable Qt for Embedded Linux. Disabling."
CFG_EMBEDDED=no
fi
;;
+ embedded-lite|qpa)
+ CFG_EMBEDDED="$VAL"
+ if [ "$PLATFORM_QPA" != "no" ]; then
+ if [ "$PLATFORM_QPA" = "maybe" ]; then
+ PLATFORM_X11=no
+ PLATFORM_MAC=no
+ PLATFORM_QWS=no
+ PLATFORM_QPA=yes
+ fi
+ else
+ echo "No license exists to enable Qt QPA. Disabling."
+ CFG_EMBEDDED=no
+ fi
+ ;;
+ nacl)
+ ;;
sse)
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
CFG_SSE="$VAL"
@@ -1339,6 +1455,8 @@ while [ "$#" -gt 0 ]; do
PLATFORM_MAC=no
elif [ "$PLATFORM_QWS" = "yes" ]; then
PLATFORM_QWS=no
+ elif [ "$PLATFORM_QPA" = "yes" ]; then
+ PLATFORM_QPA=no
fi
if [ "$CFG_FRAMEWORK" = "auto" ]; then
CFG_FRAMEWORK=no
@@ -1478,6 +1596,8 @@ while [ "$#" -gt 0 ]; do
xplatform)
XPLATFORM="$VAL"
case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac
+ case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac
+ case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac
;;
debug-and-release)
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
@@ -1556,8 +1676,7 @@ while [ "$#" -gt 0 ]; do
fi
;;
gif)
- [ "$VAL" = "qt" ] && VAL=auto
- if [ "$VAL" = "auto" ] || [ "$VAL" = "no" ]; then
+ if [ "$VAL" = "no" ]; then
CFG_GIF="$VAL"
else
UNKNOWN_OPT=yes
@@ -2263,6 +2382,11 @@ if [ "$CFG_GUI" = "no" ]; then
CFG_QT3SUPPORT="no"
fi
+#disable Qt3Support for Lighthouse
+if [ "$PLATFORM_QPA" = "yes" ]; then
+ CFG_QT3SUPPORT="no"
+fi
+
# update QT_CONFIG to show our current predefined configuration
case "$CFG_QCONFIG" in
minimal|small|medium|large|full)
@@ -2333,7 +2457,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then
[ "$OPT_VERBOSE" = "yes" ] && echo "Performing shadow build..."
fi
-if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
+if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
echo
echo "WARNING: -debug-and-release is not supported anymore on Qt/X11 and Qt for Embedded Linux"
echo "Qt can be built in release mode with separate debug information, so"
@@ -2429,14 +2553,8 @@ if [ "$OPT_SHADOW" = "yes" ]; then
ShadowMkspecs()
{
rm -rf "$outpath/mkspecs/$1"
- if [ "$UNAME_SYSTEM" = "Linux" ]; then
- # This works with GNU coreutils, and is needed for ScratchBox
- cp -rs "$relpath/mkspecs/$1" "$outpath/mkspecs/$1"
- else
- # A simple "cp -rs" doesn't work on Mac. :(
- find "$relpath/mkspecs/$1" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p
- find "$relpath/mkspecs/$1" -type f | sed "s,^$relpath/,," | xargs -n 1 -I % ln -s "$relpath/%" "$outpath/%"
- fi
+ find "$relpath/mkspecs/$1" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p
+ find "$relpath/mkspecs/$1" -type f | sed "s,^$relpath/,," | while read f; do ln -s "$relpath/$f" "$outpath/$f"; done
}
# Special case for mkspecs/features directory.
@@ -2458,7 +2576,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then
fi
# symlink fonts to be able to run application from build directory
-if [ "$PLATFORM_QWS" = "yes" ] && [ ! -d "${outpath}/lib/fonts" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ ! -d "${outpath}/lib/fonts" ]; then
if [ "$PLATFORM" = "$XPLATFORM" ]; then
mkdir -p "${outpath}/lib"
ln -s "${relpath}/lib/fonts" "${outpath}/lib/fonts"
@@ -2498,6 +2616,7 @@ fi ### help
#-------------------------------------------------------------------------------
[ "$PLATFORM_QWS" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto
+[ "$PLATFORM_QPA" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto
if [ "$CFG_EMBEDDED" != "no" ]; then
case "$UNAME_SYSTEM:$UNAME_RELEASE" in
Darwin:*)
@@ -2572,6 +2691,7 @@ if [ "$CFG_EMBEDDED" != "no" ]; then
echo "Qt for Embedded Linux is not supported on this platform. Disabling."
CFG_EMBEDDED=no
PLATFORM_QWS=no
+ PLATFORM_QPA=no
;;
esac
fi
@@ -2740,7 +2860,7 @@ if [ -z "$PLATFORM" ]; then
esac
fi
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
CFG_SM=no
PLATFORMS=`find "$relpath/mkspecs/qws" | sed "s,$relpath/mkspecs/qws/,,"`
else
@@ -2750,6 +2870,8 @@ fi
[ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM"
case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac
+case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac
+case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac
if [ -d "$PLATFORM" ]; then
QMAKESPEC="$PLATFORM"
@@ -3028,7 +3150,7 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then
esac
elif [ "$XPLATFORM_MINGW" = "yes" ]; then
[ -z "$CFG_ARCH" ] && CFG_ARCH="windows"
-elif echo "$XPLATFORM" | grep symbian > /dev/null; then
+elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
CFG_ARCH=symbian
elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then
CFG_ARCH=$CFG_HOST_ARCH
@@ -3068,9 +3190,9 @@ if [ "$CFG_HOST_ARCH" != "$CFG_ARCH" ]; then
fi
if [ "$OPT_VERBOSE" = "yes" ]; then
- echo "Target architecture: '$CFG_ARCH'"
- if [ "$PLATFORM_QWS" = "yes" ]; then
- echo "Host architecture: '$CFG_HOST_ARCH'"
+ echo "System architecture: '$CFG_ARCH'"
+ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
+ echo "Host architecture: '$CFG_HOST_ARCH'"
fi
fi
@@ -3166,7 +3288,7 @@ QMAKE_CONF_COMPILER=`getQMakeConf "$XQMAKESPEC" | grep "^QMAKE_CXX[^_A-Z0-9]" |
TEST_COMPILER="$CXX"
[ -z "$TEST_COMPILER" ] && TEST_COMPILER=$QMAKE_CONF_COMPILER
-if [ "$XPLATFORM" != "symbian-sbsv2" ]; then
+if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then
#for Symbian we don't need this checking
if [ -z "$TEST_COMPILER" ]; then
echo "ERROR: Cannot set the compiler for the configuration tests"
@@ -3174,6 +3296,9 @@ if [ "$XPLATFORM" != "symbian-sbsv2" ]; then
fi
fi
+if [ "$CFG_EMBEDDED" = "nacl" ]; then
+ TEST_COMPILER="nacl-gcc"
+fi
# auto-detect precompiled header support
if [ "$CFG_PRECOMPILE" = "auto" ]; then
@@ -3328,24 +3453,25 @@ fi
if [ -z "$QT_INSTALL_PREFIX" ]; then
if [ "$CFG_DEV" = "yes" ]; then
QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default
- elif [ "$PLATFORM_QWS" = "yes" ]; then
- QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}"
+ elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
+ if [ "$PLATFORM_QPA" = "yes" ]; then
+ QT_INSTALL_PREFIX="/usr/local/Trolltech/QtLighthouse-${QT_VERSION}"
+ else
+ QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}"
+ fi
if [ "$PLATFORM" != "$XPLATFORM" ]; then
QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}"
fi
- elif [ -d "$EPOCROOT" ]; then
- case "$XPLATFORM" in *symbian*)
- QT_INSTALL_PREFIX="$EPOCROOT/epoc32/"
- QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/"
- ;;
- esac
+ elif [ -d "$EPOCROOT" ] && [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
+ QT_INSTALL_PREFIX="$EPOCROOT/epoc32/"
+ QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/"
else
QT_INSTALL_PREFIX="/usr/local/Trolltech/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Trolltech/Qt-$QT_VERSION
fi
fi
QT_INSTALL_PREFIX=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_PREFIX"`
-if echo $XPLATFORM | grep symbian > /dev/null; then
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
[ -z "$QT_HOST_PREFIX" ] && QT_HOST_PREFIX="$QT_INSTALL_PREFIX"
[ -z "$QT_INSTALL_DOCS" ] && QT_INSTALL_DOCS=
[ -z "$QT_INSTALL_HEADERS" ] && QT_INSTALL_HEADERS=
@@ -3541,14 +3667,14 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-accessibility] [-no-stl] [-stl] [-no-sql-<driver>] [-sql-<driver>]
[-plugin-sql-<driver>] [-system-sqlite] [-no-qt3support] [-qt3support]
[-platform] [-D <string>] [-I <string>] [-L <string>] [-help]
- [-qt-zlib] [-system-zlib] [-no-gif] [-qt-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
+ [-qt-zlib] [-system-zlib] [-no-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
[-no-libpng] [-qt-libpng] [-system-libpng] [-no-libmng] [-qt-libmng]
[-system-libmng] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg] [-make <part>]
[-nomake <part>] [-R <string>] [-l <string>] [-no-rpath] [-rpath] [-continue]
[-verbose] [-v] [-silent] [-no-nis] [-nis] [-no-cups] [-cups] [-no-iconv]
[-iconv] [-no-pch] [-pch] [-no-dbus] [-dbus] [-dbus-linked] [-no-gui]
[-no-separate-debug-info] [-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
- [-no-sse3] [-no-ssse3] [-no-sse4.1] [-no-sse4.2] [-no-avx]
+ [-no-sse3] [-no-ssse3] [-no-sse4.1] [-no-sse4.2] [-no-avx] [-no-neon]
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info] [-armfpa]
[-no-optimized-qmake] [-optimized-qmake] [-no-xmlpatterns] [-xmlpatterns]
[-no-multimedia] [-multimedia] [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
@@ -3568,7 +3694,7 @@ Installation options:
-prefix <dir> ...... This will install everything relative to <dir>
(default $QT_INSTALL_PREFIX)
EOF
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
cat <<EOF
-hostprefix [dir] .. Tools and libraries needed when developing
@@ -3647,7 +3773,7 @@ Configure options:
+ -largefile ......... Enables Qt to access files larger than 4 GB.
EOF
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
EXCN="*"
EXCY=" "
else
@@ -3752,6 +3878,7 @@ cat << EOF
-no-sse4.1.......... Do not compile with use of SSE4.1 instructions.
-no-sse4.2.......... Do not compile with use of SSE4.2 instructions.
-no-avx ............ Do not compile with use of AVX instructions.
+ -no-neon ........... Do not compile with use of NEON instructions.
-qtnamespace <name> Wraps all Qt library code in 'namespace <name> {...}'.
-qtlibinfix <infix> Renames all libQt*.so to libQt*<infix>.so.
@@ -3769,8 +3896,6 @@ Third Party Libraries:
See http://www.gzip.org/zlib
-no-gif ............ Do not compile GIF reading support.
- * -qt-gif ............ Compile GIF reading support.
- See also src/gui/image/qgifhandler_p.h
-no-libtiff ........ Do not compile TIFF support.
-qt-libtiff ........ Use the libtiff bundled with Qt.
@@ -3866,7 +3991,7 @@ else
SBN="*"
fi
-if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
cat << EOF
@@ -4096,7 +4221,7 @@ Qt/Mac only:
EOF
fi
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
cat << EOF
Qt for Embedded Linux only:
@@ -4111,6 +4236,10 @@ Qt for Embedded Linux only:
proper license for this switch to work.
Example values for <arch>: arm mips x86 generic
+ -qpa <arch> ......... This will enable the QPA build.
+ Example values for <arch>: arm mips x86 generic
+ QPA is a window system agnostic implementation of Qt.
+
-armfpa ............. Target platform uses the ARM-FPA floating point format.
-no-armfpa .......... Target platform does not use the ARM-FPA floating point format.
@@ -4183,13 +4312,11 @@ Qt for Embedded Linux only:
-iwmmxt ............ Compile using the iWMMXt instruction set
(available on some XScale CPUs).
-
- -no-neon ........... Do not compile with use of NEON instructions.
EOF
fi
-if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_X11" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" -o "$PLATFORM_X11" = "yes" ]; then
if [ "$CFG_GLIB" = "no" ]; then
GBY=" "
GBN="+"
@@ -4204,7 +4331,7 @@ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_X11" = "yes" ]; then
EOF
fi
-case "$XPLATFORM" in *symbian*)
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
cat << EOF
Qt for Symbian only:
@@ -4216,9 +4343,7 @@ Qt for Symbian only:
-no-usedeffiles .... Disable the usage of DEF files.
* -usedeffiles ....... Enable the usage of DEF files.
EOF
-;;
-esac
-
+fi
[ "x$ERROR" = "xyes" ] && exit 1
exit 0
fi # Help
@@ -4228,12 +4353,12 @@ fi # Help
# LICENSING, INTERACTIVE PART
# -----------------------------------------------------------------------------
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
Platform="Qt for Embedded Linux"
+elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
+ Platform="Qt for Symbian"
elif [ "$PLATFORM_MAC" = "yes" ]; then
Platform="Qt for Mac OS X"
-elif echo "$XPLATFORM" | grep "symbian" > /dev/null ; then
- Platform="Qt for Symbian"
elif [ "$XPLATFORM_MINGW" = "yes" ]; then
Platform="Qt for Windows"
elif [ '!' -z "`getQMakeConf \"$XQMAKESPEC\" | grep QMAKE_LIBS_X11 | awk '{print $3;}'`" ]; then
@@ -4568,27 +4693,37 @@ fi
# $2: optional transformation
# relies on $QMAKESPEC, $COMPILER_CONF and $mkfile being set correctly, as the latter
# is where the resulting variable is written to
+# Assumes that the optional transformation produces the same variable name for each hit
setBootstrapVariable()
{
getQMakeConf | $AWK '/^('"$1"')[^_A-Z0-9]/ { print $0; }' | ( [ -n "$2" ] && sed "$2" ; [ -z "$2" ] && cat ) | $AWK '
+BEGIN {
+ variable = ""
+ combinedValue = ""
+}
{
- varLength = index($0, "=") - 1
- valStart = varLength + 2
- if (substr($0, varLength, 1) == "+") {
- varLength = varLength - 1
- valStart = valStart + 1
+ valStart = index($0, "=") + 1
+
+ append = 0
+ if (substr($0, valStart - 2, 1) == "+") {
+ append = 1
+ }
+
+ variable = substr($0, 0, valStart - 2 - append)
+ value = substr($0, valStart)
+ gsub("[ \t]+", "", variable)
+ gsub("^[ \t]+", "", value)
+ gsub("[ \t]+$", "", value)
+
+ if (append == 1 && length(combinedValue) > 0) {
+ combinedValue = combinedValue " " value
+ } else {
+ combinedValue = value
}
- var = substr($0, 0, varLength)
- gsub("[ \t]+", "", var)
- val = substr($0, valStart)
- printf "%s_%s = %s\n", var, NR, val
}
END {
- if (length(var) > 0) {
- printf "%s =", var
- for (i = 1; i <= NR; ++i)
- printf " $(%s_%s)", var, i
- printf "\n"
+ if (length(combinedValue) > 0) {
+ printf "%s = %s\n", variable, combinedValue
}
}' >> "$mkfile"
}
@@ -4618,7 +4753,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
#mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured
rm -rf mkspecs/default
- if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null ; then
+ if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
#Link is not supported for Symbian build system
cp -a mkspecs/`echo $XQMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` mkspecs/default
else
@@ -4691,7 +4826,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
EXTRA_LFLAGS="\$(QMAKE_LFLAGS_RPATH)\"$rpath\" $EXTRA_LFLAGS"
done
fi
- if [ "$PLATFORM_MAC" = "yes" ]; then
+ if [ "$BUILD_ON_MAC" = "yes" ]; then
echo "export MACOSX_DEPLOYMENT_TARGET = 10.4" >> "$mkfile"
echo "CARBON_LFLAGS =-framework ApplicationServices" >>"$mkfile"
echo "CARBON_CFLAGS =-fconstant-cfstrings" >>"$mkfile"
@@ -4870,33 +5005,12 @@ if [ "$CFG_ARCH" = "arm" ] && [ "${CFG_NEON}" = "auto" ]; then
fi
fi
-# detect zlib
-if [ "$CFG_ZLIB" = "no" ]; then
- # Note: Qt no longer support builds without zlib
- # So we force a "no" to be "auto" here.
- # If you REALLY really need no zlib support, you can still disable
- # it by doing the following:
- # add "no-zlib" to mkspecs/qconfig.pri
- # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h)
- #
- # There's no guarantee that Qt will build under those conditions
-
- CFG_ZLIB=auto
- ZLIB_FORCED=yes
-fi
-if [ "$CFG_ZLIB" = "auto" ]; then
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
- CFG_ZLIB=system
- else
- CFG_ZLIB=yes
- fi
-fi
-
[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista"
-case "$XPLATFORM" in *symbian*)
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
QMakeVar set styles "windows s60" #overwrite previous default
CFG_LIBFREETYPE=no
+ CFG_ZLIB=yes
if [ "$CFG_LARGEFILE" = auto ]; then
CFG_LARGEFILE=no
@@ -4911,7 +5025,7 @@ case "$XPLATFORM" in *symbian*)
exit 1
fi
- if ! echo $XPLATFORM | grep symbian-sbsv2 > /dev/null; then
+ if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then
# Raptor does not support configure tests.
# the main commands needed to compile;
@@ -4935,8 +5049,29 @@ case "$XPLATFORM" in *symbian*)
exit 1;
fi
fi
- ;;
-esac
+fi
+
+# detect zlib
+if [ "$CFG_ZLIB" = "no" ]; then
+ # Note: Qt no longer support builds without zlib
+ # So we force a "no" to be "auto" here.
+ # If you REALLY really need no zlib support, you can still disable
+ # it by doing the following:
+ # add "no-zlib" to mkspecs/qconfig.pri
+ # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h)
+ #
+ # There's no guarantee that Qt will build under those conditions
+
+ CFG_ZLIB=auto
+ ZLIB_FORCED=yes
+fi
+if [ "$CFG_ZLIB" = "auto" ]; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
+ CFG_ZLIB=system
+ else
+ CFG_ZLIB=yes
+ fi
+fi
if [ "$CFG_LARGEFILE" = "auto" ]; then
#Large files should be enabled for all Linux systems
@@ -4945,7 +5080,7 @@ fi
if [ "$CFG_S60" = "auto" ]; then
- if echo "$XPLATFORM" | grep symbian > /dev/null; then
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
CFG_S60=yes
else
CFG_S60=no
@@ -4953,7 +5088,7 @@ if [ "$CFG_S60" = "auto" ]; then
fi
if [ "$CFG_QS60STYLE" = "auto" ]; then
- if echo "$XPLATFORM" | grep symbian > /dev/null; then
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
CFG_QS60STYLE=qt
else
CFG_QS60STYLE=no
@@ -4961,7 +5096,7 @@ if [ "$CFG_QS60STYLE" = "auto" ]; then
fi
if [ "$CFG_SYMBIAN_DEFFILES" = "auto" ]; then
- if echo "$XPLATFORM" | grep symbian > /dev/null && [ "$CFG_DEV" = "no" ]; then
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ] && [ "$CFG_DEV" = "no" ]; then
CFG_SYMBIAN_DEFFILES=yes
else
CFG_SYMBIAN_DEFFILES=no
@@ -5040,14 +5175,12 @@ fi
# detect accessibility
if [ "$CFG_ACCESSIBILITY" = "auto" ]; then
- case "$XPLATFORM" in
- symbian*)
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
# accessibility is currently unsupported
CFG_ACCESSIBILITY=no
- ;;
- *)
+ else
CFG_ACCESSIBILITY=yes
- esac
+ fi
fi
# auto-detect SQL-modules support
@@ -5259,15 +5392,13 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do
;;
sqlite)
if [ "$CFG_SQL_sqlite" = "auto" ]; then # the default
- case "$XPLATFORM" in
- symbian*)
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
# sqlite on symbian is typically not build in Qt but deployed as a pre-existing sis file and should be marked as driver.
# Configuration parameters should be set
CFG_SQL_sqlite=qt
QT_LFLAGS_SQLITE=-lsqlite3
QMAKE_CONFIG="$QMAKE_CONFIG system-sqlite"
- ;;
- esac
+ fi
fi
if [ "$CFG_SQL_sqlite" != "no" ]; then
SQLITE_AUTODETECT_FAILED="no"
@@ -5347,7 +5478,7 @@ fi
# auto-detect iconv(3) support
if [ "$CFG_ICONV" != "no" ]; then
- if [ "$PLATFORM_QWS" = "yes" ]; then
+ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
CFG_ICONV=no
elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" "$OPT_VERBOSE" "$relpath" "$outpath" "config.tests/unix/iconv" "POSIX iconv" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
CFG_ICONV=yes
@@ -5409,8 +5540,8 @@ if [ "$PLATFORM_MAC" = "yes" -a ! -z "$QT_NAMESPACE" ]; then
QT_NAMESPACE_MAC_CRC=`"$mactests/crc.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/crc $QT_NAMESPACE $L_FLAGS $I_FLAGS $l_FLAGS`
fi
-# X11/QWS
-if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
+# X11/QWS/Lighthouse
+if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
# auto-detect Glib support
if [ "$CFG_GLIB" != "no" ]; then
@@ -5544,7 +5675,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
fi
fi
fi
-fi # X11/QWS
+fi # X11/QWS/Lighthouse
# X11
if [ "$PLATFORM_X11" = "yes" ]; then
@@ -5958,6 +6089,84 @@ if [ "$PLATFORM_MAC" = "yes" ]; then
fi
fi
+
+if [ "$PLATFORM_QPA" = "yes" ]; then
+ # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x)
+ if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengldesktop "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then
+ CFG_OPENGL=desktop
+ elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS; then
+ CFG_OPENGL=es2
+ elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS; then
+ CFG_OPENGL=es1
+ else
+ if [ "$CFG_OPENGL" = "yes" ]; then
+ echo "All the OpenGL functionality tests failed!"
+ echo " You might need to modify the include and library search paths by editing"
+ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
+ echo " ${XQMAKESPEC}."
+ exit 1
+ fi
+ CFG_OPENGL=no
+ fi
+ elif [ "$CFG_OPENGL" = "es1" ]; then
+ # OpenGL ES 1.x
+ "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS
+ if [ $? != "0" ]; then
+ echo "The OpenGL ES 1.x functionality test failed!"
+ echo " You might need to modify the include and library search paths by editing"
+ echo " QMAKE_INCDIR_OPENGL_ES1, QMAKE_LIBDIR_OPENGL_ES1 and QMAKE_LIBS_OPENGL_ES1 in"
+ echo " ${XQMAKESPEC}."
+ exit 1
+ fi
+ elif [ "$CFG_OPENGL" = "es2" ]; then
+ #OpenGL ES 2.x
+ "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS
+ if [ $? != "0" ]; then
+ echo "The OpenGL ES 2.0 functionality test failed!"
+ echo " You might need to modify the include and library search paths by editing"
+ echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in"
+ echo " ${XQMAKESPEC}."
+ exit 1
+ fi
+ elif [ "$CFG_OPENGL" = "desktop" ]; then
+ # Desktop OpenGL support
+ "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengldesktop "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS
+ if [ $? != "0" ]; then
+ echo "The OpenGL functionality test failed!"
+ echo " You might need to modify the include and library search paths by editing"
+ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
+ echo " ${XQMAKESPEC}."
+ exit 1
+ fi
+ fi
+
+ # auto-detect FontConfig support
+ if [ "$CFG_FONTCONFIG" != "no" ]; then
+ if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then
+ QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null`
+ QT_LIBS_FONTCONFIG=`$PKG_CONFIG --libs fontconfig --libs freetype2 2>/dev/null`
+ else
+ QT_CFLAGS_FONTCONFIG=
+ QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig"
+ fi
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/fontconfig "FontConfig" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS $QT_CFLAGS_FONTCONFIG $QT_LIBS_FONTCONFIG; then
+ QT_CONFIG="$QT_CONFIG fontconfig"
+ QMakeVar set QMAKE_CFLAGS_FONTCONFIG "$QT_CFLAGS_FONTCONFIG"
+ QMakeVar set QMAKE_LIBS_FONTCONFIG "$QT_LIBS_FONTCONFIG"
+ CFG_LIBFREETYPE=system
+ fi
+ fi
+
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/coreservices "CoreServices" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
+ QT_CONFIG="$QT_CONFIG coreservices"
+ else
+ QMakeVar add DEFINES QT_NO_CORESERVICES
+ fi
+
+fi
+
+
# QWS
if [ "$PLATFORM_QWS" = "yes" ]; then
@@ -5976,7 +6185,7 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
CFG_EGL=auto
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS; then
CFG_OPENGL=es2
- elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS; then
+ elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS; then
CFG_OPENGL=es1
else
echo "All the OpenGL ES functionality tests failed!"
@@ -6012,6 +6221,9 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
echo "Desktop OpenGL support is not avaliable on Qt for Embedded Linux"
exit 1
fi
+fi
+
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
# screen drivers
for screen in ${CFG_GFX_ON} ${CFG_GFX_PLUGIN}; do
@@ -6138,10 +6350,10 @@ fi
if [ "$CFG_ENDIAN" = "auto" ]; then
if [ "$XPLATFORM_MINGW" = "yes" ]; then
CFG_ENDIAN="Q_LITTLE_ENDIAN"
- elif [ "$PLATFORM_MAC" = "yes" ]; then
- true #leave as auto
- elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then
+ elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
CFG_ENDIAN="Q_LITTLE_ENDIAN"
+ elif [ "$PLATFORM_MAC" = "yes" ] && [ "$XPLATFORM_SYMBIAN" = "no" ]; then
+ true #leave as auto
else
"$unixtests/endian.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath"
F="$?"
@@ -6195,7 +6407,7 @@ fi
if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then
- if [ "$PLATFORM_QWS" != "yes" ]; then
+ if [ "$PLATFORM_QWS" != "yes" -o "$PLATFORM_QPA" = "yes" ]; then
CFG_DOUBLEFORMAT=normal
else
"$unixtests/doubleformat.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath"
@@ -6227,7 +6439,7 @@ if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then
fi
HAVE_STL=no
-if echo "$XPLATFORM" | grep symbian > /dev/null || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then
+if [ "$XPLATFORM_SYMBIAN" = "yes" ] || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then
HAVE_STL=yes
fi
@@ -6254,7 +6466,7 @@ if [ "$CFG_IPV6" != "no" ]; then
# Therefore for 4.7.1 and following we disable it until OpenC either supports it or we have the native Qt
# symbian socket engine.
#
- if echo "$XPLATFORM" | grep symbian > /dev/null; then
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
CFG_IPV6=no
elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ipv6 "IPv6" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
CFG_IPV6=yes
@@ -6369,7 +6581,7 @@ if [ "$CFG_GETIFADDRS" != "no" ]; then
fi
# detect OpenSSL
-if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then
+if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/openssl "OpenSSL" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then
if [ "$CFG_OPENSSL" = "auto" ]; then
CFG_OPENSSL=yes
@@ -6386,14 +6598,14 @@ if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then
fi
fi
else
- if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM" = "symbian-sbsv2" ]; then
+ if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
#OpenSSl should be enabled for Symbian release
CFG_OPENSSL=yes
fi
fi
# detect OpenVG support
-if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then
+if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/openvg" "OpenVG" $L_FLAGS $I_FLAGS $l_FLAGS $CONFIG_ARG; then
if [ "$CFG_OPENVG" = "auto" ]; then
CFG_OPENVG=yes
@@ -6450,13 +6662,13 @@ if [ "$CFG_PTMALLOC" != "no" ]; then
QMakeVar add QMAKE_LFLAGS "$outpath/lib/libptmalloc3.a"
fi
-if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then
+if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/alsa "alsa" $L_FLAGS $I_FLAGS $l_FLAGS; then
CFG_ALSA=yes
else
CFG_ALSA=no
fi
-elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then
+elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
# Disabled for Symbian release
CFG_ALSA=no
fi
@@ -6477,7 +6689,7 @@ elif [ "$CFG_JAVASCRIPTCORE_JIT" = "no" ]; then
fi
if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then
- if echo "$XPLATFORM" | grep symbian > /dev/null 2>&1; then
+ if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
if "$symbiantests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/symbian/audio "audio" $L_FLAGS $I_FLAGS $l_FLAGS ; then
CFG_AUDIO_BACKEND=yes
fi
@@ -6489,7 +6701,7 @@ fi
if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then
echo "Warning: largefile support cannot be disabled for win32."
CFG_LARGEFILE="yes"
-elif [ "$CFG_LARGEFILE" != "no" ] && echo "$XPLATFORM" | grep "symbian" > /dev/null; then
+elif [ "$CFG_LARGEFILE" != "no" ] && [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
echo "Warning: largefile support cannot be enabled for symbian."
CFG_LARGEFILE="no"
fi
@@ -6499,7 +6711,12 @@ fi
#-------------------------------------------------------------------------------
### fix this: user input should be validated in a loop
-if [ "$CFG_QWS_DEPTHS" = "prompted" -a "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
+ PROMPT_FOR_DEPTHS="yes"
+else
+ PROMPT_FOR_DEPTHS="no"
+fi
+if [ "$CFG_QWS_DEPTHS" = "prompted" -a "$PROMPT_FOR_DEPTHS" = "yes" ]; then
echo
echo "Choose pixel-depths to support:"
echo
@@ -6596,8 +6813,9 @@ if [ "$PLATFORM_MAC" = "yes" ]; then
fi
fi
-# but disable Cocoa if cross-building for mingw
+# but disable Cocoa if cross-building for mingw and symbian
[ "$XPLATFORM_MINGW" = "yes" ] && CFG_MAC_COCOA="no"
+[ "$XPLATFORM_SYMBIAN" = "yes" ] && CFG_MAC_COCOA="no"
# set the global Mac deployment target. This is overridden on an arch-by-arch basis
# in some cases, see code further down
@@ -6641,6 +6859,11 @@ else
QT_CONFIG="$QT_CONFIG accessibility"
fi
+# egl stuff does not belong in lighthouse, but rather in plugins
+if [ "$PLATFORM_QPA" = "yes" ]; then
+ CFG_EGL="no"
+fi
+
# enable egl
if [ "$CFG_EGL" = "no" ]; then
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL"
@@ -6675,11 +6898,9 @@ else
fi
# Disable OpenGL on Symbian.
-case "$XPLATFORM" in
- symbian*)
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
CFG_OPENGL="no"
- ;;
-esac
+fi
# enable opengl
if [ "$CFG_OPENGL" = "no" ]; then
@@ -6689,8 +6910,12 @@ else
fi
if [ "$CFG_OPENGL" = "es1" ] || [ "$CFG_OPENGL" = "es2" ]; then
- if [ "$PLATFORM_QWS" = "yes" ]; then
- QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES"
+ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
+ if [ "$PLATFORM_QWS" = "yes" ]; then
+ QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES"
+ else
+ echo "### Q_BACKINGSTORE_SUBSURFACES disabled, re-enable once it compiles again"
+ fi
QCONFIG_FLAGS="$QCONFIG_FLAGS Q_USE_EGLWINDOWSURFACE"
fi
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES"
@@ -6732,6 +6957,19 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
QT_CONFIG="$QT_CONFIG embedded"
rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes
fi
+if [ "$PLATFORM_QPA" = "yes" ]; then
+ QMAKE_OUTDIR="${QMAKE_OUTDIR}-emb-$CFG_EMBEDDED"
+ QMAKE_CONFIG="$QMAKE_CONFIG qpa"
+ QT_CONFIG="$QT_CONFIG qpa"
+ rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes
+fi
+
+if [ "$CFG_EMBEDDED" = "nacl" ]; then
+ QMAKE_CONFIG="$QMAKE_CONFIG nacl pepper"
+ QT_CONFIG="$QT_CONFIG nacl pepper"
+ rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes
+fi
+
if [ "$XPLATFORM_MINGW" != "yes" ]; then
# Do not set this here for Windows. Let qmake do it so
# debug and release precompiled headers are kept separate.
@@ -6863,7 +7101,7 @@ else
fi
-if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then
+if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ] && [ "$XPLATFORM_SYMBIAN" != "yes" ]; then
#On Mac we implicitly link against libz, so we
#never use the 3rdparty stuff.
[ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system"
@@ -6990,7 +7228,7 @@ if [ '!' -z "$I_FLAGS" ]; then
fi
# turn off exceptions for the compilers that support it
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
COMPILER=`echo $XPLATFORM | cut -f 3- -d-`
elif [ "$XPLATFORM" != "$PLATFORM" ]; then
COMPILER=`echo $XPLATFORM | cut -f 2- -d-`
@@ -7429,7 +7667,7 @@ esac
# ipv6
#
# X11 : x11sm xinerama xcursor xfixes xrandr xrender mitshm fontconfig xkb
-# Embedded: embedded freetype
+# Embedded: embedded qpa freetype
#
ALL_OPTIONS=
BUILD_CONFIG=
@@ -7502,14 +7740,11 @@ rm -f .options
BUILD_OPTIONS="$BUILD_CONFIG $BUILD_OPTIONS"
# extract the operating system from the XPLATFORM
TARGET_OPERATING_SYSTEM=`echo $XPLATFORM | cut -f 2- -d/ | cut -f -1 -d-`
-case "$XPLATFORM" in
-symbian*)
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
QT_BUILD_KEY_SYSTEM_PART="Symbian"
- ;;
-*)
+else
QT_BUILD_KEY_SYSTEM_PART="$CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPILER"
- ;;
-esac
+fi
# when cross-compiling, don't include build-host information (build key is target specific)
QT_BUILD_KEY="$CFG_USER_BUILD_KEY $QT_BUILD_KEY_SYSTEM_PART $BUILD_OPTIONS"
@@ -7768,6 +8003,11 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
done
fi # QWS
+if [ "$PLATFORM_QPA" = "yes" ]; then
+ # Add QPA to config.h
+ QCONFIG_FLAGS="$QCONFIG_FLAGS Q_WS_QPA QT_NO_QWS_QPF QT_NO_QWS_QPF2"
+fi
+
if [ "${CFG_USE_FLOATMATH}" = "yes" ]; then
QCONFIG_FLAGS="${QCONFIG_FLAGS} QT_USE_MATH_H_FLOATS"
fi
@@ -7856,8 +8096,7 @@ fi
[ '!' -z "$AWK" ] && QCONFIG_FLAGS=`echo $QCONFIG_FLAGS | $AWK '{ gsub(" ", "\n"); print }' | sort | uniq`
QCONFIG_FLAGS=`echo $QCONFIG_FLAGS`
-if echo $XPLATFORM | grep symbian >/dev/null
-then
+if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then
# Enable Symbian DLLs and export rules.
# We cannot use Linux's default export rules since they export everything.
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_DLL"
@@ -7937,7 +8176,7 @@ else
mv "$outpath/src/corelib/global/qconfig.h.new" "$outpath/src/corelib/global/qconfig.h"
chmod -w "$outpath/src/corelib/global/qconfig.h"
for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do
- if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1 ; then
+ if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
[ -e "$conf" ] && rm -rf "$conf"
cp -a "$outpath/src/corelib/global/qconfig.h" "$conf"
elif [ '!' -f "$conf" ]; then
@@ -8014,7 +8253,7 @@ if [ -n "$QT_GCC_MAJOR_VERSION" ]; then
echo "QT_GCC_MINOR_VERSION = $QT_GCC_MINOR_VERSION" >> "$QTCONFIG.tmp"
echo "QT_GCC_PATCH_VERSION = $QT_GCC_PATCH_VERSION" >> "$QTCONFIG.tmp"
fi
-if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1; then
+if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then
echo "#Qt for symbian FPU settings" >> "$QTCONFIG.tmp"
echo "MMP_RULES += \"ARMFPU softvfp\"" >> "$QTCONFIG.tmp"
fi
@@ -8051,10 +8290,9 @@ QMAKE_LIBDIR_QT = \$\$QT_BUILD_TREE/lib
EOF
# Ensure we can link to uninistalled libraries
-if [ "$XPLATFORM_MINGW" != "yes" ] && linkerSupportsFlag -rpath-link "$outpath/lib"; then
+if [ "$XPLATFORM_MINGW" != "yes" ] && [ "$CFG_EMBEDDED" != "nacl" ] && linkerSupportsFlag -rpath-link "$outpath/lib"; then
echo "QMAKE_LFLAGS = -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib \$\$QMAKE_LFLAGS" >> "$CACHEFILE.tmp"
fi
-
if [ -n "$QT_CFLAGS_PSQL" ]; then
echo "QT_CFLAGS_PSQL = $QT_CFLAGS_PSQL" >> "$CACHEFILE.tmp"
fi
@@ -8201,7 +8439,7 @@ else
echo "Architecture: $CFG_ARCH"
fi
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
echo "Host architecture: $CFG_HOST_ARCH"
fi
@@ -8316,7 +8554,7 @@ else
fi
echo "zlib support ........... $CFG_ZLIB"
echo "Session management ..... $CFG_SM"
-if [ "$PLATFORM_QWS" = "yes" ]; then
+if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
echo "Embedded support ....... $CFG_EMBEDDED"
if [ "$CFG_QWS_FREETYPE" = "auto" ]; then
echo "Freetype2 support ...... $CFG_QWS_FREETYPE ($CFG_LIBFREETYPE)"
@@ -8602,9 +8840,9 @@ for file in .projects .projects.3; do
*winmain/winmain.pro)
[ "$XPLATFORM_MINGW" = "yes" ] || continue
SPEC=$XQMAKESPEC ;;
- *s60main/s60main.pro) if [ -z "`echo "$XPLATFORM" | grep "symbian" >/dev/null`" ]; then
- continue
- fi;;
+ *s60main/s60main.pro)
+ [ "$XPLATFORM_SYMBIAN" = "yes" ] || continue
+ ;;
*examples/activeqt/*) continue ;;
*/qmake/qmake.pro) continue ;;
*tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*|*linguist/lrelease*) SPEC=$QMAKESPEC ;;
diff --git a/demos/books/books.pro b/demos/books/books.pro
index a5e44e5..06718d1 100644
--- a/demos/books/books.pro
+++ b/demos/books/books.pro
@@ -16,8 +16,8 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
wince*: {
- CONFIG(debug, debug|release):sqlPlugins.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
- CONFIG(release, debug|release):sqlPlugins.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*[^d]4.dll
+ CONFIG(debug, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
+ CONFIG(release, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*[^d]4.dll
sqlPlugins.path = sqldrivers
DEPLOYMENT += sqlPlugins
}
diff --git a/demos/chip/view.cpp b/demos/chip/view.cpp
index 7af3074..d6a641e 100644
--- a/demos/chip/view.cpp
+++ b/demos/chip/view.cpp
@@ -48,15 +48,29 @@
#include <qmath.h>
+void GraphicsView::wheelEvent(QWheelEvent *e)
+{
+ if (e->modifiers() & Qt::ControlModifier) {
+ if (e->delta() > 0)
+ view->zoomIn(6);
+ else
+ view->zoomOut(6);
+ e->accept();
+ } else {
+ QGraphicsView::wheelEvent(e);
+ }
+}
+
View::View(const QString &name, QWidget *parent)
: QFrame(parent)
{
setFrameStyle(Sunken | StyledPanel);
- graphicsView = new QGraphicsView;
+ graphicsView = new GraphicsView(this);
graphicsView->setRenderHint(QPainter::Antialiasing, false);
graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
graphicsView->setOptimizationFlags(QGraphicsView::DontSavePainterState);
graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
+ graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
int size = style()->pixelMetric(QStyle::PM_ToolBarIconSize);
QSize iconSize(size, size);
@@ -111,6 +125,15 @@ View::View(const QString &name, QWidget *parent)
// Label layout
QHBoxLayout *labelLayout = new QHBoxLayout;
label = new QLabel(name);
+ label2 = new QLabel(tr("Pointer Mode"));
+ selectModeButton = new QToolButton;
+ selectModeButton->setText(tr("Select"));
+ selectModeButton->setCheckable(true);
+ selectModeButton->setChecked(true);
+ dragModeButton = new QToolButton;
+ dragModeButton->setText(tr("Drag"));
+ dragModeButton->setCheckable(true);
+ dragModeButton->setChecked(false);
antialiasButton = new QToolButton;
antialiasButton->setText(tr("Antialiasing"));
antialiasButton->setCheckable(true);
@@ -126,8 +149,17 @@ View::View(const QString &name, QWidget *parent)
printButton = new QToolButton;
printButton->setIcon(QIcon(QPixmap(":/fileprint.png")));
+ QButtonGroup *pointerModeGroup = new QButtonGroup;
+ pointerModeGroup->setExclusive(true);
+ pointerModeGroup->addButton(selectModeButton);
+ pointerModeGroup->addButton(dragModeButton);
+
labelLayout->addWidget(label);
labelLayout->addStretch();
+ labelLayout->addWidget(label2);
+ labelLayout->addWidget(selectModeButton);
+ labelLayout->addWidget(dragModeButton);
+ labelLayout->addStretch();
labelLayout->addWidget(antialiasButton);
labelLayout->addWidget(openGlButton);
labelLayout->addWidget(printButton);
@@ -145,6 +177,8 @@ View::View(const QString &name, QWidget *parent)
connect(rotateSlider, SIGNAL(valueChanged(int)), this, SLOT(setupMatrix()));
connect(graphicsView->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(setResetButtonEnabled()));
connect(graphicsView->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(setResetButtonEnabled()));
+ connect(selectModeButton, SIGNAL(toggled(bool)), this, SLOT(togglePointerMode()));
+ connect(dragModeButton, SIGNAL(toggled(bool)), this, SLOT(togglePointerMode()));
connect(antialiasButton, SIGNAL(toggled(bool)), this, SLOT(toggleAntialiasing()));
connect(openGlButton, SIGNAL(toggled(bool)), this, SLOT(toggleOpenGL()));
connect(rotateLeftIcon, SIGNAL(clicked()), this, SLOT(rotateLeft()));
@@ -158,7 +192,7 @@ View::View(const QString &name, QWidget *parent)
QGraphicsView *View::view() const
{
- return graphicsView;
+ return static_cast<QGraphicsView *>(graphicsView);
}
void View::resetView()
@@ -188,6 +222,14 @@ void View::setupMatrix()
setResetButtonEnabled();
}
+void View::togglePointerMode()
+{
+ graphicsView->setDragMode(selectModeButton->isChecked()
+ ? QGraphicsView::RubberBandDrag
+ : QGraphicsView::ScrollHandDrag);
+ graphicsView->setInteractive(selectModeButton->isChecked());
+}
+
void View::toggleOpenGL()
{
#ifndef QT_NO_OPENGL
@@ -212,14 +254,14 @@ void View::print()
#endif
}
-void View::zoomIn()
+void View::zoomIn(int level)
{
- zoomSlider->setValue(zoomSlider->value() + 1);
+ zoomSlider->setValue(zoomSlider->value() + level);
}
-void View::zoomOut()
+void View::zoomOut(int level)
{
- zoomSlider->setValue(zoomSlider->value() - 1);
+ zoomSlider->setValue(zoomSlider->value() - level);
}
void View::rotateLeft()
diff --git a/demos/chip/view.h b/demos/chip/view.h
index 8047b8b..67c7675 100644
--- a/demos/chip/view.h
+++ b/demos/chip/view.h
@@ -43,12 +43,27 @@
#define VIEW_H
#include <QFrame>
+#include <QGraphicsView>
-QT_FORWARD_DECLARE_CLASS(QGraphicsView)
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QSlider)
QT_FORWARD_DECLARE_CLASS(QToolButton)
+class View;
+
+class GraphicsView : public QGraphicsView
+{
+ Q_OBJECT
+public:
+ GraphicsView(View *v) : QGraphicsView(), view(v) { }
+
+protected:
+ void wheelEvent(QWheelEvent *);
+
+private:
+ View *view;
+};
+
class View : public QFrame
{
Q_OBJECT
@@ -57,22 +72,27 @@ public:
QGraphicsView *view() const;
+public slots:
+ void zoomIn(int level = 1);
+ void zoomOut(int level = 1);
+
private slots:
void resetView();
void setResetButtonEnabled();
void setupMatrix();
+ void togglePointerMode();
void toggleOpenGL();
void toggleAntialiasing();
void print();
-
- void zoomIn();
- void zoomOut();
void rotateLeft();
void rotateRight();
-
+
private:
- QGraphicsView *graphicsView;
+ GraphicsView *graphicsView;
QLabel *label;
+ QLabel *label2;
+ QToolButton *selectModeButton;
+ QToolButton *dragModeButton;
QToolButton *openGlButton;
QToolButton *antialiasButton;
QToolButton *printButton;
diff --git a/demos/declarative/minehunt/minehunt.cpp b/demos/declarative/minehunt/minehunt.cpp
index 9c82f30..aaaaaac 100644
--- a/demos/declarative/minehunt/minehunt.cpp
+++ b/demos/declarative/minehunt/minehunt.cpp
@@ -195,6 +195,7 @@ bool MinehuntGame::flip(int row, int col)
won = false;
hasWonChanged();
setPlaying(false);
+ return true;
}
remaining--;
@@ -202,6 +203,7 @@ bool MinehuntGame::flip(int row, int col)
won = true;
hasWonChanged();
setPlaying(false);
+ return true;
}
return true;
}
@@ -209,7 +211,7 @@ bool MinehuntGame::flip(int row, int col)
bool MinehuntGame::flag(int row, int col)
{
TileData *t = tile(row, col);
- if(!t)
+ if(!t || !playing || t->flipped())
return false;
t->setHasFlag(!t->hasFlag());
diff --git a/demos/declarative/minehunt/minehunt.pro b/demos/declarative/minehunt/minehunt.pro
index 4cf1441..d23bb05 100644
--- a/demos/declarative/minehunt/minehunt.pro
+++ b/demos/declarative/minehunt/minehunt.pro
@@ -1,7 +1,6 @@
TEMPLATE = app
TARGET = minehunt
QT += declarative
-CONFIG += qt plugin
# Input
HEADERS += minehunt.h
@@ -18,7 +17,7 @@ symbian:{
TARGET.EPOCALLOWDLLDATA = 1
TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- qmlminehuntfiles.sources = MinehuntCore minehunt.qml
+ qmlminehuntfiles.files = MinehuntCore minehunt.qml
DEPLOYMENT += qmlminehuntfiles
}
- \ No newline at end of file
+
diff --git a/demos/declarative/samegame/SamegameCore/Button.qml b/demos/declarative/samegame/SamegameCore/Button.qml
index 7fb7b65..140b196 100644
--- a/demos/declarative/samegame/SamegameCore/Button.qml
+++ b/demos/declarative/samegame/SamegameCore/Button.qml
@@ -48,7 +48,7 @@ Rectangle {
signal clicked
- width: buttonLabel.width + 20; height: buttonLabel.height + 6
+ width: buttonLabel.width + 20; height: buttonLabel.height + 20
smooth: true
border { width: 1; color: Qt.darker(activePalette.button) }
radius: 8
@@ -70,6 +70,6 @@ Rectangle {
MouseArea { id: mouseArea; anchors.fill: parent; onClicked: container.clicked() }
Text {
- id: buttonLabel; text: container.text; anchors.centerIn: container; color: activePalette.buttonText
+ id: buttonLabel; text: container.text; anchors.centerIn: container; color: activePalette.buttonText; font.pixelSize: 24
}
}
diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js
index 9266767..e618a10 100755
--- a/demos/declarative/samegame/SamegameCore/samegame.js
+++ b/demos/declarative/samegame/SamegameCore/samegame.js
@@ -9,12 +9,14 @@ var scoresURL = "";
var gameDuration;
var component = Qt.createComponent(blockSrc);
-//Index function used instead of a 2D array
-function index(column,row) {
- return column + (row * maxColumn);
+// Index function used instead of a 2D array
+function index(column, row)
+{
+ return column + row * maxColumn;
}
-function timeStr(msecs) {
+function timeStr(msecs)
+{
var secs = Math.floor(msecs/1000);
var m = Math.floor(secs/60);
var ret = "" + m + "m " + (secs%60) + "s";
@@ -23,47 +25,48 @@ function timeStr(msecs) {
function startNewGame()
{
- //Delete blocks from previous game
- for(var i = 0; i<maxIndex; i++){
- if(board[i] != null)
+ // Delete blocks from previous game
+ for (var i = 0; i < maxIndex; i++) {
+ if (board[i] != null)
board[i].destroy();
}
- //Calculate board size
+ // Calculate board size
maxColumn = Math.floor(gameCanvas.width/gameCanvas.blockSize);
maxRow = Math.floor(gameCanvas.height/gameCanvas.blockSize);
- maxIndex = maxRow*maxColumn;
+ maxIndex = maxRow * maxColumn;
- //Close dialogs
+ // Close dialogs
nameInputDialog.forceClose();
dialog.forceClose();
- //Initialize Board
+ // Initialize Board
board = new Array(maxIndex);
gameCanvas.score = 0;
- for(var column=0; column<maxColumn; column++){
- for(var row=0; row<maxRow; row++){
- board[index(column,row)] = null;
- createBlock(column,row);
+ for (var column = 0; column < maxColumn; column++) {
+ for (var row = 0; row < maxRow; row++) {
+ board[index(column, row)] = null;
+ createBlock(column, row);
}
}
gameDuration = new Date();
}
-var fillFound;//Set after a floodFill call to the number of blocks found
-var floodBoard;//Set to 1 if the floodFill reaches off that node
-//NOTE: Be careful with vars named x,y, as the calling object's x,y are still in scope
+var fillFound; // Set after a floodFill call to the number of blocks found
+var floodBoard; // Set to 1 if the floodFill reaches off that node
+
+// NOTE: Be careful with vars named x,y, as the calling object's x,y are still in scope
function handleClick(x,y)
{
var column = Math.floor(x/gameCanvas.blockSize);
var row = Math.floor(y/gameCanvas.blockSize);
- if(column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
return;
- if(board[index(column, row)] == null)
+ if (board[index(column, row)] == null)
return;
- //If it's a valid block, remove it and all connected (does nothing if it's not connected)
+ // If it's a valid block, remove it and all connected (does nothing if it's not connected)
floodFill(column,row, -1);
- if(fillFound <= 0)
+ if (fillFound <= 0)
return;
gameCanvas.score += (fillFound - 1) * (fillFound - 1);
shuffleDown();
@@ -72,65 +75,65 @@ function handleClick(x,y)
function floodFill(column,row,type)
{
- if(board[index(column, row)] == null)
+ if (board[index(column, row)] == null)
return;
var first = false;
- if(type == -1){
+ if (type == -1) {
first = true;
type = board[index(column,row)].type;
-
- //Flood fill initialization
+
+ // Flood fill initialization
fillFound = 0;
floodBoard = new Array(maxIndex);
}
- if(column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
return;
- if(floodBoard[index(column, row)] == 1 || (!first && type != board[index(column,row)].type))
+ if (floodBoard[index(column, row)] == 1 || (!first && type != board[index(column, row)].type))
return;
floodBoard[index(column, row)] = 1;
- floodFill(column+1,row,type);
- floodFill(column-1,row,type);
- floodFill(column,row+1,type);
- floodFill(column,row-1,type);
- if(first==true && fillFound == 0)
- return;//Can't remove single blocks
- board[index(column,row)].dying = true;
- board[index(column,row)] = null;
+ floodFill(column + 1, row, type);
+ floodFill(column - 1, row, type);
+ floodFill(column, row + 1, type);
+ floodFill(column, row - 1, type);
+ if (first == true && fillFound == 0)
+ return; // Can't remove single blocks
+ board[index(column, row)].dying = true;
+ board[index(column, row)] = null;
fillFound += 1;
}
function shuffleDown()
{
- //Fall down
- for(var column=0; column<maxColumn; column++){
+ // Fall down
+ for (var column = 0; column < maxColumn; column++) {
var fallDist = 0;
- for(var row=maxRow-1; row>=0; row--){
- if(board[index(column,row)] == null){
+ for (var row = maxRow - 1; row >= 0; row--) {
+ if (board[index(column,row)] == null) {
fallDist += 1;
- }else{
- if(fallDist > 0){
- var obj = board[index(column,row)];
- obj.y = (row+fallDist) * gameCanvas.blockSize;
- board[index(column,row+fallDist)] = obj;
- board[index(column,row)] = null;
+ } else {
+ if (fallDist > 0) {
+ var obj = board[index(column, row)];
+ obj.y = (row + fallDist) * gameCanvas.blockSize;
+ board[index(column, row + fallDist)] = obj;
+ board[index(column, row)] = null;
}
}
}
}
- //Fall to the left
+ // Fall to the left
fallDist = 0;
- for(column=0; column<maxColumn; column++){
- if(board[index(column, maxRow - 1)] == null){
+ for (column = 0; column < maxColumn; column++) {
+ if (board[index(column, maxRow - 1)] == null) {
fallDist += 1;
- }else{
- if(fallDist > 0){
- for(row=0; row<maxRow; row++){
- obj = board[index(column,row)];
- if(obj == null)
+ } else {
+ if (fallDist > 0) {
+ for (row = 0; row < maxRow; row++) {
+ obj = board[index(column, row)];
+ if (obj == null)
continue;
- obj.x = (column-fallDist) * gameCanvas.blockSize;
- board[index(column-fallDist,row)] = obj;
- board[index(column,row)] = null;
+ obj.x = (column - fallDist) * gameCanvas.blockSize;
+ board[index(column - fallDist,row)] = obj;
+ board[index(column, row)] = null;
}
}
}
@@ -139,58 +142,59 @@ function shuffleDown()
function victoryCheck()
{
- //awards bonuses for no blocks left
+ // Awards bonuses for no blocks left
var deservesBonus = true;
- for(var column=maxColumn-1; column>=0; column--)
- if(board[index(column, maxRow - 1)] != null)
+ for (var column = maxColumn - 1; column >= 0; column--)
+ if (board[index(column, maxRow - 1)] != null)
deservesBonus = false;
- if(deservesBonus)
+ if (deservesBonus)
gameCanvas.score += 500;
- //Checks for game over
- if(deservesBonus || !(floodMoveCheck(0,maxRow-1, -1))){
+ // Checks for game over
+ if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) {
gameDuration = new Date() - gameDuration;
nameInputDialog.show("You won! Please enter your name: ");
nameInputDialog.initialWidth = nameInputDialog.text.width + 20;
- if(nameInputDialog.name == "")
+ if (nameInputDialog.name == "")
nameInputDialog.width = nameInputDialog.initialWidth;
- nameInputDialog.text.opacity = 0;//Just a spacer
+ nameInputDialog.text.opacity = 0; // Just a spacer
}
}
-//only floods up and right, to see if it can find adjacent same-typed blocks
+// Only floods up and right, to see if it can find adjacent same-typed blocks
function floodMoveCheck(column, row, type)
{
- if(column >= maxColumn || column < 0 || row >= maxRow || row < 0)
+ if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
return false;
- if(board[index(column, row)] == null)
+ if (board[index(column, row)] == null)
return false;
var myType = board[index(column, row)].type;
- if(type == myType)
+ if (type == myType)
return true;
return floodMoveCheck(column + 1, row, myType) ||
- floodMoveCheck(column, row - 1, board[index(column,row)].type);
+ floodMoveCheck(column, row - 1, board[index(column, row)].type);
}
-function createBlock(column,row){
+function createBlock(column,row)
+{
// Note that we don't wait for the component to become ready. This will
// only work if the block QML is a local file. Otherwise the component will
// not be ready immediately. There is a statusChanged signal on the
// component you could use if you want to wait to load remote files.
- if(component.status == Component.Ready){
+ if (component.status == Component.Ready) {
var dynamicObject = component.createObject(gameCanvas);
- if(dynamicObject == null){
+ if (dynamicObject == null) {
console.log("error creating block");
console.log(component.errorString());
return false;
}
dynamicObject.type = Math.floor(Math.random() * 3);
- dynamicObject.x = column*gameCanvas.blockSize;
- dynamicObject.y = row*gameCanvas.blockSize;
+ dynamicObject.x = column * gameCanvas.blockSize;
+ dynamicObject.y = row * gameCanvas.blockSize;
dynamicObject.width = gameCanvas.blockSize;
dynamicObject.height = gameCanvas.blockSize;
dynamicObject.spawned = true;
- board[index(column,row)] = dynamicObject;
- }else{
+ board[index(column, row)] = dynamicObject;
+ } else {
console.log("error loading block component");
console.log(component.errorString());
return false;
@@ -198,23 +202,35 @@ function createBlock(column,row){
return true;
}
-function saveHighScore(name) {
- if(scoresURL!="")
+function saveHighScore(name)
+{
+ if (scoresURL != "")
sendHighScore(name);
- //OfflineStorage
- var db = openDatabaseSync("SameGameScores", "1.0", "Local SameGame High Scores",100);
+ // Offline storage
+ var db = openDatabaseSync(
+ "SameGameScores",
+ "1.0",
+ "Local SameGame High Scores",
+ 100
+ );
var dataStr = "INSERT INTO Scores VALUES(?, ?, ?, ?)";
- var data = [name, gameCanvas.score, maxColumn+"x"+maxRow ,Math.floor(gameDuration/1000)];
+ var data = [
+ name,
+ gameCanvas.score,
+ maxColumn + "x" + maxRow,
+ Math.floor(gameDuration / 1000)
+ ];
db.transaction(
function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)');
tx.executeSql(dataStr, data);
- //Only show results for the current grid size
- var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "'+maxColumn+"x"+maxRow+'" ORDER BY score desc LIMIT 10');
+ // Only show results for the current grid size
+ var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "'
+ + maxColumn + "x" + maxRow + '" ORDER BY score desc LIMIT 10');
var r = "\nHIGH SCORES for this grid size\n\n"
- for(var i = 0; i < rs.rows.length; i++){
- r += (i+1)+". " + rs.rows.item(i).name +' got '
+ for (var i = 0; i < rs.rows.length; i++) {
+ r += (i+1) + ". " + rs.rows.item(i).name + ' got '
+ rs.rows.item(i).score + ' points in '
+ rs.rows.item(i).time + ' seconds.\n';
}
@@ -223,13 +239,15 @@ function saveHighScore(name) {
);
}
-function sendHighScore(name) {
+function sendHighScore(name)
+{
var postman = new XMLHttpRequest()
- var postData = "name="+name+"&score="+gameCanvas.score
- +"&gridSize="+maxColumn+"x"+maxRow +"&time="+Math.floor(gameDuration/1000);
+ var postData = "name=" + name + "&score=" + gameCanvas.score
+ + "&gridSize=" + maxColumn + "x" + maxRow
+ + "&time=" + Math.floor(gameDuration / 1000);
postman.open("POST", scoresURL, true);
postman.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- postman.onreadystatechange = function() {
+ postman.onreadystatechange = function() {
if (postman.readyState == postman.DONE) {
dialog.show("Your score has been uploaded.");
}
diff --git a/demos/declarative/samegame/samegame.qml b/demos/declarative/samegame/samegame.qml
index f66c40e..ab49c04 100644
--- a/demos/declarative/samegame/samegame.qml
+++ b/demos/declarative/samegame/samegame.qml
@@ -92,9 +92,7 @@ Rectangle {
enabled: nameInputDialog.initialWidth != 0
}
- onOpened: nameInputText.focus = true;
onClosed: {
- nameInputText.focus = false;
if (nameInputText.text != "")
Logic.saveHighScore(nameInputText.text);
}
@@ -116,7 +114,7 @@ Rectangle {
TextInput {
id: nameInputText
anchors { verticalCenter: parent.verticalCenter; left: dialogText.right }
- focus: false
+ focus: visible
autoScroll: false
maximumLength: 24
onTextChanged: {
@@ -133,7 +131,7 @@ Rectangle {
Rectangle {
id: toolBar
- width: parent.width; height: 32
+ width: parent.width; height: 58
color: activePalette.window
anchors.bottom: screen.bottom
@@ -156,6 +154,7 @@ Rectangle {
anchors { right: parent.right; rightMargin: 3; verticalCenter: parent.verticalCenter }
text: "Score: " + gameCanvas.score
font.bold: true
+ font.pixelSize: 24
color: activePalette.windowText
}
}
diff --git a/demos/declarative/snake/content/pics/pause.png b/demos/declarative/snake/content/pics/pause.png
new file mode 100644
index 0000000..056d97d
--- /dev/null
+++ b/demos/declarative/snake/content/pics/pause.png
Binary files differ
diff --git a/demos/declarative/snake/content/snake.js b/demos/declarative/snake/content/snake.js
index 2a99aa8..837b82a 100644
--- a/demos/declarative/snake/content/snake.js
+++ b/demos/declarative/snake/content/snake.js
@@ -39,7 +39,7 @@ function startNewGame()
return;
}
- if (heartbeat.running) {
+ if (activeGame) {
endGame();
startNewGameTimer.running = true;
return;
@@ -93,7 +93,7 @@ function startNewGame()
function endGame()
{
- heartbeat.running = false;
+ activeGame = false;
for(var i in snake)
snake[i].dying = true;
if (cookie) {
diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml
index 5cbf1be..585c0b2 100644
--- a/demos/declarative/snake/snake.qml
+++ b/demos/declarative/snake/snake.qml
@@ -47,6 +47,7 @@ Rectangle {
id: screen;
SystemPalette { id: activePalette }
color: activePalette.window
+ property bool activeGame: false
property int gridSize : 34
property int margin: 4
@@ -75,6 +76,7 @@ Rectangle {
Timer {
id: heartbeat;
interval: heartbeatInterval;
+ running: activeGame && runtime.isActiveWindow
repeat: true
onTriggered: { Logic.move() }
}
@@ -94,7 +96,16 @@ Rectangle {
Timer {
id: startHeartbeatTimer;
interval: 1000 ;
- onTriggered: { state = "running"; heartbeat.running = true;}
+ onTriggered: { state = "running"; activeGame = true; }
+ }
+
+ Image{
+ id: pauseDialog
+ z: 1
+ source: "content/pics/pause.png"
+ anchors.centerIn: parent;
+ //opacity is deliberately not animated
+ opacity: activeGame && !runtime.isActiveWindow
}
Image {
diff --git a/demos/declarative/twitter/twitter.qml b/demos/declarative/twitter/twitter.qml
index 4495523..74bab37 100644
--- a/demos/declarative/twitter/twitter.qml
+++ b/demos/declarative/twitter/twitter.qml
@@ -78,7 +78,7 @@ Item {
id: views
x: 2; width: parent.width - 4
y:60 //Below the title bars
- height: 380
+ height: parent.height - 100
Text {
id:title
diff --git a/demos/demos.pro b/demos/demos.pro
index fdc1e4c..362a3bc 100644
--- a/demos/demos.pro
+++ b/demos/demos.pro
@@ -44,7 +44,7 @@ contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles1):!contains(QT_CONFIG,
SUBDIRS += demos_boxes
}
-mac*: SUBDIRS += demos_macmainwindow
+mac* && !qpa: SUBDIRS += demos_macmainwindow
wince*|symbian|embedded|x11: SUBDIRS += demos_embedded
!contains(QT_EDITION, Console):!cross_compile:!embedded:!wince*:SUBDIRS += demos_arthurplugin
diff --git a/demos/embedded/desktopservices/desktopservices.pro b/demos/embedded/desktopservices/desktopservices.pro
index 94ddedd..e66db1c 100644
--- a/demos/embedded/desktopservices/desktopservices.pro
+++ b/demos/embedded/desktopservices/desktopservices.pro
@@ -7,8 +7,8 @@ SOURCES += desktopwidget.cpp contenttab.cpp linktab.cpp main.cpp
RESOURCES += desktopservices.qrc
-music.sources = data/*.mp3 data/*.wav
-image.sources = data/*.png
+music.files = data/*.mp3 data/*.wav
+image.files = data/*.png
target.path = $$[QT_INSTALL_DEMOS]/embedded/desktopservices
sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro
index ca74c38..0799ed9 100644
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro
@@ -33,7 +33,7 @@ wince*{
BUILD_DIR = debug
}
- executables.sources = \
+ executables.files = \
$$QT_BUILD_TREE/demos/embedded/embeddedsvgviewer/$${BUILD_DIR}/embeddedsvgviewer.exe \
$$QT_BUILD_TREE/demos/embedded/styledemo/$${BUILD_DIR}/styledemo.exe \
$$QT_BUILD_TREE/demos/deform/$${BUILD_DIR}/deform.exe \
@@ -45,10 +45,10 @@ wince*{
executables.path = .
- files.sources = $$PWD/screenshots $$PWD/slides $$PWD/../embeddedsvgviewer/shapes.svg
+ files.files = $$PWD/screenshots $$PWD/slides $$PWD/../embeddedsvgviewer/shapes.svg
files.path = .
- config.sources = $$PWD/config_wince/config.xml
+ config.files = $$PWD/config_wince/config.xml
config.path = .
DEPLOYMENT += config files executables
@@ -79,7 +79,7 @@ symbian {
}
}
- executables.sources = \
+ executables.files = \
$$QT_BUILD_TREE/demos/embedded/styledemo/styledemo.exe \
$$QT_BUILD_TREE/demos/deform/deform.exe \
$$QT_BUILD_TREE/demos/pathstroke/pathstroke.exe \
@@ -97,7 +97,7 @@ symbian {
executables.path = /sys/bin
- reg_resource.sources = \
+ reg_resource.files = \
$$regResourceDir(demos/embedded/styledemo/styledemo_reg.rsc) \
$$regResourceDir(demos/deform/deform_reg.rsc) \
$$regResourceDir(demos/pathstroke/pathstroke_reg.rsc) \
@@ -114,17 +114,17 @@ symbian {
$$regResourceDir(demos/embedded/flightinfo/flightinfo_reg.rsc)
contains(QT_CONFIG, phonon) {
- reg_resource.sources += $$regResourceDir(demos/qmediaplayer/qmediaplayer_reg.rsc)
+ reg_resource.files += $$regResourceDir(demos/qmediaplayer/qmediaplayer_reg.rsc)
}
contains(QT_CONFIG, multimedia) {
- reg_resource.sources += $$regResourceDir(demos/spectrum/app/spectrum_reg.rsc)
+ reg_resource.files += $$regResourceDir(demos/spectrum/app/spectrum_reg.rsc)
}
reg_resource.path = $$REG_RESOURCE_IMPORT_DIR
- resource.sources = \
+ resource.files = \
$$appResourceDir(demos/embedded/styledemo/styledemo.rsc) \
$$appResourceDir(demos/deform/deform.rsc) \
$$appResourceDir(demos/pathstroke/pathstroke.rsc) \
@@ -143,7 +143,7 @@ symbian {
resource.path = $$APP_RESOURCE_DIR
- mifs.sources = \
+ mifs.files = \
$$appResourceDir(demos/embedded/fluidlauncher/fluidlauncher.mif) \
$$appResourceDir(demos/embedded/styledemo/styledemo.mif) \
$$appResourceDir(demos/deform/deform.mif) \
@@ -162,28 +162,28 @@ symbian {
mifs.path = $$APP_RESOURCE_DIR
contains(QT_CONFIG, svg) {
- executables.sources += \
+ executables.files += \
$$QT_BUILD_TREE/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.exe \
$$QT_BUILD_TREE/demos/embedded/weatherinfo/weatherinfo.exe
- reg_resource.sources += \
+ reg_resource.files += \
$$regResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer_reg.rsc) \
$$regResourceDir(demos/embedded/weatherinfo/weatherinfo_reg.rsc)
- resource.sources += \
+ resource.files += \
$$appResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer.rsc) \
$$appResourceDir(demos/embedded/weatherinfo/weatherinfo.rsc)
- mifs.sources += \
+ mifs.files += \
$$appResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer.mif) \
$$appResourceDir(demos/embedded/weatherinfo/weatherinfo.mif)
}
contains(QT_CONFIG, webkit) {
- executables.sources += $$QT_BUILD_TREE/demos/embedded/anomaly/anomaly.exe
- reg_resource.sources += $$regResourceDir(demos/embedded/anomaly/anomaly_reg.rsc)
- resource.sources += $$appResourceDir(demos/embedded/anomaly/anomaly.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/embedded/anomaly/anomaly.exe
+ reg_resource.files += $$regResourceDir(demos/embedded/anomaly/anomaly_reg.rsc)
+ resource.files += $$appResourceDir(demos/embedded/anomaly/anomaly.rsc)
+ mifs.files += \
$$appResourceDir(demos/embedded/anomaly/anomaly.mif)
isEmpty(QT_LIBINFIX) {
@@ -195,61 +195,61 @@ symbian {
}
contains(QT_CONFIG, phonon) {
- executables.sources += $$QT_BUILD_TREE/demos/qmediaplayer/qmediaplayer.exe
- resource.sources += $$appResourceDir(demos/qmediaplayer/qmediaplayer.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/qmediaplayer/qmediaplayer.exe
+ resource.files += $$appResourceDir(demos/qmediaplayer/qmediaplayer.rsc)
+ mifs.files += \
$$appResourceDir(demos/qmediaplayer/qmediaplayer.mif)
}
contains(QT_CONFIG, multimedia) {
- executables.sources += $$QT_BUILD_TREE/demos/spectrum/app/spectrum.exe
- executables.sources += $$QT_BUILD_TREE/demos/spectrum/3rdparty/fftreal/fftreal.dll
- resource.sources += $$appResourceDir(demos/spectrum/app/spectrum.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/spectrum/app/spectrum.exe
+ executables.files += $$QT_BUILD_TREE/demos/spectrum/3rdparty/fftreal/fftreal.dll
+ resource.files += $$appResourceDir(demos/spectrum/app/spectrum.rsc)
+ mifs.files += \
$$appResourceDir(demos/spectrum/app/spectrum.mif)
}
contains(QT_CONFIG, script) {
- executables.sources += $$QT_BUILD_TREE/examples/script/context2d/context2d.exe
- reg_resource.sources += $$regResourceDir(examples/script/context2d/context2d_reg.rsc)
- resource.sources += $$appResourceDir(examples/script/context2d/context2d.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/examples/script/context2d/context2d.exe
+ reg_resource.files += $$regResourceDir(examples/script/context2d/context2d_reg.rsc)
+ resource.files += $$appResourceDir(examples/script/context2d/context2d.rsc)
+ mifs.files += \
$$appResourceDir(examples/script/context2d/context2d.mif)
}
qmldemos = qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter
contains(QT_CONFIG, declarative) {
for(qmldemo, qmldemos) {
- executables.sources += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe
- reg_resource.sources += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc)
- resource.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc)
- mifs.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif)
+ executables.files += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe
+ reg_resource.files += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc)
+ resource.files += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc)
+ mifs.files += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif)
}
}
- files.sources = $$PWD/screenshots $$PWD/slides
+ files.files = $$PWD/screenshots $$PWD/slides
files.path = .
- config.sources = $$PWD/config_s60/config.xml
+ config.files = $$PWD/config_s60/config.xml
config.path = .
- viewerimages.sources = $$PWD/../embeddedsvgviewer/shapes.svg
+ viewerimages.files = $$PWD/../embeddedsvgviewer/shapes.svg
viewerimages.path = /data/images/qt/demos/embeddedsvgviewer
# demos/mediaplayer make also use of these files.
- desktopservices_music.sources = \
+ desktopservices_music.files = \
$$PWD/../desktopservices/data/*.mp3 \
$$PWD/../desktopservices/data/*.wav
desktopservices_music.path = /data/sounds
- desktopservices_images.sources = $$PWD/../desktopservices/data/*.png
+ desktopservices_images.files = $$PWD/../desktopservices/data/*.png
desktopservices_images.path = /data/images
- saxbookmarks.sources = $$PWD/../../../examples/xml/saxbookmarks/frank.xbel
- saxbookmarks.sources += $$PWD/../../../examples/xml/saxbookmarks/jennifer.xbel
+ saxbookmarks.files = $$PWD/../../../examples/xml/saxbookmarks/frank.xbel
+ saxbookmarks.files += $$PWD/../../../examples/xml/saxbookmarks/jennifer.xbel
saxbookmarks.path = /data/qt/saxbookmarks
- fluidbackup.sources = backup_registration.xml
+ fluidbackup.files = backup_registration.xml
fluidbackup.path = /private/$$replace(TARGET.UID3, 0x,)
DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \
diff --git a/demos/embedded/qmlcalculator/deployment.pri b/demos/embedded/qmlcalculator/deployment.pri
index a31303d..a97498e 100644
--- a/demos/embedded/qmlcalculator/deployment.pri
+++ b/demos/embedded/qmlcalculator/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlcalculator_uid3 = A000E3FB
qmlcalculator_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlcalculator_uid3
}
-qmlcalculator_files.sources = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core
+qmlcalculator_files.files = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core
DEPLOYMENT += qmlcalculator_files
diff --git a/demos/embedded/qmlclocks/deployment.pri b/demos/embedded/qmlclocks/deployment.pri
index 0946733..6c6704c 100644
--- a/demos/embedded/qmlclocks/deployment.pri
+++ b/demos/embedded/qmlclocks/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlclocks_uid3 = A000E3FC
qmlclocks_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlclocks_uid3
}
-qmlclocks_files.sources = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content
+qmlclocks_files.files = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content
DEPLOYMENT += qmlclocks_files
diff --git a/demos/embedded/qmldialcontrol/deployment.pri b/demos/embedded/qmldialcontrol/deployment.pri
index e0e72e6..a978443 100644
--- a/demos/embedded/qmldialcontrol/deployment.pri
+++ b/demos/embedded/qmldialcontrol/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmldialcontrol_uid3 = A000E3FD
qmldialcontrol_files.path = $$APP_PRIVATE_DIR_BASE/$$qmldialcontrol_uid3
}
-qmldialcontrol_files.sources = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content
+qmldialcontrol_files.files = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content
DEPLOYMENT += qmldialcontrol_files
diff --git a/demos/embedded/qmleasing/deployment.pri b/demos/embedded/qmleasing/deployment.pri
index d3621cb..946fcd9 100644
--- a/demos/embedded/qmleasing/deployment.pri
+++ b/demos/embedded/qmleasing/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmleasing_uid3 = A000E3FE
qmleasing_files.path = $$APP_PRIVATE_DIR_BASE/$$qmleasing_uid3
}
-qmleasing_files.sources = $$qmleasing_src/easing.qml $$qmleasing_src/content
+qmleasing_files.files = $$qmleasing_src/easing.qml $$qmleasing_src/content
DEPLOYMENT += qmleasing_files
diff --git a/demos/embedded/qmlflickr/deployment.pri b/demos/embedded/qmlflickr/deployment.pri
index b508292..a38dc95 100644
--- a/demos/embedded/qmlflickr/deployment.pri
+++ b/demos/embedded/qmlflickr/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlflickr_uid3 = A000E3FF
qmlflickr_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlflickr_uid3
}
-qmlflickr_files.sources = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile
+qmlflickr_files.files = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile
DEPLOYMENT += qmlflickr_files
diff --git a/demos/embedded/qmlphotoviewer/deployment.pri b/demos/embedded/qmlphotoviewer/deployment.pri
index 35937a8..23882e3 100644
--- a/demos/embedded/qmlphotoviewer/deployment.pri
+++ b/demos/embedded/qmlphotoviewer/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlphotoviewer_uid3 = A000E400
qmlphotoviewer_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlphotoviewer_uid3
}
-qmlphotoviewer_files.sources = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore
+qmlphotoviewer_files.files = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore
DEPLOYMENT += qmlphotoviewer_files
diff --git a/demos/embedded/qmltwitter/deployment.pri b/demos/embedded/qmltwitter/deployment.pri
index 4404e33..3edc0e5 100644
--- a/demos/embedded/qmltwitter/deployment.pri
+++ b/demos/embedded/qmltwitter/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmltwitter_uid3 = A000E401
qmltwitter_files.path = $$APP_PRIVATE_DIR_BASE/$$qmltwitter_uid3
}
-qmltwitter_files.sources = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore
+qmltwitter_files.files = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore
DEPLOYMENT += qmltwitter_files
diff --git a/demos/qmediaplayer/main.cpp b/demos/qmediaplayer/main.cpp
index 02c579b..9f15e43 100644
--- a/demos/qmediaplayer/main.cpp
+++ b/demos/qmediaplayer/main.cpp
@@ -42,6 +42,8 @@
#include <QtGui>
#include "mediaplayer.h"
+const qreal DefaultVolume = -1.0;
+
int main (int argc, char *argv[])
{
Q_INIT_RESOURCE(mediaplayer);
@@ -50,36 +52,38 @@ int main (int argc, char *argv[])
app.setOrganizationName("Qt");
app.setQuitOnLastWindowClosed(true);
- bool hasSmallScreen =
+ QString fileName;
+ qreal volume = DefaultVolume;
+ bool smallScreen = false;
#ifdef Q_OS_SYMBIAN
- /* On Symbian, we always want fullscreen. One reason is that it's not
- * possible to launch any demos from the fluidlauncher due to a
- * limitation in the emulator. */
- true
-#else
- false
+ smallScreen = true;
#endif
- ;
-
- QString fileString;
- const QStringList args(app.arguments());
- /* We have a minor problem here, we accept two arguments, both are
- * optional:
- * - A file name
- * - the option "-small-screen", so let's try to cope with that.
- */
- for (int i = 0; i < args.count(); ++i) {
- const QString &at = args.at(i);
- if (at == QLatin1String("-small-screen"))
- hasSmallScreen = true;
- else if (i > 0) // We don't want the app name.
- fileString = at;
+ QStringList args(app.arguments());
+ args.removeFirst(); // remove name of executable
+ while (!args.empty()) {
+ const QString &arg = args.first();
+ if (QLatin1String("-small-screen") == arg || QLatin1String("--small-screen") == arg) {
+ smallScreen = true;
+ } else if (QLatin1String("-volume") == arg || QLatin1String("--volume") == arg) {
+ if (!args.empty()) {
+ args.removeFirst();
+ volume = qMax(qMin(args.first().toFloat(), float(1.0)), float(0.0));
+ }
+ } else if (fileName.isNull()) {
+ fileName = arg;
+ }
+ args.removeFirst();
}
- MediaPlayer player(fileString, hasSmallScreen);
+ MediaPlayer player;
+ player.setSmallScreen(smallScreen);
+ if (DefaultVolume != volume)
+ player.setVolume(volume);
+ if (!fileName.isNull())
+ player.setFile(fileName);
- if (hasSmallScreen)
+ if (smallScreen)
player.showMaximized();
else
player.show();
diff --git a/demos/qmediaplayer/mediaplayer.cpp b/demos/qmediaplayer/mediaplayer.cpp
index 97a8e35..5bf7d6d 100644
--- a/demos/qmediaplayer/mediaplayer.cpp
+++ b/demos/qmediaplayer/mediaplayer.cpp
@@ -152,12 +152,10 @@ void MediaVideoWidget::dragEnterEvent(QDragEnterEvent *e) {
}
-MediaPlayer::MediaPlayer(const QString &filePath,
- const bool hasSmallScreen) :
+MediaPlayer::MediaPlayer() :
playButton(0), nextEffect(0), settingsDialog(0), ui(0),
m_AudioOutput(Phonon::VideoCategory),
- m_videoWidget(new MediaVideoWidget(this)),
- m_hasSmallScreen(hasSmallScreen)
+ m_videoWidget(new MediaVideoWidget(this))
{
setWindowTitle(tr("Media Player"));
setContextMenuPolicy(Qt::CustomContextMenu);
@@ -346,8 +344,6 @@ MediaPlayer::MediaPlayer(const QString &filePath,
m_audioOutputPath = Phonon::createPath(&m_MediaObject, &m_AudioOutput);
Phonon::createPath(&m_MediaObject, m_videoWidget);
- if (!filePath.isEmpty())
- setFile(filePath);
resize(minimumSizeHint());
}
@@ -358,7 +354,7 @@ void MediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate)
if (oldstate == Phonon::LoadingState) {
QRect videoHintRect = QRect(QPoint(0, 0), m_videoWindow.sizeHint());
QRect newVideoRect = QApplication::desktop()->screenGeometry().intersected(videoHintRect);
- if (!m_hasSmallScreen) {
+ if (!m_smallScreen) {
if (m_MediaObject.hasVideo()) {
// Flush event que so that sizeHint takes the
// recently shown/hidden m_videoWindow into account:
@@ -466,6 +462,16 @@ void MediaPlayer::initSettingsDialog()
}
+void MediaPlayer::setVolume(qreal volume)
+{
+ m_AudioOutput.setVolume(volume);
+}
+
+void MediaPlayer::setSmallScreen(bool smallScreen)
+{
+ m_smallScreen = smallScreen;
+}
+
void MediaPlayer::effectChanged()
{
int currentIndex = ui->audioEffectsCombo->currentIndex();
@@ -589,7 +595,7 @@ void MediaPlayer::configureEffect()
effectDialog.exec();
if (effectDialog.result() != QDialog::Accepted) {
- //we need to restore the paramaters values
+ //we need to restore the parameters values
int currentIndex = 0;
foreach(Phonon::EffectParameter param, nextEffect->parameters()) {
nextEffect->setParameterValue(param, savedParamValues.at(currentIndex++));
@@ -685,7 +691,7 @@ bool MediaPlayer::playPauseForDialog()
// If we're running on a small screen, we want to pause the video when
// popping up dialogs. We neither want to tamper with the state if the
// user has paused.
- if (m_hasSmallScreen && m_MediaObject.hasVideo()) {
+ if (m_smallScreen && m_MediaObject.hasVideo()) {
if (Phonon::PlayingState == m_MediaObject.state()) {
m_MediaObject.pause();
return true;
diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h
index d6ae58b..73450fe 100644
--- a/demos/qmediaplayer/mediaplayer.h
+++ b/demos/qmediaplayer/mediaplayer.h
@@ -104,8 +104,7 @@ class MediaPlayer :
{
Q_OBJECT
public:
- MediaPlayer(const QString &,
- const bool hasSmallScreen);
+ MediaPlayer();
void dragEnterEvent(QDragEnterEvent *e);
void dragMoveEvent(QDragMoveEvent *e);
@@ -115,6 +114,8 @@ public:
void setLocation(const QString &location);
void initVideoWindow();
void initSettingsDialog();
+ void setVolume(qreal volume);
+ void setSmallScreen(bool smallScreen);
public slots:
void openFile();
@@ -171,7 +172,7 @@ private:
Phonon::AudioOutput m_AudioOutput;
MediaVideoWidget *m_videoWidget;
Phonon::Path m_audioOutputPath;
- const bool m_hasSmallScreen;
+ bool m_smallScreen;
};
#endif //MEDIAPLAYER_H
diff --git a/demos/qmediaplayer/qmediaplayer.pro b/demos/qmediaplayer/qmediaplayer.pro
index 9407a81..8803d2e 100644
--- a/demos/qmediaplayer/qmediaplayer.pro
+++ b/demos/qmediaplayer/qmediaplayer.pro
@@ -27,7 +27,7 @@ DEPLOYMENT_PLUGIN += phonon_ds9 phonon_waveout
symbian {
TARGET.UID3 = 0xA000C613
- addFiles.sources = ../embedded/desktopservices/data/sax.mp3
+ addFiles.files = ../embedded/desktopservices/data/sax.mp3
addFiles.path = /data/sounds/
DEPLOYMENT += addFiles
diff --git a/demos/qtdemo/itemcircleanimation.h b/demos/qtdemo/itemcircleanimation.h
index 425d2f5..7276f7f 100644
--- a/demos/qtdemo/itemcircleanimation.h
+++ b/demos/qtdemo/itemcircleanimation.h
@@ -61,7 +61,7 @@ public:
ItemCircleAnimation(QGraphicsScene *scene = 0, QGraphicsItem *parent = 0);
virtual ~ItemCircleAnimation();
- // overidden methods:
+ // overridden methods:
QRectF boundingRect() const;
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
diff --git a/demos/qtdemo/mainwindow.cpp b/demos/qtdemo/mainwindow.cpp
index 16c5bf3..e39802a 100644
--- a/demos/qtdemo/mainwindow.cpp
+++ b/demos/qtdemo/mainwindow.cpp
@@ -388,7 +388,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
s += "\nAdapt: ";
s += Colors::noAdapt ? "off" : "on";
- s += "\nAdaption occured: ";
+ s += "\nAdaption occurred: ";
s += Colors::adapted ? "yes" : "no";
s += "\nOpenGL version: ";
s += Colors::glVersion;
diff --git a/demos/qtdemo/mainwindow.h b/demos/qtdemo/mainwindow.h
index b8cfda6..460f941 100644
--- a/demos/qtdemo/mainwindow.h
+++ b/demos/qtdemo/mainwindow.h
@@ -74,7 +74,7 @@ public:
DemoTextItem *fpsLabel;
protected:
- // Overidden methods:
+ // Overridden methods:
void showEvent(QShowEvent *event);
void keyPressEvent(QKeyEvent *event);
void resizeEvent(QResizeEvent *event);
diff --git a/demos/qtdemo/qmlShell.qml b/demos/qtdemo/qmlShell.qml
index 2764865..8ca06f1 100644
--- a/demos/qtdemo/qmlShell.qml
+++ b/demos/qtdemo/qmlShell.qml
@@ -85,7 +85,7 @@ Item {
MouseArea{
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
- onClicked: loader.focus=true;/* and don't propogate to the 'exit' area*/
+ onClicked: loader.focus=true;/* and don't propagate to the 'exit' area*/
}
Rectangle{ id: innerFrame
diff --git a/demos/qtdemo/textbutton.h b/demos/qtdemo/textbutton.h
index 55b4edc..039f923 100644
--- a/demos/qtdemo/textbutton.h
+++ b/demos/qtdemo/textbutton.h
@@ -61,7 +61,7 @@ public:
QGraphicsScene *scene = 0, QGraphicsItem *parent = 0, BUTTONTYPE color = SIDEBAR);
virtual ~TextButton();
- // overidden methods:
+ // overridden methods:
virtual QRectF boundingRect() const;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0){};
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml
index 27f72bb..b94d2b8 100644
--- a/demos/qtdemo/xml/examples.xml
+++ b/demos/qtdemo/xml/examples.xml
@@ -19,7 +19,6 @@
<example filename="sub-attaq" name="Sub-attaq" />
<example filename="spectrum" name="Spectrum Analyzer" />
<example filename="declarative/minehunt" name="Minehunt"/>
- <example filename="declarative/snake" name="Snake" executable="false" qml="true"/>
<example filename="deform" name="Vector Deformation" />
<example filename="books" name="Books" />
<example filename="mainwindow" name="Main Window" />
diff --git a/demos/spectrum/3rdparty/fftreal/fftreal.pro b/demos/spectrum/3rdparty/fftreal/fftreal.pro
index 6305af4..e5093ba 100644
--- a/demos/spectrum/3rdparty/fftreal/fftreal.pro
+++ b/demos/spectrum/3rdparty/fftreal/fftreal.pro
@@ -40,7 +40,7 @@ symbian {
macx {
CONFIG += lib_bundle
} else {
- !symbian: DESTDIR = ../..
+ !symbian: DESTDIR = ../..$${spectrum_build_dir}
}
# Install
diff --git a/demos/spectrum/app/app.pro b/demos/spectrum/app/app.pro
index 4fe8b6d..a75b41a 100644
--- a/demos/spectrum/app/app.pro
+++ b/demos/spectrum/app/app.pro
@@ -65,7 +65,7 @@ symbian {
LIBS += -F$${fftreal_dir}
LIBS += -framework fftreal
} else {
- LIBS += -L..
+ LIBS += -L..$${spectrum_build_dir}
LIBS += -lfftreal
}
}
@@ -86,15 +86,13 @@ symbian {
!contains(DEFINES, DISABLE_FFT) {
# Include FFTReal DLL in the SIS file
- fftreal.sources = ../fftreal.dll
+ fftreal.files = ../fftreal.dll
fftreal.path = !:/sys/bin
DEPLOYMENT += fftreal
}
} else {
+ DESTDIR = ..$${spectrum_build_dir}
macx {
- # Specify directory in which to create spectrum.app bundle
- DESTDIR = ..
-
!contains(DEFINES, DISABLE_FFT) {
# Relocate fftreal.framework into spectrum.app bundle
framework_dir = ../spectrum.app/Contents/Frameworks
@@ -110,10 +108,7 @@ symbian {
../spectrum.app/Contents/MacOS/spectrum
}
} else {
- # Specify directory in which to create spectrum application
- DESTDIR = ..
-
- unix: {
+ linux-g++*: {
# Provide relative path from application to fftreal library
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
}
diff --git a/demos/spectrum/app/engine.cpp b/demos/spectrum/app/engine.cpp
index 119a0e3..cd847fe 100644
--- a/demos/spectrum/app/engine.cpp
+++ b/demos/spectrum/app/engine.cpp
@@ -85,6 +85,7 @@ Engine::Engine(QObject *parent)
, m_state(QAudio::StoppedState)
, m_generateTone(false)
, m_file(0)
+ , m_analysisFile(0)
, m_availableAudioInputDevices
(QAudioDeviceInfo::availableDevices(QAudio::AudioInput))
, m_audioInputDevice(QAudioDeviceInfo::defaultInputDevice())
@@ -96,15 +97,19 @@ Engine::Engine(QObject *parent)
, m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice())
, m_audioOutput(0)
, m_playPosition(0)
+ , m_bufferPosition(0)
+ , m_bufferLength(0)
, m_dataLength(0)
+ , m_levelBufferLength(0)
, m_rmsLevel(0.0)
, m_peakLevel(0.0)
- , m_spectrumLengthBytes(0)
+ , m_spectrumBufferLength(0)
, m_spectrumAnalyser()
, m_spectrumPosition(0)
, m_count(0)
{
qRegisterMetaType<FrequencySpectrum>("FrequencySpectrum");
+ qRegisterMetaType<WindowFunction>("WindowFunction");
CHECKED_CONNECT(&m_spectrumAnalyser,
SIGNAL(spectrumChanged(FrequencySpectrum)),
this,
@@ -132,34 +137,33 @@ Engine::~Engine()
bool Engine::loadFile(const QString &fileName)
{
+ reset();
bool result = false;
- m_generateTone = false;
-
- Q_ASSERT(!fileName.isEmpty());
+ Q_ASSERT(!m_generateTone);
Q_ASSERT(!m_file);
- m_file = new QFile(fileName, this);
- m_file->setFileName(fileName);
- Q_ASSERT(m_file->exists());
- if (m_file->open(QFile::ReadOnly)) {
- m_wavFile.readHeader(*m_file);
- if (isPCMS16LE(m_wavFile.format())) {
+ Q_ASSERT(!fileName.isEmpty());
+ m_file = new WavFile(this);
+ if (m_file->open(fileName)) {
+ if (isPCMS16LE(m_file->fileFormat())) {
result = initialize();
} else {
emit errorMessage(tr("Audio format not supported"),
- formatToString(m_wavFile.format()));
+ formatToString(m_file->fileFormat()));
}
} else {
emit errorMessage(tr("Could not open file"), fileName);
}
-
- delete m_file;
- m_file = 0;
-
+ if (result) {
+ m_analysisFile = new WavFile(this);
+ m_analysisFile->open(fileName);
+ }
return result;
}
bool Engine::generateTone(const Tone &tone)
{
+ reset();
+ Q_ASSERT(!m_generateTone);
Q_ASSERT(!m_file);
m_generateTone = true;
m_tone = tone;
@@ -172,6 +176,7 @@ bool Engine::generateTone(const Tone &tone)
bool Engine::generateSweptTone(qreal amplitude)
{
+ Q_ASSERT(!m_generateTone);
Q_ASSERT(!m_file);
m_generateTone = true;
m_tone.startFreq = 1;
@@ -185,41 +190,18 @@ bool Engine::generateSweptTone(qreal amplitude)
bool Engine::initializeRecord()
{
+ reset();
ENGINE_DEBUG << "Engine::initializeRecord";
+ Q_ASSERT(!m_generateTone);
Q_ASSERT(!m_file);
m_generateTone = false;
m_tone = SweptTone();
return initialize();
}
-qint64 Engine::bufferDuration() const
-{
- return BufferDurationUs;
-}
-
-qint64 Engine::dataDuration() const
+qint64 Engine::bufferLength() const
{
- qint64 result = 0;
- if (QAudioFormat() != m_format)
- result = audioDuration(m_format, m_dataLength);
- return result;
-}
-
-qint64 Engine::audioBufferLength() const
-{
- qint64 length = 0;
- if (QAudio::ActiveState == m_state || QAudio::IdleState == m_state) {
- Q_ASSERT(QAudioFormat() != m_format);
- switch (m_mode) {
- case QAudio::AudioInput:
- length = m_audioInput->bufferSize();
- break;
- case QAudio::AudioOutput:
- length = m_audioOutput->bufferSize();
- break;
- }
- }
- return length;
+ return m_file ? m_file->size() : m_bufferLength;
}
void Engine::setWindowFunction(WindowFunction type)
@@ -252,7 +234,7 @@ void Engine::startRecording()
this, SLOT(audioNotify()));
m_count = 0;
m_dataLength = 0;
- emit dataDurationChanged(0);
+ emit dataLengthChanged(0);
m_audioInputIODevice = m_audioInput->start();
CHECKED_CONNECT(m_audioInputIODevice, SIGNAL(readyRead()),
this, SLOT(audioDataReady()));
@@ -275,7 +257,6 @@ void Engine::startPlayback()
} else {
m_spectrumAnalyser.cancelCalculation();
spectrumChanged(0, 0, FrequencySpectrum());
-
setPlayPosition(0, true);
stopRecording();
m_mode = QAudio::AudioOutput;
@@ -284,10 +265,17 @@ void Engine::startPlayback()
CHECKED_CONNECT(m_audioOutput, SIGNAL(notify()),
this, SLOT(audioNotify()));
m_count = 0;
- m_audioOutputIODevice.close();
- m_audioOutputIODevice.setBuffer(&m_buffer);
- m_audioOutputIODevice.open(QIODevice::ReadOnly);
- m_audioOutput->start(&m_audioOutputIODevice);
+ if (m_file) {
+ m_file->seek(0);
+ m_bufferPosition = 0;
+ m_dataLength = 0;
+ m_audioOutput->start(m_file);
+ } else {
+ m_audioOutputIODevice.close();
+ m_audioOutputIODevice.setBuffer(&m_buffer);
+ m_audioOutputIODevice.open(QIODevice::ReadOnly);
+ m_audioOutput->start(&m_audioOutputIODevice);
+ }
}
}
}
@@ -332,40 +320,55 @@ void Engine::audioNotify()
{
switch (m_mode) {
case QAudio::AudioInput: {
- const qint64 recordPosition =
- qMin(BufferDurationUs, m_audioInput->processedUSecs());
+ const qint64 recordPosition = qMin(m_bufferLength, audioLength(m_format, m_audioInput->processedUSecs()));
setRecordPosition(recordPosition);
-
- // Calculate level of most recently captured data
- qint64 levelLength = audioLength(m_format, LevelWindowUs);
- levelLength = qMin(m_dataLength, levelLength);
- const qint64 levelPosition = m_dataLength - levelLength;
- calculateLevel(levelPosition, levelLength);
-
- // Calculate spectrum of most recently captured data
- if (m_dataLength >= m_spectrumLengthBytes) {
- const qint64 spectrumPosition = m_dataLength - m_spectrumLengthBytes;
+ const qint64 levelPosition = m_dataLength - m_levelBufferLength;
+ if (levelPosition >= 0)
+ calculateLevel(levelPosition, m_levelBufferLength);
+ if (m_dataLength >= m_spectrumBufferLength) {
+ const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength;
calculateSpectrum(spectrumPosition);
}
+ emit bufferChanged(0, m_dataLength, m_buffer);
}
break;
case QAudio::AudioOutput: {
- const qint64 playPosition =
- qMin(dataDuration(), m_audioOutput->processedUSecs());
- setPlayPosition(playPosition);
-
- qint64 analysisPosition = audioLength(m_format, playPosition);
-
- // Calculate level of data starting at current playback position
- const qint64 levelLength = audioLength(m_format, LevelWindowUs);
- if (analysisPosition + levelLength < m_dataLength)
- calculateLevel(analysisPosition, levelLength);
-
- if (analysisPosition + m_spectrumLengthBytes < m_dataLength)
- calculateSpectrum(analysisPosition);
-
- if (dataDuration() == playPosition)
- stopPlayback();
+ const qint64 playPosition = audioLength(m_format, m_audioOutput->processedUSecs());
+ setPlayPosition(qMin(bufferLength(), playPosition));
+ const qint64 levelPosition = playPosition - m_levelBufferLength;
+ const qint64 spectrumPosition = playPosition - m_spectrumBufferLength;
+ if (m_file) {
+ if (levelPosition > m_bufferPosition ||
+ spectrumPosition > m_bufferPosition ||
+ qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) {
+ m_bufferPosition = 0;
+ m_dataLength = 0;
+ // Data needs to be read into m_buffer in order to be analysed
+ const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition));
+ const qint64 readEnd = qMin(m_analysisFile->size(), qMax(levelPosition + m_levelBufferLength, spectrumPosition + m_spectrumBufferLength));
+ const qint64 readLen = readEnd - readPos + audioLength(m_format, WaveformWindowDuration);
+ qDebug() << "Engine::audioNotify [1]"
+ << "analysisFileSize" << m_analysisFile->size()
+ << "readPos" << readPos
+ << "readLen" << readLen;
+ if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) {
+ m_buffer.resize(readLen);
+ m_bufferPosition = readPos;
+ m_dataLength = m_analysisFile->read(m_buffer.data(), readLen);
+ qDebug() << "Engine::audioNotify [2]" << "bufferPosition" << m_bufferPosition << "dataLength" << m_dataLength;
+ } else {
+ qDebug() << "Engine::audioNotify [2]" << "file seek error";
+ }
+ emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer);
+ }
+ } else {
+ if (playPosition >= m_dataLength)
+ stopPlayback();
+ }
+ if (levelPosition >= 0 && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength)
+ calculateLevel(levelPosition, m_levelBufferLength);
+ if (spectrumPosition >= 0 && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength)
+ calculateSpectrum(spectrumPosition);
}
break;
}
@@ -376,27 +379,32 @@ void Engine::audioStateChanged(QAudio::State state)
ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state
<< "to" << state;
- if (QAudio::StoppedState == state) {
- // Check error
- QAudio::Error error = QAudio::NoError;
- switch (m_mode) {
- case QAudio::AudioInput:
- error = m_audioInput->error();
- break;
- case QAudio::AudioOutput:
- error = m_audioOutput->error();
- break;
- }
- if (QAudio::NoError != error) {
- reset();
- return;
+ if (QAudio::IdleState == state && m_file && m_file->pos() == m_file->size()) {
+ stopPlayback();
+ } else {
+ if (QAudio::StoppedState == state) {
+ // Check error
+ QAudio::Error error = QAudio::NoError;
+ switch (m_mode) {
+ case QAudio::AudioInput:
+ error = m_audioInput->error();
+ break;
+ case QAudio::AudioOutput:
+ error = m_audioOutput->error();
+ break;
+ }
+ if (QAudio::NoError != error) {
+ reset();
+ return;
+ }
}
+ setState(state);
}
- setState(state);
}
void Engine::audioDataReady()
{
+ Q_ASSERT(0 == m_bufferPosition);
const qint64 bytesReady = m_audioInput->bytesReady();
const qint64 bytesSpace = m_buffer.size() - m_dataLength;
const qint64 bytesToRead = qMin(bytesReady, bytesSpace);
@@ -407,9 +415,7 @@ void Engine::audioDataReady()
if (bytesRead) {
m_dataLength += bytesRead;
-
- const qint64 duration = audioDuration(m_format, m_dataLength);
- emit dataDurationChanged(duration);
+ emit dataLengthChanged(dataLength());
}
if (m_buffer.size() == m_dataLength)
@@ -419,9 +425,7 @@ void Engine::audioDataReady()
void Engine::spectrumChanged(const FrequencySpectrum &spectrum)
{
ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition;
- const qint64 positionUs = audioDuration(m_format, m_spectrumPosition);
- const qint64 lengthUs = audioDuration(m_format, m_spectrumLengthBytes);
- emit spectrumChanged(positionUs, lengthUs, spectrum);
+ emit spectrumChanged(m_spectrumPosition, m_spectrumBufferLength, spectrum);
}
@@ -429,12 +433,8 @@ void Engine::spectrumChanged(const FrequencySpectrum &spectrum)
// Private functions
//-----------------------------------------------------------------------------
-void Engine::reset()
+void Engine::resetAudioDevices()
{
- stopRecording();
- stopPlayback();
- setState(QAudio::AudioInput, QAudio::StoppedState);
- setFormat(QAudioFormat());
delete m_audioInput;
m_audioInput = 0;
m_audioInputIODevice = 0;
@@ -442,55 +442,71 @@ void Engine::reset()
delete m_audioOutput;
m_audioOutput = 0;
setPlayPosition(0);
- m_buffer.clear();
- m_dataLength = 0;
m_spectrumPosition = 0;
- emit dataDurationChanged(0);
setLevel(0.0, 0.0, 0);
}
+void Engine::reset()
+{
+ stopRecording();
+ stopPlayback();
+ setState(QAudio::AudioInput, QAudio::StoppedState);
+ setFormat(QAudioFormat());
+ m_generateTone = false;
+ delete m_file;
+ m_file = 0;
+ delete m_analysisFile;
+ m_analysisFile = 0;
+ m_buffer.clear();
+ m_bufferPosition = 0;
+ m_bufferLength = 0;
+ m_dataLength = 0;
+ emit dataLengthChanged(0);
+ resetAudioDevices();
+}
+
bool Engine::initialize()
{
bool result = false;
- reset();
+ QAudioFormat format = m_format;
if (selectFormat()) {
- const qint64 bufferLength = audioLength(m_format, BufferDurationUs);
- m_buffer.resize(bufferLength);
- m_buffer.fill(0);
- emit bufferDurationChanged(BufferDurationUs);
-
- if (m_generateTone) {
- if (0 == m_tone.endFreq) {
- const qreal nyquist = nyquistFrequency(m_format);
- m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist);
- }
-
- // Call function defined in utils.h, at global scope
- ::generateTone(m_tone, m_format, m_buffer);
- m_dataLength = m_buffer.size();
- emit dataDurationChanged(bufferDuration());
- setRecordPosition(bufferDuration());
- result = true;
- } else if (m_file) {
- const qint64 length = m_wavFile.readData(*m_file, m_buffer, m_format);
- if (length) {
- m_dataLength = length;
- emit dataDurationChanged(dataDuration());
- setRecordPosition(dataDuration());
+ if (m_format != format) {
+ resetAudioDevices();
+ if (m_file) {
+ emit bufferLengthChanged(bufferLength());
+ emit dataLengthChanged(dataLength());
+ emit bufferChanged(0, 0, m_buffer);
+ setRecordPosition(bufferLength());
result = true;
+ } else {
+ m_bufferLength = audioLength(m_format, BufferDurationUs);
+ m_buffer.resize(m_bufferLength);
+ m_buffer.fill(0);
+ emit bufferLengthChanged(bufferLength());
+ if (m_generateTone) {
+ if (0 == m_tone.endFreq) {
+ const qreal nyquist = nyquistFrequency(m_format);
+ m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist);
+ }
+ // Call function defined in utils.h, at global scope
+ ::generateTone(m_tone, m_format, m_buffer);
+ m_dataLength = m_bufferLength;
+ emit dataLengthChanged(dataLength());
+ emit bufferChanged(0, m_dataLength, m_buffer);
+ setRecordPosition(m_bufferLength);
+ result = true;
+ } else {
+ emit bufferChanged(0, 0, m_buffer);
+ m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this);
+ m_audioInput->setNotifyInterval(NotifyIntervalMs);
+ result = true;
+ }
}
- } else {
- m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this);
- m_audioInput->setNotifyInterval(NotifyIntervalMs);
- result = true;
+ m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
+ m_audioOutput->setNotifyInterval(NotifyIntervalMs);
}
-
- m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
- m_audioOutput->setNotifyInterval(NotifyIntervalMs);
- m_spectrumLengthBytes = SpectrumLengthSamples *
- (m_format.sampleSize() / 8) * m_format.channels();
} else {
if (m_file)
emit errorMessage(tr("Audio format not supported"),
@@ -501,6 +517,8 @@ bool Engine::initialize()
emit errorMessage(tr("No common input / output format found"), "");
}
+ ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength;
+ ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength;
ENGINE_DEBUG << "Engine::initialize" << "format" << m_format;
return result;
@@ -510,21 +528,15 @@ bool Engine::selectFormat()
{
bool foundSupportedFormat = false;
- if (m_file) {
- // Header is read from the WAV file; just need to check whether
- // it is supported by the audio output device
- QAudioFormat format = m_wavFile.format();
- if (m_audioOutputDevice.isFormatSupported(m_wavFile.format())) {
- setFormat(m_wavFile.format());
+ if (m_file || QAudioFormat() != m_format) {
+ QAudioFormat format = m_format;
+ if (m_file)
+ // Header is read from the WAV file; just need to check whether
+ // it is supported by the audio output device
+ format = m_file->fileFormat();
+ if (m_audioOutputDevice.isFormatSupported(format)) {
+ setFormat(format);
foundSupportedFormat = true;
- } else {
- // Try flipping mono <-> stereo
- const int channels = (format.channels() == 1) ? 2 : 1;
- format.setChannels(channels);
- if (m_audioOutputDevice.isFormatSupported(format)) {
- setFormat(format);
- foundSupportedFormat = true;
- }
}
} else {
@@ -648,12 +660,12 @@ void Engine::calculateLevel(qint64 position, qint64 length)
Q_UNUSED(position)
Q_UNUSED(length)
#else
- Q_ASSERT(position + length <= m_dataLength);
+ Q_ASSERT(position + length <= m_bufferPosition + m_dataLength);
qreal peakLevel = 0.0;
qreal sum = 0.0;
- const char *ptr = m_buffer.constData() + position;
+ const char *ptr = m_buffer.constData() + position - m_bufferPosition;
const char *const end = ptr + length;
while (ptr < end) {
const qint16 value = *reinterpret_cast<const qint16*>(ptr);
@@ -679,18 +691,18 @@ void Engine::calculateSpectrum(qint64 position)
#ifdef DISABLE_SPECTRUM
Q_UNUSED(position)
#else
- Q_ASSERT(position + m_spectrumLengthBytes <= m_dataLength);
- Q_ASSERT(0 == m_spectrumLengthBytes % 2); // constraint of FFT algorithm
+ Q_ASSERT(position + m_spectrumBufferLength <= m_bufferPosition + m_dataLength);
+ Q_ASSERT(0 == m_spectrumBufferLength % 2); // constraint of FFT algorithm
// QThread::currentThread is marked 'for internal use only', but
// we're only using it for debug output here, so it's probably OK :)
ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread()
- << "count" << m_count << "pos" << position << "len" << m_spectrumLengthBytes
+ << "count" << m_count << "pos" << position << "len" << m_spectrumBufferLength
<< "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady();
if(m_spectrumAnalyser.isReady()) {
- m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position,
- m_spectrumLengthBytes);
+ m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position - m_bufferPosition,
+ m_spectrumBufferLength);
m_spectrumPosition = position;
m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format);
}
@@ -701,6 +713,9 @@ void Engine::setFormat(const QAudioFormat &format)
{
const bool changed = (format != m_format);
m_format = format;
+ m_levelBufferLength = audioLength(m_format, LevelWindowUs);
+ m_spectrumBufferLength = SpectrumLengthSamples *
+ (m_format.sampleSize() / 8) * m_format.channels();
if (changed)
emit formatChanged(m_format);
}
diff --git a/demos/spectrum/app/engine.h b/demos/spectrum/app/engine.h
index b6fe3ed..c97083e 100644
--- a/demos/spectrum/app/engine.h
+++ b/demos/spectrum/app/engine.h
@@ -91,12 +91,6 @@ public:
QAudio::State state() const { return m_state; }
/**
- * \return Reference to internal audio buffer
- * \note This reference is valid for the lifetime of the Engine
- */
- const QByteArray& buffer() const { return m_buffer; }
-
- /**
* \return Current audio format
* \note May be QAudioFormat() if engine is not initialized
*/
@@ -129,7 +123,7 @@ public:
/**
* Position of the audio input device.
- * \return Position in microseconds.
+ * \return Position in bytes.
*/
qint64 recordPosition() const { return m_recordPosition; }
@@ -147,27 +141,21 @@ public:
/**
* Position of the audio output device.
- * \return Position in microseconds.
+ * \return Position in bytes.
*/
qint64 playPosition() const { return m_playPosition; }
/**
* Length of the internal engine buffer.
- * \return Buffer length in microseconds.
+ * \return Buffer length in bytes.
*/
- qint64 bufferDuration() const;
+ qint64 bufferLength() const;
/**
* Amount of data held in the buffer.
- * \return Data duration in microseconds.
+ * \return Data length in bytes.
*/
- qint64 dataDuration() const;
-
- /**
- * Returns the size of the underlying audio buffer in bytes.
- * This should be an approximation of the capture latency.
- */
- qint64 audioBufferLength() const;
+ qint64 dataLength() const { return m_dataLength; }
/**
* Set window function applied to audio data before spectral analysis.
@@ -203,23 +191,23 @@ signals:
* Length of buffer has changed.
* \param duration Duration in microseconds
*/
- void bufferDurationChanged(qint64 duration);
+ void bufferLengthChanged(qint64 duration);
/**
* Amount of data in buffer has changed.
- * \param duration Duration of data in microseconds
+ * \param Length of data in bytes
*/
- void dataDurationChanged(qint64 duration);
+ void dataLengthChanged(qint64 duration);
/**
* Position of the audio input device has changed.
- * \param position Position in microseconds
+ * \param position Position in bytes
*/
void recordPositionChanged(qint64 position);
/**
* Position of the audio output device has changed.
- * \param position Position in microseconds
+ * \param position Position in bytes
*/
void playPositionChanged(qint64 position);
@@ -227,18 +215,25 @@ signals:
* Level changed
* \param rmsLevel RMS level in range 0.0 - 1.0
* \param peakLevel Peak level in range 0.0 - 1.0
- * \param numSamples Number of audio samples analysed
+ * \param numSamples Number of audio samples analyzed
*/
void levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples);
/**
* Spectrum has changed.
- * \param position Position of start of window in microseconds
- * \param length Length of window in microseconds
+ * \param position Position of start of window in bytes
+ * \param length Length of window in bytes
* \param spectrum Resulting frequency spectrum
*/
void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
+ /**
+ * Buffer containing audio data has changed.
+ * \param position Position of start of buffer in bytes
+ * \param buffer Buffer
+ */
+ void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer);
+
private slots:
void audioNotify();
void audioStateChanged(QAudio::State state);
@@ -246,6 +241,7 @@ private slots:
void spectrumChanged(const FrequencySpectrum &spectrum);
private:
+ void resetAudioDevices();
bool initialize();
bool selectFormat();
void stopRecording();
@@ -275,8 +271,10 @@ private:
bool m_generateTone;
SweptTone m_tone;
- QFile* m_file;
- WavFile m_wavFile;
+ WavFile* m_file;
+ // We need a second file handle via which to read data into m_buffer
+ // for analysis
+ WavFile* m_analysisFile;
QAudioFormat m_format;
@@ -293,12 +291,15 @@ private:
QBuffer m_audioOutputIODevice;
QByteArray m_buffer;
+ qint64 m_bufferPosition;
+ qint64 m_bufferLength;
qint64 m_dataLength;
+ int m_levelBufferLength;
qreal m_rmsLevel;
qreal m_peakLevel;
- int m_spectrumLengthBytes;
+ int m_spectrumBufferLength;
QByteArray m_spectrumBuffer;
SpectrumAnalyser m_spectrumAnalyser;
qint64 m_spectrumPosition;
diff --git a/demos/spectrum/app/levelmeter.h b/demos/spectrum/app/levelmeter.h
index 38d13b1..683dba7 100644
--- a/demos/spectrum/app/levelmeter.h
+++ b/demos/spectrum/app/levelmeter.h
@@ -46,7 +46,7 @@
/**
* Widget which displays a vertical audio level meter, indicating the
- * RMS and peak levels of the window of audio samples most recently analysed
+ * RMS and peak levels of the window of audio samples most recently analyzed
* by the Engine.
*/
class LevelMeter : public QWidget {
diff --git a/demos/spectrum/app/main.cpp b/demos/spectrum/app/main.cpp
index 3bdfb7d..fb5183e 100644
--- a/demos/spectrum/app/main.cpp
+++ b/demos/spectrum/app/main.cpp
@@ -44,7 +44,7 @@
int main(int argc, char **argv)
{
QApplication app(argc, argv);
- app.setApplicationName("QtMultimedia spectrum analyser");
+ app.setApplicationName("QtMultimedia spectrum analyzer");
MainWidget w;
#ifdef Q_OS_SYMBIAN
diff --git a/demos/spectrum/app/mainwidget.cpp b/demos/spectrum/app/mainwidget.cpp
index dd51a91..4b53bbe 100644
--- a/demos/spectrum/app/mainwidget.cpp
+++ b/demos/spectrum/app/mainwidget.cpp
@@ -65,7 +65,7 @@ MainWidget::MainWidget(QWidget *parent)
, m_mode(NoMode)
, m_engine(new Engine(this))
#ifndef DISABLE_WAVEFORM
- , m_waveform(new Waveform(m_engine->buffer(), this))
+ , m_waveform(new Waveform(this))
#endif
, m_progressBar(new ProgressBar(this))
, m_spectrograph(new Spectrograph(this))
@@ -166,19 +166,18 @@ void MainWidget::timerEvent(QTimerEvent *event)
m_infoMessage->setText("");
}
-void MainWidget::positionChanged(qint64 positionUs)
+void MainWidget::audioPositionChanged(qint64 position)
{
#ifndef DISABLE_WAVEFORM
- qint64 positionBytes = audioLength(m_engine->format(), positionUs);
- m_waveform->positionChanged(positionBytes);
+ m_waveform->audioPositionChanged(position);
#else
- Q_UNUSED(positionUs)
+ Q_UNUSED(position)
#endif
}
-void MainWidget::bufferDurationChanged(qint64 durationUs)
+void MainWidget::bufferLengthChanged(qint64 length)
{
- m_progressBar->bufferDurationChanged(durationUs);
+ m_progressBar->bufferLengthChanged(length);
}
@@ -186,33 +185,22 @@ void MainWidget::bufferDurationChanged(qint64 durationUs)
// Private slots
//-----------------------------------------------------------------------------
-void MainWidget::dataDurationChanged(qint64 duration)
-{
-#ifndef DISABLE_WAVEFORM
- const qint64 dataLength = audioLength(m_engine->format(), duration);
- m_waveform->dataLengthChanged(dataLength);
-#else
- Q_UNUSED(duration)
-#endif
-
- updateButtonStates();
-}
-
void MainWidget::showFileDialog()
{
- reset();
const QString dir;
const QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open WAV file"), dir, "*.wav");
if (fileNames.count()) {
+ reset();
setMode(LoadFileMode);
m_engine->loadFile(fileNames.front());
updateButtonStates();
+ } else {
+ updateModeMenu();
}
}
void MainWidget::showSettingsDialog()
{
- reset();
m_settingsDialog->exec();
if (m_settingsDialog->result() == QDialog::Accepted) {
m_engine->setAudioInputDevice(m_settingsDialog->inputDevice());
@@ -223,9 +211,9 @@ void MainWidget::showSettingsDialog()
void MainWidget::showToneGeneratorDialog()
{
- reset();
m_toneGeneratorDialog->exec();
if (m_toneGeneratorDialog->result() == QDialog::Accepted) {
+ reset();
setMode(GenerateToneMode);
const qreal amplitude = m_toneGeneratorDialog->amplitude();
if (m_toneGeneratorDialog->isFrequencySweepEnabled()) {
@@ -236,6 +224,8 @@ void MainWidget::showToneGeneratorDialog()
m_engine->generateTone(tone);
updateButtonStates();
}
+ } else {
+ updateModeMenu();
}
}
@@ -360,13 +350,13 @@ void MainWidget::connectUi()
CHECKED_CONNECT(m_engine, SIGNAL(formatChanged(const QAudioFormat &)),
this, SLOT(formatChanged(const QAudioFormat &)));
- m_progressBar->bufferDurationChanged(m_engine->bufferDuration());
+ m_progressBar->bufferLengthChanged(m_engine->bufferLength());
- CHECKED_CONNECT(m_engine, SIGNAL(bufferDurationChanged(qint64)),
- this, SLOT(bufferDurationChanged(qint64)));
+ CHECKED_CONNECT(m_engine, SIGNAL(bufferLengthChanged(qint64)),
+ this, SLOT(bufferLengthChanged(qint64)));
- CHECKED_CONNECT(m_engine, SIGNAL(dataDurationChanged(qint64)),
- this, SLOT(dataDurationChanged(qint64)));
+ CHECKED_CONNECT(m_engine, SIGNAL(dataLengthChanged(qint64)),
+ this, SLOT(updateButtonStates()));
CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)),
m_progressBar, SLOT(recordPositionChanged(qint64)));
@@ -375,10 +365,10 @@ void MainWidget::connectUi()
m_progressBar, SLOT(playPositionChanged(qint64)));
CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)),
- this, SLOT(positionChanged(qint64)));
+ this, SLOT(audioPositionChanged(qint64)));
CHECKED_CONNECT(m_engine, SIGNAL(playPositionChanged(qint64)),
- this, SLOT(positionChanged(qint64)));
+ this, SLOT(audioPositionChanged(qint64)));
CHECKED_CONNECT(m_engine, SIGNAL(levelChanged(qreal, qreal, int)),
m_levelMeter, SLOT(levelChanged(qreal, qreal, int)));
@@ -394,6 +384,11 @@ void MainWidget::connectUi()
CHECKED_CONNECT(m_spectrograph, SIGNAL(infoMessage(QString, int)),
this, SLOT(infoMessage(QString, int)));
+
+#ifndef DISABLE_WAVEFORM
+ CHECKED_CONNECT(m_engine, SIGNAL(bufferChanged(qint64, qint64, const QByteArray &)),
+ m_waveform, SLOT(bufferChanged(qint64, qint64, const QByteArray &)));
+#endif
}
void MainWidget::createMenus()
@@ -425,7 +420,7 @@ void MainWidget::updateButtonStates()
QAudio::IdleState == m_engine->state());
m_pauseButton->setEnabled(pauseEnabled);
- const bool playEnabled = (m_engine->dataDuration() &&
+ const bool playEnabled = (/*m_engine->dataLength() &&*/
(QAudio::AudioOutput != m_engine->mode() ||
(QAudio::ActiveState != m_engine->state() &&
QAudio::IdleState != m_engine->state())));
@@ -445,10 +440,14 @@ void MainWidget::reset()
void MainWidget::setMode(Mode mode)
{
-
m_mode = mode;
- m_loadFileAction->setChecked(LoadFileMode == mode);
- m_generateToneAction->setChecked(GenerateToneMode == mode);
- m_recordAction->setChecked(RecordMode == mode);
+ updateModeMenu();
+}
+
+void MainWidget::updateModeMenu()
+{
+ m_loadFileAction->setChecked(LoadFileMode == m_mode);
+ m_generateToneAction->setChecked(GenerateToneMode == m_mode);
+ m_recordAction->setChecked(RecordMode == m_mode);
}
diff --git a/demos/spectrum/app/mainwidget.h b/demos/spectrum/app/mainwidget.h
index ddab8b7..13131c0 100644
--- a/demos/spectrum/app/mainwidget.h
+++ b/demos/spectrum/app/mainwidget.h
@@ -80,21 +80,21 @@ public slots:
const FrequencySpectrum &spectrum);
void infoMessage(const QString &message, int timeoutMs);
void errorMessage(const QString &heading, const QString &detail);
- void positionChanged(qint64 position);
- void bufferDurationChanged(qint64 duration);
+ void audioPositionChanged(qint64 position);
+ void bufferLengthChanged(qint64 length);
private slots:
void showFileDialog();
void showSettingsDialog();
void showToneGeneratorDialog();
void initializeRecord();
- void dataDurationChanged(qint64 duration);
+ void updateModeMenu();
+ void updateButtonStates();
private:
void createUi();
void createMenus();
void connectUi();
- void updateButtonStates();
void reset();
enum Mode {
@@ -111,7 +111,9 @@ private:
Engine* m_engine;
+#ifndef DISABLE_WAVEFORM
Waveform* m_waveform;
+#endif
ProgressBar* m_progressBar;
Spectrograph* m_spectrograph;
LevelMeter* m_levelMeter;
diff --git a/demos/spectrum/app/progressbar.cpp b/demos/spectrum/app/progressbar.cpp
index 6bfc690..0ac76f1 100644
--- a/demos/spectrum/app/progressbar.cpp
+++ b/demos/spectrum/app/progressbar.cpp
@@ -44,7 +44,7 @@
ProgressBar::ProgressBar(QWidget *parent)
: QWidget(parent)
- , m_bufferDuration(0)
+ , m_bufferLength(0)
, m_recordPosition(0)
, m_playPosition(0)
, m_windowPosition(0)
@@ -64,7 +64,7 @@ ProgressBar::~ProgressBar()
void ProgressBar::reset()
{
- m_bufferDuration = 0;
+ m_bufferLength = 0;
m_recordPosition = 0;
m_playPosition = 0;
m_windowPosition = 0;
@@ -86,26 +86,26 @@ void ProgressBar::paintEvent(QPaintEvent * /*event*/)
painter.fillRect(rect(), Qt::black);
#endif
- if (m_bufferDuration) {
+ if (m_bufferLength) {
QRect bar = rect();
- const qreal play = qreal(m_playPosition) / m_bufferDuration;
+ const qreal play = qreal(m_playPosition) / m_bufferLength;
bar.setLeft(rect().left() + play * rect().width());
- const qreal record = qreal(m_recordPosition) / m_bufferDuration;
+ const qreal record = qreal(m_recordPosition) / m_bufferLength;
bar.setRight(rect().left() + record * rect().width());
painter.fillRect(bar, bufferColor);
QRect window = rect();
- const qreal windowLeft = qreal(m_windowPosition) / m_bufferDuration;
+ const qreal windowLeft = qreal(m_windowPosition) / m_bufferLength;
window.setLeft(rect().left() + windowLeft * rect().width());
- const qreal windowWidth = qreal(m_windowLength) / m_bufferDuration;
+ const qreal windowWidth = qreal(m_windowLength) / m_bufferLength;
window.setWidth(windowWidth * rect().width());
painter.fillRect(window, windowColor);
}
}
-void ProgressBar::bufferDurationChanged(qint64 bufferSize)
+void ProgressBar::bufferLengthChanged(qint64 bufferSize)
{
- m_bufferDuration = bufferSize;
+ m_bufferLength = bufferSize;
m_recordPosition = 0;
m_playPosition = 0;
m_windowPosition = 0;
@@ -116,7 +116,7 @@ void ProgressBar::bufferDurationChanged(qint64 bufferSize)
void ProgressBar::recordPositionChanged(qint64 recordPosition)
{
Q_ASSERT(recordPosition >= 0);
- Q_ASSERT(recordPosition <= m_bufferDuration);
+ Q_ASSERT(recordPosition <= m_bufferLength);
m_recordPosition = recordPosition;
repaint();
}
@@ -124,7 +124,7 @@ void ProgressBar::recordPositionChanged(qint64 recordPosition)
void ProgressBar::playPositionChanged(qint64 playPosition)
{
Q_ASSERT(playPosition >= 0);
- Q_ASSERT(playPosition <= m_bufferDuration);
+ Q_ASSERT(playPosition <= m_bufferLength);
m_playPosition = playPosition;
repaint();
}
@@ -132,8 +132,8 @@ void ProgressBar::playPositionChanged(qint64 playPosition)
void ProgressBar::windowChanged(qint64 position, qint64 length)
{
Q_ASSERT(position >= 0);
- Q_ASSERT(position <= m_bufferDuration);
- Q_ASSERT(position + length <= m_bufferDuration);
+ Q_ASSERT(position <= m_bufferLength);
+ Q_ASSERT(position + length <= m_bufferLength);
m_windowPosition = position;
m_windowLength = length;
repaint();
diff --git a/demos/spectrum/app/progressbar.h b/demos/spectrum/app/progressbar.h
index 8514adb..e715cf5 100644
--- a/demos/spectrum/app/progressbar.h
+++ b/demos/spectrum/app/progressbar.h
@@ -57,13 +57,13 @@ public:
void paintEvent(QPaintEvent *event);
public slots:
- void bufferDurationChanged(qint64 bufferSize);
+ void bufferLengthChanged(qint64 length);
void recordPositionChanged(qint64 recordPosition);
void playPositionChanged(qint64 playPosition);
void windowChanged(qint64 position, qint64 length);
private:
- qint64 m_bufferDuration;
+ qint64 m_bufferLength;
qint64 m_recordPosition;
qint64 m_playPosition;
qint64 m_windowPosition;
diff --git a/demos/spectrum/app/spectrograph.h b/demos/spectrum/app/spectrograph.h
index ce59d90..fa4a6cf 100644
--- a/demos/spectrum/app/spectrograph.h
+++ b/demos/spectrum/app/spectrograph.h
@@ -48,7 +48,7 @@ QT_FORWARD_DECLARE_CLASS(QMouseEvent)
/**
* Widget which displays a spectrograph showing the frequency spectrum
- * of the window of audio samples most recently analysed by the Engine.
+ * of the window of audio samples most recently analyzed by the Engine.
*/
class Spectrograph : public QWidget {
Q_OBJECT
diff --git a/demos/spectrum/app/spectrumanalyser.cpp b/demos/spectrum/app/spectrumanalyser.cpp
index c467f61..2fa17b1 100644
--- a/demos/spectrum/app/spectrumanalyser.cpp
+++ b/demos/spectrum/app/spectrumanalyser.cpp
@@ -64,6 +64,8 @@ SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent)
#endif
{
#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
+ // moveToThread() cannot be called on a QObject with a parent
+ setParent(0);
moveToThread(m_thread);
m_thread->start();
#endif
@@ -124,7 +126,7 @@ void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer,
// Calculate the FFT
m_fft->calculateFFT(m_output.data(), m_input.data());
- // Analyse output to obtain amplitude and phase for each frequency
+ // Analyze output to obtain amplitude and phase for each frequency
for (int i=2; i<=m_numSamples/2; ++i) {
// Calculate frequency of this complex sample
m_spectrum[i].frequency = qreal(i * inputFrequency) / (m_numSamples);
diff --git a/demos/spectrum/app/utils.cpp b/demos/spectrum/app/utils.cpp
index 4ead6c2..49a7626 100644
--- a/demos/spectrum/app/utils.cpp
+++ b/demos/spectrum/app/utils.cpp
@@ -49,8 +49,10 @@ qint64 audioDuration(const QAudioFormat &format, qint64 bytes)
qint64 audioLength(const QAudioFormat &format, qint64 microSeconds)
{
- return (format.frequency() * format.channels() * (format.sampleSize() / 8))
+ qint64 result = (format.frequency() * format.channels() * (format.sampleSize() / 8))
* microSeconds / 1000000;
+ result -= result % (format.channelCount() * format.sampleSize());
+ return result;
}
qreal nyquistFrequency(const QAudioFormat &format)
diff --git a/demos/spectrum/app/waveform.cpp b/demos/spectrum/app/waveform.cpp
index 1f7d315..bd854c0 100644
--- a/demos/spectrum/app/waveform.cpp
+++ b/demos/spectrum/app/waveform.cpp
@@ -44,12 +44,18 @@
#include <QResizeEvent>
#include <QDebug>
-
-Waveform::Waveform(const QByteArray &buffer, QWidget *parent)
+//#define PAINT_EVENT_TRACE
+#ifdef PAINT_EVENT_TRACE
+# define WAVEFORM_PAINT_DEBUG qDebug()
+#else
+# define WAVEFORM_PAINT_DEBUG nullDebug()
+#endif
+
+Waveform::Waveform(QWidget *parent)
: QWidget(parent)
- , m_buffer(buffer)
- , m_dataLength(0)
- , m_position(0)
+ , m_bufferPosition(0)
+ , m_bufferLength(0)
+ , m_audioPosition(0)
, m_active(false)
, m_tileLength(0)
, m_tileArrayStart(0)
@@ -72,19 +78,19 @@ void Waveform::paintEvent(QPaintEvent * /*event*/)
painter.fillRect(rect(), Qt::black);
if (m_active) {
- WAVEFORM_DEBUG << "Waveform::paintEvent"
- << "windowPosition" << m_windowPosition
- << "windowLength" << m_windowLength;
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent"
+ << "windowPosition" << m_windowPosition
+ << "windowLength" << m_windowLength;
qint64 pos = m_windowPosition;
const qint64 windowEnd = m_windowPosition + m_windowLength;
int destLeft = 0;
int destRight = 0;
while (pos < windowEnd) {
const TilePoint point = tilePoint(pos);
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos
- << "tileIndex" << point.index
- << "positionOffset" << point.positionOffset
- << "pixelOffset" << point.pixelOffset;
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos
+ << "tileIndex" << point.index
+ << "positionOffset" << point.positionOffset
+ << "pixelOffset" << point.pixelOffset;
if (point.index != NullIndex) {
const Tile &tile = m_tiles[point.index];
@@ -104,9 +110,9 @@ void Waveform::paintEvent(QPaintEvent * /*event*/)
sourceRect.setLeft(point.pixelOffset);
sourceRect.setRight(sourceRight);
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index
- << "source" << point.pixelOffset << sourceRight
- << "dest" << destLeft << destRight;
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index
+ << "source" << point.pixelOffset << sourceRight
+ << "dest" << destLeft << destRight;
painter.drawPixmap(destRect, *tile.pixmap, sourceRect);
@@ -114,25 +120,25 @@ void Waveform::paintEvent(QPaintEvent * /*event*/)
if (point.index < m_tiles.count()) {
pos = tilePosition(point.index + 1);
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos ->" << pos;
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos ->" << pos;
} else {
// Reached end of tile array
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "reached end of tile array";
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "reached end of tile array";
break;
}
} else {
// Passed last tile which is painted
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted";
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted";
break;
}
} else {
// pos is past end of tile array
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array";
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array";
break;
}
}
- WAVEFORM_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight;
+ WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight;
}
}
@@ -146,7 +152,6 @@ void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, qi
{
WAVEFORM_DEBUG << "Waveform::initialize"
<< "audioBufferSize" << audioBufferSize
- << "m_buffer.size()" << m_buffer.size()
<< "windowDurationUs" << windowDurationUs;
reset();
@@ -186,8 +191,9 @@ void Waveform::reset()
{
WAVEFORM_DEBUG << "Waveform::reset";
- m_dataLength = 0;
- m_position = 0;
+ m_bufferPosition = 0;
+ m_buffer = QByteArray();
+ m_audioPosition = 0;
m_format = QAudioFormat();
m_active = false;
deletePixmaps();
@@ -198,30 +204,31 @@ void Waveform::reset()
m_windowLength = 0;
}
-void Waveform::dataLengthChanged(qint64 length)
+void Waveform::bufferChanged(qint64 position, qint64 length, const QByteArray &buffer)
{
- WAVEFORM_DEBUG << "Waveform::dataLengthChanged" << length;
- const qint64 oldLength = m_dataLength;
- m_dataLength = length;
-
- if (m_active) {
- if (m_dataLength < oldLength)
- positionChanged(m_dataLength);
- else
- paintTiles();
- }
+ WAVEFORM_DEBUG << "Waveform::bufferChanged"
+ << "audioPosition" << m_audioPosition
+ << "bufferPosition" << position
+ << "bufferLength" << length;
+ m_bufferPosition = position;
+ m_bufferLength = length;
+ m_buffer = buffer;
+ paintTiles();
}
-void Waveform::positionChanged(qint64 position)
+void Waveform::audioPositionChanged(qint64 position)
{
- WAVEFORM_DEBUG << "Waveform::positionChanged" << position;
-
- if (position + m_windowLength > m_dataLength)
- position = m_dataLength - m_windowLength;
-
- m_position = position;
-
- setWindowPosition(position);
+ WAVEFORM_DEBUG << "Waveform::audioPositionChanged"
+ << "audioPosition" << position
+ << "bufferPosition" << m_bufferPosition
+ << "bufferLength" << m_bufferLength;
+
+ if (position >= m_bufferPosition) {
+ if (position + m_windowLength > m_bufferPosition + m_bufferLength)
+ position = qMax(qint64(0), m_bufferPosition + m_bufferLength - m_windowLength);
+ m_audioPosition = position;
+ setWindowPosition(position);
+ }
}
void Waveform::deletePixmaps()
@@ -255,8 +262,6 @@ void Waveform::createPixmaps(const QSize &widgetSize)
m_tiles[i].pixmap = m_pixmaps[i];
m_tiles[i].painted = false;
}
-
- paintTiles();
}
void Waveform::setWindowPosition(qint64 position)
@@ -327,8 +332,9 @@ bool Waveform::paintTiles()
for (int i=0; i<m_tiles.count(); ++i) {
const Tile &tile = m_tiles[i];
if (!tile.painted) {
- const qint64 tileEnd = m_tileArrayStart + (i + 1) * m_tileLength;
- if (m_dataLength >= tileEnd) {
+ const qint64 tileStart = m_tileArrayStart + i * m_tileLength;
+ const qint64 tileEnd = tileStart + m_tileLength;
+ if (m_bufferPosition <= tileStart && m_bufferPosition + m_bufferLength >= tileEnd) {
paintTile(i);
updateRequired = true;
}
@@ -343,16 +349,23 @@ bool Waveform::paintTiles()
void Waveform::paintTile(int index)
{
- WAVEFORM_DEBUG << "Waveform::paintTile" << "index" << index;
-
const qint64 tileStart = m_tileArrayStart + index * m_tileLength;
- Q_ASSERT(m_dataLength >= tileStart + m_tileLength);
+
+ WAVEFORM_DEBUG << "Waveform::paintTile"
+ << "index" << index
+ << "bufferPosition" << m_bufferPosition
+ << "bufferLength" << m_bufferLength
+ << "start" << tileStart
+ << "end" << tileStart + m_tileLength;
+
+ Q_ASSERT(m_bufferPosition <= tileStart);
+ Q_ASSERT(m_bufferPosition + m_bufferLength >= tileStart + m_tileLength);
Tile &tile = m_tiles[index];
Q_ASSERT(!tile.painted);
const qint16* base = reinterpret_cast<const qint16*>(m_buffer.constData());
- const qint16* buffer = base + (tileStart / 2);
+ const qint16* buffer = base + ((tileStart - m_bufferPosition) / 2);
const int numSamples = m_tileLength / (2 * m_format.channels());
QPainter painter(tile.pixmap);
@@ -376,6 +389,11 @@ void Waveform::paintTile(int index)
for (int i=0; i<numSamples; ++i) {
const qint16* ptr = buffer + i * m_format.channels();
+
+ const int offset = reinterpret_cast<const char*>(ptr) - m_buffer.constData();
+ Q_ASSERT(offset >= 0);
+ Q_ASSERT(offset < m_bufferLength);
+
const qint16 pcmValue = *ptr;
const qreal realValue = pcmToReal(pcmValue);
diff --git a/demos/spectrum/app/waveform.h b/demos/spectrum/app/waveform.h
index 57c9eec..1c54c86 100644
--- a/demos/spectrum/app/waveform.h
+++ b/demos/spectrum/app/waveform.h
@@ -60,7 +60,7 @@ QT_FORWARD_DECLARE_CLASS(QByteArray)
class Waveform : public QWidget {
Q_OBJECT
public:
- Waveform(const QByteArray &buffer, QWidget *parent = 0);
+ Waveform(QWidget *parent = 0);
~Waveform();
// QWidget
@@ -73,8 +73,8 @@ public:
void setAutoUpdatePosition(bool enabled);
public slots:
- void dataLengthChanged(qint64 length);
- void positionChanged(qint64 position);
+ void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer);
+ void audioPositionChanged(qint64 position);
private:
static const int NullIndex = -1;
@@ -167,9 +167,11 @@ private:
void resetTiles(qint64 newStartPos);
private:
- const QByteArray& m_buffer;
- qint64 m_dataLength;
- qint64 m_position;
+ qint64 m_bufferPosition;
+ qint64 m_bufferLength;
+ QByteArray m_buffer;
+
+ qint64 m_audioPosition;
QAudioFormat m_format;
bool m_active;
diff --git a/demos/spectrum/app/wavfile.cpp b/demos/spectrum/app/wavfile.cpp
index b9467e3..44c3ac5 100644
--- a/demos/spectrum/app/wavfile.cpp
+++ b/demos/spectrum/app/wavfile.cpp
@@ -76,171 +76,76 @@ struct CombinedHeader
{
RIFFHeader riff;
WAVEHeader wave;
- DATAHeader data;
};
-static const int HeaderLength = sizeof(CombinedHeader);
-
-
-WavFile::WavFile(const QAudioFormat &format, qint64 dataLength)
- : m_format(format)
- , m_dataLength(dataLength)
-{
-
-}
-
-bool WavFile::readHeader(QIODevice &device)
-{
- bool result = true;
-
- if (!device.isSequential())
- result = device.seek(0);
- // else, assume that current position is the start of the header
-
- if (result) {
- CombinedHeader header;
- result = (device.read(reinterpret_cast<char *>(&header), HeaderLength) == HeaderLength);
- if (result) {
- if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0
- || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0)
- && memcmp(&header.riff.type, "WAVE", 4) == 0
- && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0
- && header.wave.audioFormat == 1 // PCM
- ) {
- if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0)
- m_format.setByteOrder(QAudioFormat::LittleEndian);
- else
- m_format.setByteOrder(QAudioFormat::BigEndian);
-
- m_format.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
- m_format.setCodec("audio/pcm");
- m_format.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
- m_format.setSampleSize(qFromLittleEndian<quint16>(header.wave.bitsPerSample));
-
- switch(header.wave.bitsPerSample) {
- case 8:
- m_format.setSampleType(QAudioFormat::UnSignedInt);
- break;
- case 16:
- m_format.setSampleType(QAudioFormat::SignedInt);
- break;
- default:
- result = false;
- }
-
- m_dataLength = device.size() - HeaderLength;
- } else {
- result = false;
- }
- }
- }
-
- return result;
-}
-
-bool WavFile::writeHeader(QIODevice &device)
+WavFile::WavFile(QObject *parent)
+ : QFile(parent)
+ , m_headerLength(0)
{
- CombinedHeader header;
- memset(&header, 0, HeaderLength);
-
- // RIFF header
- if (m_format.byteOrder() == QAudioFormat::LittleEndian)
- strncpy(&header.riff.descriptor.id[0], "RIFF", 4);
- else
- strncpy(&header.riff.descriptor.id[0], "RIFX", 4);
- qToLittleEndian<quint32>(quint32(m_dataLength + HeaderLength - 8),
- reinterpret_cast<unsigned char*>(&header.riff.descriptor.size));
- strncpy(&header.riff.type[0], "WAVE", 4);
-
- // WAVE header
- strncpy(&header.wave.descriptor.id[0], "fmt ", 4);
- qToLittleEndian<quint32>(quint32(16),
- reinterpret_cast<unsigned char*>(&header.wave.descriptor.size));
- qToLittleEndian<quint16>(quint16(1),
- reinterpret_cast<unsigned char*>(&header.wave.audioFormat));
- qToLittleEndian<quint16>(quint16(m_format.channels()),
- reinterpret_cast<unsigned char*>(&header.wave.numChannels));
- qToLittleEndian<quint32>(quint32(m_format.frequency()),
- reinterpret_cast<unsigned char*>(&header.wave.sampleRate));
- qToLittleEndian<quint32>(quint32(m_format.frequency() * m_format.channels() * m_format.sampleSize() / 8),
- reinterpret_cast<unsigned char*>(&header.wave.byteRate));
- qToLittleEndian<quint16>(quint16(m_format.channels() * m_format.sampleSize() / 8),
- reinterpret_cast<unsigned char*>(&header.wave.blockAlign));
- qToLittleEndian<quint16>(quint16(m_format.sampleSize()),
- reinterpret_cast<unsigned char*>(&header.wave.bitsPerSample));
-
- // DATA header
- strncpy(&header.data.descriptor.id[0], "data", 4);
- qToLittleEndian<quint32>(quint32(m_dataLength),
- reinterpret_cast<unsigned char*>(&header.data.descriptor.size));
-
- return (device.write(reinterpret_cast<const char *>(&header), HeaderLength) == HeaderLength);
-}
-
-const QAudioFormat& WavFile::format() const
-{
- return m_format;
}
-qint64 WavFile::dataLength() const
+bool WavFile::open(const QString &fileName)
{
- return m_dataLength;
+ close();
+ setFileName(fileName);
+ return QFile::open(QIODevice::ReadOnly) && readHeader();
}
-qint64 WavFile::headerLength()
+const QAudioFormat &WavFile::fileFormat() const
{
- return HeaderLength;
+ return m_fileFormat;
}
-bool WavFile::writeDataLength(QIODevice &device, qint64 dataLength)
+qint64 WavFile::headerLength() const
{
- bool result = false;
- if (!device.isSequential()) {
- device.seek(40);
- unsigned char dataLengthLE[4];
- qToLittleEndian<quint32>(quint32(dataLength), dataLengthLE);
- result = (device.write(reinterpret_cast<const char *>(dataLengthLE), 4) == 4);
- }
- return result;
+return m_headerLength;
}
-#include <QFile>
-#include <QTextStream>
-
-qint64 WavFile::readData(QIODevice &device, QByteArray &buffer,
- QAudioFormat outputFormat)
+bool WavFile::readHeader()
{
- if (QAudioFormat() == outputFormat)
- outputFormat = m_format;
-
- qint64 result = 0;
-
- QFile file("wav.txt");
- file.open(QIODevice::WriteOnly | QIODevice::Text);
- QTextStream stream;
- stream.setDevice(&file);
-
- if (isPCMS16LE(outputFormat) && isPCMS16LE(m_format)) {
- QVector<char> inputSample(2 * m_format.channels());
-
- qint16 *output = reinterpret_cast<qint16*>(buffer.data());
-
- while (result < buffer.size()) {
- if (device.read(inputSample.data(), inputSample.count())) {
- int inputIdx = 0;
- for (int outputIdx = 0; outputIdx < outputFormat.channels(); ++outputIdx) {
- const qint16* input = reinterpret_cast<const qint16*>(inputSample.data() + 2 * inputIdx);
- *output++ = qFromLittleEndian<qint16>(*input);
- result += 2;
- if (inputIdx < m_format.channels())
- ++inputIdx;
- }
- } else {
- break;
+ seek(0);
+ CombinedHeader header;
+ bool result = read(reinterpret_cast<char *>(&header), sizeof(CombinedHeader)) == sizeof(CombinedHeader);
+ if (result) {
+ if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0
+ || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0)
+ && memcmp(&header.riff.type, "WAVE", 4) == 0
+ && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0
+ && (header.wave.audioFormat == 1 || header.wave.audioFormat == 0)) {
+
+ // Read off remaining header information
+ DATAHeader dataHeader;
+
+ if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
+ // Extended data available
+ quint16 extraFormatBytes;
+ if (peek((char*)&extraFormatBytes, sizeof(quint16)) != sizeof(quint16))
+ return false;
+ const qint64 throwAwayBytes = sizeof(quint16) + qFromLittleEndian<quint16>(extraFormatBytes);
+ if (read(throwAwayBytes).size() != throwAwayBytes)
+ return false;
}
+
+ if (read((char*)&dataHeader, sizeof(DATAHeader)) != sizeof(DATAHeader))
+ return false;
+
+ // Establish format
+ if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0)
+ m_fileFormat.setByteOrder(QAudioFormat::LittleEndian);
+ else
+ m_fileFormat.setByteOrder(QAudioFormat::BigEndian);
+
+ int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
+ m_fileFormat.setChannels(qFromLittleEndian<quint16>(header.wave.numChannels));
+ m_fileFormat.setCodec("audio/pcm");
+ m_fileFormat.setFrequency(qFromLittleEndian<quint32>(header.wave.sampleRate));
+ m_fileFormat.setSampleSize(qFromLittleEndian<quint16>(header.wave.bitsPerSample));
+ m_fileFormat.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
+ } else {
+ result = false;
}
}
+ m_headerLength = pos();
return result;
}
-
diff --git a/demos/spectrum/app/wavfile.h b/demos/spectrum/app/wavfile.h
index f2f3304..935e935 100644
--- a/demos/spectrum/app/wavfile.h
+++ b/demos/spectrum/app/wavfile.h
@@ -46,37 +46,22 @@
#include <QtCore/qfile.h>
#include <QtMultimedia/qaudioformat.h>
-/**
- * Helper class for reading WAV files
- *
- * See https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
- */
-class WavFile
+class WavFile : public QFile
{
public:
- WavFile(const QAudioFormat &format = QAudioFormat(),
- qint64 dataLength = 0);
+ WavFile(QObject *parent = 0);
- // Reads WAV header and seeks to start of data
- bool readHeader(QIODevice &device);
+ bool open(const QString &fileName);
+ const QAudioFormat &fileFormat() const;
+ qint64 headerLength() const;
- // Writes WAV header
- bool writeHeader(QIODevice &device);
-
- // Read PCM data
- qint64 readData(QIODevice &device, QByteArray &buffer,
- QAudioFormat outputFormat = QAudioFormat());
-
- const QAudioFormat& format() const;
- qint64 dataLength() const;
-
- static qint64 headerLength();
-
- static bool writeDataLength(QIODevice &device, qint64 dataLength);
+private:
+ bool readHeader();
private:
- QAudioFormat m_format;
- qint64 m_dataLength;
+ QAudioFormat m_fileFormat;
+ qint64 m_headerLength;
+
};
#endif
diff --git a/demos/spectrum/spectrum.pri b/demos/spectrum/spectrum.pri
index c09aa0d..5773900 100644
--- a/demos/spectrum/spectrum.pri
+++ b/demos/spectrum/spectrum.pri
@@ -35,3 +35,15 @@ DEFINES += SPECTRUM_ANALYSER_SEPARATE_THREAD
# Suppress warnings about strncpy potentially being unsafe, emitted by MSVC
win32: DEFINES += _CRT_SECURE_NO_WARNINGS
+win32 {
+ # spectrum_build_dir is defined with a leading slash so that it can
+ # be used in contexts such as
+ # ..$${spectrum_build_dir}
+ # without the result having a trailing slash where spectrum_build_dir
+ # is undefined.
+ spectrum_build_dir = /release
+ if (!debug_and_release|build_pass): CONFIG(debug, debug|release) {
+ spectrum_build_dir = /debug
+ }
+}
+
diff --git a/demos/spreadsheet/spreadsheet.cpp b/demos/spreadsheet/spreadsheet.cpp
index f2a1738..519afe9 100644
--- a/demos/spreadsheet/spreadsheet.cpp
+++ b/demos/spreadsheet/spreadsheet.cpp
@@ -511,7 +511,7 @@ void SpreadSheet::setupContents()
// column 2
table->setItem(0, 2, new SpreadSheetItem("Price"));
table->item(0, 2)->setBackgroundColor(titleBackground);
- table->item(0, 2)->setToolTip("This collumn shows the price of the purchase");
+ table->item(0, 2)->setToolTip("This column shows the price of the purchase");
table->item(0, 2)->setFont(titleFont);
table->setItem(1, 2, new SpreadSheetItem("150"));
diff --git a/demos/symbianpkgrules.pri b/demos/symbianpkgrules.pri
index 68a82cd..c9cc492 100644
--- a/demos/symbianpkgrules.pri
+++ b/demos/symbianpkgrules.pri
@@ -13,4 +13,6 @@ vendorinfo = \
demos_deployment.pkg_prerules += vendorinfo
DEPLOYMENT += demos_deployment
-isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
+isEmpty(ICON):contains(TEMPLATE, ".*app"):contains(QT, gui):contains(CONFIG, qt):!contains(CONFIG, "no_icon") {
+ ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
+}
diff --git a/demos/textedit/textedit.qdoc b/demos/textedit/textedit.qdoc
index f3ba4d7..c27589e 100644
--- a/demos/textedit/textedit.qdoc
+++ b/demos/textedit/textedit.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/dist/changes-4.6.4 b/dist/changes-4.6.4
index 389aa3a..3949b9a 100644
--- a/dist/changes-4.6.4
+++ b/dist/changes-4.6.4
@@ -66,8 +66,6 @@ QtOpenGL
- QGLShaderProgram
* [QTBUG-12478] Don't resolve GLSL extensions if no shaders.
* [QTBUG-12591] setUniformValue(QSize) was setting (w,w) not (w,h).
- * [QTBUG-12862] Don't #define highp/mediump/lowp if the desktop OpenGL
- implementation has the GL_ARB_ES2_compatibility extension.
* [QTBUG-12554] Wrong OpenGLVersionFlags on OpenGL 4.0 systems.
QtScript
@@ -109,7 +107,7 @@ Third party components
Qt for Unix (X11 and Mac OS X)
------------------------------
- -
+ -
Qt for Linux/X11
----------------
diff --git a/dist/changes-4.7.1 b/dist/changes-4.7.1
index 51a10a3..b25b95c 100644
--- a/dist/changes-4.7.1
+++ b/dist/changes-4.7.1
@@ -13,7 +13,6 @@ corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
Tracker, or the Merge Request queue of the public source repository.
Qt Bug Tracker: http://bugreports.qt.nokia.com
-Task Tracker: http://qt.nokia.com/developer/task-tracker
Merge Request: http://qt.gitorious.org
****************************************************************************
@@ -31,8 +30,6 @@ Optimizations
- On x86 and 86_64, the memory access has been improved for alpha blending
and for some composition functions.
- * See list of Important Behavior Changes below
-
****************************************************************************
* Library *
@@ -42,69 +39,68 @@ QtCore
------
- Containers
- * [QTBUG-13079] Fix assingment of a container included in the container itself
+ * [QTBUG-13079] Fix assignment of a container included in the container
+ itself.
- - QLibrary
- * [QT-3825] System libraries are only loaded from the system directories
+ - QEventDispatcherUnix
+ * [QTBUG-13633] Do not process too many timer events if other events need
+ to be processed first.
+ - QLibrary
+ * [QT-3825] System libraries are only loaded from the system directories.
- QUuid
- * [QTBUG-11213] QUuid::createUuid() should not generate identical sequences on UNIX
-
- - QEventDispatcherUnix
- * [QTBUG-13633] Do not process too many timer events if other events need
- to be processed first
+ * [QTBUG-11213] QUuid::createUuid() should not generate identical sequences
+ on UNIX.
QtGui
-----
- - QGraphicsWidget
- * [QTBUG-13188] Make sure a font that has propagated from a parent can
- be set on a QPainter.
- * [QT-3808] Issues when applying effects in combination with ItemHasNoContents flag.
+ - QGraphicsEffect
+ * [QT-3633] Wrong bounding rect.
- QGraphicsItem
* [QTBUG-3633, QT-3828] Wrong children bounding rect when applying effects.
- - QGraphicsEffect
- * [QT-3633] Wrong bounding rect.
-
- QGraphicsScene
* [QT-3674] Spurious assert triggered from render().
+ - QGraphicsWidget
+ * [QTBUG-13188] Make sure a font that has propagated from a parent can
+ be set on a QPainter.
+ * [QT-3808] Issues when applying effects in combination with
+ ItemHasNoContents flag.
+
+ - QGtkStyle
+ * [QTBUG-13125] Fixed a regression with custom itemview background color.
+
+ - QLineEdit
+ * [QTBUG-13520] Fixed the scrolling of text with right alignment.
+
- QPainter
* [QTBUG-13429] Fixed scale point drawing with square cap in the raster
engine, plus some potential floating point overflows in the rasterizer.
* Optimized pixmap drawing with SmoothPixmapTransform.
- - QStaticText
- * [QTBUG-12614] Fix crash with zero-width string.
- * [QTBUG-12540] Fix rendering of large glyphs with OpenGL2 paint engine.
-
-
- QPinchGesture
* The scaleFactor and totalScaleFactor now represent a value that allows
an object to track a touchpoint during a Pinch Gesture even when using
sequences for zooming.
- Therefor the scale factors are initialized to 1.0 and for every new
+ Therefore the scale factors are initialized to 1.0 and for every new
sequence the totalScaleFactor is multiplied with the scaleFactor of the
new sequence.
- - QLineEdit
- * [QTBUG-13520] Fixed the scrolling of text with right alignment
-
- QPixmap
- * [QTBUG-12560] Fixed a regression preventing loading images without extensions
+ * [QTBUG-12560] Fixed a regression preventing loading images without
+ extensions.
- - QTreeView
- * [QTBUG-13567] Do not scroll to top if last item is removed
-
- - QGtkStyle
- * [QTBUG-13125] Fixed a regression with custom itemview background color.
+ - QStaticText
+ * [QTBUG-12614] Fix crash with zero-width string.
+ * [QTBUG-12540] Fix rendering of large glyphs with OpenGL2 paint engine.
-QtDBus
-------
+ - QTreeView
+ * [QTBUG-13567] Do not scroll to top if last item is removed.
QtMultimedia
@@ -115,151 +111,170 @@ QtMultimedia
* [QTBUG-11883] Fixed segmentation fault when closing a QAudioInput or
QAudioOutput.
+
QtNetwork
---------
- - QSslConfiguration
- * [QTBUG-13265] fix crash with empty configuration
- - QSslCertificate
- * [QTBUG-12489] support dates > 2049
- Bearer Management
* Improved reliability on Symbian and Maemo.
* Added connman/meego backend.
- IPv6
- * Disable on Symbian until OpenC properly supports it
+ * Disable on Symbian until OpenC properly supports it.
+ - QSslConfiguration
+ * [QTBUG-13265] Fixed crash with empty configuration.
+ - QSslCertificate
+ * [QTBUG-12489] Support dates > 2049.
- QNetworkAccessManager
- * [QTBUG-12285] Crash fix related to aborted uploads
+ * [QTBUG-12285] Crash fix related to aborted uploads.
QtOpenGL
--------
- QGL2PaintEngineEx
* Fixed drawing a large number of glyphs with the same font on systems
- with small texure size limits.
-
-QtOpenVG
---------
-
-
-QtWebKit
---------
-
-
-QtSql
------
-
+ with small texture size limits.
-QtSvg
------
QtXml
-----
* Fixed a crash when parsing invalid tag names.
+
QtXmlPatterns
-------------
- XML Schema internals:
- * [QTBUG-11559] Only parse 3 digits of time fraction
+ * [QTBUG-11559] Only parse 3 digits of time fraction.
+
QtDeclarative
-------------
- QML language
- * [QTBUG-13799] QML core module renamed to QtQuick to decouple it from Qt releases.
- Old "import Qt 4.7" will co-exist with "import QtQuick 1.0' at least during Qt 4.7 releases.
- * [QTBUG-13047] Support passing QObject derived types to QML methods
- * [QTBUG-12837] Support JS "in" operator on QML objects
- * [QTBUG-13045] Prevent calling deleteLater() from QML
- * [QTBUG-13043] Ignore non-scriptable properties in QML
- * [QTBUG-13114] Don't double call classBegin()
- * [QTBUG-12946] Ensure the onDestruction handlers are called before the expressions are cleared
- * [QTBUG-12599] Re-enabled script program caching on Symbian
- * [QTBUG-13374] Don't modify the signal order on the second dynamic meta object pass
- * Support for qsTrId and meta-data in comments for QML
- - QML debugging:
+ * [QTBUG-13799] QML core module renamed to QtQuick to decouple it from Qt
+ releases. Old "import Qt 4.7" will co-exist with "import QtQuick 1.0' at
+ least during Qt 4.7 releases.
+ * [QTBUG-13047] Support passing QObject derived types to QML methods.
+ * [QTBUG-12837] Support JS "in" operator on QML objects.
+ * [QTBUG-13045] Prevent calling deleteLater() from QML.
+ * [QTBUG-13043] Ignore non-scriptable properties in QML.
+ * [QTBUG-13114] Don't double call classBegin().
+ * [QTBUG-12946] Ensure the onDestruction handlers are called before the
+ expressions are cleared.
+ * [QTBUG-12599] Re-enabled script program caching on Symbian.
+ * [QTBUG-13374] Don't modify the signal order on the second dynamic meta
+ object pass.
+ * Support for qsTrId and meta-data in comments for QML.
+ - QML debugging
* [QTBUG-5162] The debugger is now activated with -qmljsdebugger command
- line arg to enable support for platforms without environment variables
- * Various improvements to ease debugging in creator
+ line arg to enable support for platforms without environment variables.
+ * Various improvements to ease debugging in creator.
- AnchorAnimation
- * [QTBUG-13398] Fix AnchorAnimation for multiple AnchorChanges with dependancies
+ * [QTBUG-13398] Fix AnchorAnimation for multiple AnchorChanges with
+ dependancies.
- AnchorChanges
- * [QTBUG-11834] Restore any absolute geometry changed by AnchorChanges when returning to the base state
+ * [QTBUG-11834] Restore any absolute geometry changed by AnchorChanges when
+ returning to the base state.
- Component
- * [QTBUG-13170] Complete Component::createObject() creation after setting the parent
+ * [QTBUG-13170] Complete Component::createObject() creation after setting
+ the parent.
- GridView
- * [QTBUG-13166] GridView.view property should not be writable
+ * [QTBUG-13166] GridView.view property should not be writable.
- Flickable
- * [QTBUG-13095] Ensure Flickable visibleArea is updated when view height changes
- * [QTBUG-13176] Avoid Flickable view jumping when drag threashold is exceeded
- * [QTBUG-13078] Fix poor flicking behavior with slower flicks
- * Handle QGraphicsWidgets in Flickable
+ * [QTBUG-13095] Ensure Flickable visibleArea is updated when view height
+ changes.
+ * [QTBUG-13176] Avoid Flickable view jumping when drag threashold is
+ exceeded.
+ * [QTBUG-13078] Fix poor flicking behavior with slower flicks.
+ * Handle QGraphicsWidgets in Flickable.
- FocusScope
- * [QTBUG-12649] Make sure onFocusChanged is correctly emitted for items in a FocusScope.
+ * [QTBUG-12649] Make sure onFocusChanged is correctly emitted for items
+ in a FocusScope.
- FontLoader
- * [QTBUG-13419] Don't add the same font to the font database multiple times
+ * [QTBUG-13419] Don't add the same font to the font database multiple
+ times.
+ - Image
+ * [QTBUG-13454] Changing the Image 'source' no longer goes through the
+ 'Loading' state if the image is cached.
+ * [QTBUG-13383] Do not reset sourceSize when changing image source url.
+ * [QTBUG-13002] Setting one dimension of the sourceSize should set the other
+ dimension.
+ * [QTBUG-12302] Fix remote image url redirects are done in the right thread.
+ * Ensure all image states are updated before emitting statusChanged signals.
- ListModel
- * [QTBUG-12363] Modifying an object returned by ListModel.get(0) didn't update the view
- * [QTBUG-13666] Calling set() and setProperty() on ListModel from a WorkerScript didn't update the view
- * Fix Worker ListModel to emit the right signal when items change
- * Fix crash with invalid role indexes
- * improved ListModel error messages
+ * [QTBUG-12363] Modifying an object returned by ListModel.get(0) didn't
+ update the view.
+ * [QTBUG-13666] Calling set() and setProperty() on ListModel from a
+ WorkerScript didn't update the view.
+ * Fix Worker ListModel to emit the right signal when items change.
+ * Fix crash with invalid role indexes.
+ * improved ListModel error messages.
- ListView
- * [QTBUG-13664] Models with a single role didn't always update correctly
- * [QTBUG-13543] Ensure flickable velocity is updated when view is moved by setCurrentIndex
- * [QTBUG-12664] Ensure highlight is positioned correctly in positionViewAtIndex()
- * [QTBUG-13166] Fix ListView.view attached property with VisualItemModel
- * [QTBUG-13039] Fix crash in synchronization of ListModel in WorkerThread
- * [QTBUG-11341] Flicking a ListView sometimes made it loose focus
- * [QTBUG-13166] ListView.view property should not be writable
+ * [QTBUG-13664] Models with a single role didn't always update correctly.
+ * [QTBUG-13543] Ensure flickable velocity is updated when view is moved by
+ setCurrentIndex.
+ * [QTBUG-12664] Ensure highlight is positioned correctly in
+ positionViewAtIndex().
+ * [QTBUG-13166] Fix ListView.view attached property with VisualItemModel.
+ * [QTBUG-13039] Fix crash in synchronization of ListModel in WorkerThread.
+ * [QTBUG-11341] Flicking a ListView sometimes made it lose focus.
+ * [QTBUG-13166] ListView.view property should not be writable.
+ - MouseArea
+ * [QTBUG-12250] When onDoubleClicked: is handled don't emit a second
+ onPressed/onClicked.
+ - NumberAnimation
+ * [QTBUG-12805] Clear previous animation data for non-triggering animations.
+ - ParentChange
+ * [QTBUG-13554] ParentChange fails to apply rotation changes of exactly 180
+ degrees.
- PathView
- * [QTBUG-13689] Moving items in a PathView caused PathView.onPath to be set to false
- * [QTBUG-13687] PathView didn't accept mouse events, preventing it from working in a Flickable
- * [QTBUG-13416] Fix PathView item position on insertion and removal
- * [QTBUG-13017] Fix PathView when setting an empty model that is later filled
- * [QTBUG-12747] PathView required some diagonal movement before a drag was initiated
+ * [QTBUG-13689] Moving items in a PathView caused PathView.onPath to be set
+ to false.
+ * [QTBUG-13687] PathView didn't accept mouse events, preventing it from
+ working in a Flickable.
+ * [QTBUG-13416] Fix PathView item position on insertion and removal.
+ * [QTBUG-13017] Fix PathView when setting an empty model that is later
+ filled.
+ * [QTBUG-12747] PathView required some diagonal movement before a drag was
+ initiated.
- Positioners
- * made positioners work with QGraphicsWidgets
+ * made positioners work with QGraphicsWidgets.
- PropertyChanges
- * [QTBUG-12559] Correctly apply PropertyChanges when entering an extended state directly from the base state
- - VisualDataModel
- * [QTBUG-13754] Fixed a crash when updating a property in ListModel with multiple roles
- * [QTBUG-13038] Fix VisualDataModel model update handling when rootIndex is specified
- * [QTBUG-13146] Handle layoutChanged() properly in QML views
- - XmlListModel
- * [QTBUG-13041] XmlListModel thread was left hanging on Symbian application exit
- - ParentChange
- * [QTBUG-13554] ParentChange fails to apply rotation changes of exactly 180 degrees
- - MouseArea
- * [QTBUG-12250] When onDoubleClicked: is handled don't emit a second onPressed/onClicked
- - Image
- * [QTBUG-13454] Changing the Image 'source' no longer goes through the 'Loading' state if the image is cached.
- * [QTBUG-13383] Do not reset sourceSize when changing image source url
- * [QTBUG-13002] Setting one dimension of the sourceSize should set the other dimensio
- * [QTBUG-12302] Fix remote image url redirects are done in the right thread
- * Ensure all image states are updated before emitting statusChanged signals
- - NumberAnimation
- * [QTBUG-12805] Clear previous animation data for non-triggering animations
+ * [QTBUG-12559] Correctly apply PropertyChanges when entering an extended
+ state directly from the base state.
+ - QDeclarativeImageProvider:
+ * Fixed memory leak.
+ * Improved concurrency when using in asynchronus mode.
- Repeater
- * [QTBUG-12905] Emit countChanged where appropriate in Repeater
+ * [QTBUG-12905] Emit countChanged where appropriate in Repeater.
- SmoothedAnimation
- * [QTBUG-12336] Update running animations if a SmoothedAnimation is changed
+ * [QTBUG-12336] Update running animations if a SmoothedAnimation is changed.
- SpringAnimation
- * [QTBUG-13044] SpringAnimation velocity animation stop logic was fragile
+ * [QTBUG-13044] SpringAnimation velocity animation stop logic was fragile.
- Text
- * [QTBUG-13453] Fix jerky scrolling caused by unnecessary repaints of Text element
- * [QTBUG-13142] Fix alignment of shadow for rich text when using text styles
- * [QTBUG-11002] Improve QML text rendering when LCD smoothing is enabled for OS X
+ * [QTBUG-13453] Fix jerky scrolling caused by unnecessary repaints of Text
+ element.
+ * [QTBUG-13142] Fix alignment of shadow for rich text when using text
+ styles.
+ * [QTBUG-11002] Improve QML text rendering when LCD smoothing is enabled
+ for OS X.
- TextInput
- * [QTBUG-11127] Fix autoScroll implementation
- - XmlHttpRequest
- * [QTBUG-13117] Fix responseText to check the charset encoding field and also to not assume that the data is xml
+ * [QTBUG-11127] Fix autoScroll implementation.
+ - VisualDataModel
+ * [QTBUG-13754] Fixed a crash when updating a property in ListModel with
+ multiple roles.
+ * [QTBUG-13038] Fix VisualDataModel model update handling when rootIndex is
+ specified.
+ * [QTBUG-13146] Handle layoutChanged() properly in QML views.
- WebView
- * [QTBUG-13342] Ensure WebView gets focus when an editable node is clicked on
- - QDeclarativeImageProvider:
- * Fixed memory leak
- * Improved concurrency when using in assynchronus mode.
+ * [QTBUG-13342] Ensure WebView gets focus when an editable node is clicked.
+ - XmlHttpRequest
+ * [QTBUG-13117] Fix responseText to check the charset encoding field and
+ also to not assume that the data is xml.
+ - XmlListModel
+ * [QTBUG-13041] XmlListModel thread was left hanging on Symbian application
+ exit.
+
Qt Plugins
----------
-
- Jpeg image IO plugin
* [QTBUG-13653] Fixed infinite loop when loading jpeg without EOI marker
from memory.
@@ -275,15 +290,16 @@ Qt for Unix (X11 and Mac OS X)
Qt for Linux/X11
----------------
- - The configure script now detects all vector extensions of x86 and x86_64
+ - The configure script now detects all vector extensions of x86 and x86_64.
Qt for Windows
--------------
- Event System:
- * [QTBUG-12721] Fix Qt applications freezing until mouse/keyboard events occur.
+ * [QTBUG-12721] Fix Qt applications freezing until mouse/keyboard events
+ occur.
- Drag & Drop:
- * [QTBUG-13787] Fixed a possible crash with mingw
+ * [QTBUG-13787] Fixed a possible crash with mingw.
- QPrinter
* [QTBUG-12263] Strokes were in some cases not printed with the correct
@@ -303,7 +319,6 @@ Qt for Mac OS X
Qt for Symbian
--------------
-
- configure
* [QTBUG-4586] Fixed wrong paths in include/ActiveQt/headers.pri.
* [QTBUG-11671] Fixed audio-backend detection in configure tests.
@@ -319,21 +334,27 @@ Qt for Symbian
* [QTBUG-13081] vc[x]proj generators: support /MAP option without file
name.
* [QTBUG-13902] Added support for unsigned smart installer package creation.
- * [QTBUG-13991] No longer need to manually edit smart installer pkg file for publishing.
+ * [QTBUG-13991] No longer need to manually edit smart installer pkg file for
+ publishing.
* [QT-3949] Load environment.prf from Symbian SDK if it exists there.
- * [QTBUG-13499] Provide a way to compile with RVCT 4.0 using generated Makefile.
+ * [QTBUG-13499] Provide a way to compile with RVCT 4.0 using generated
+ Makefile.
* [QTBUG-13336] Ignore MAKEFILE variable for Symbian abld and sbsv2 builds.
- * [QTBUG-13363] Fix Symbian handling of projects with special characters in TARGET.
+ * [QTBUG-13363] Fix Symbian handling of projects with special characters in
+ TARGET.
* [QTBUG-12762 & QTBUG-13307] Gcce building support for symbian-sbsv2
* [QTBUG-13147] Added support for DEPLOYMENT.pkg_build_version
* [QTBUG-12884] Fix "installer_sis" and "deploy" targets when TARGET has path.
* [QTBUG-12879] Fix check to remove unnecessary deployments in Symbian.
* [QTBUG-12716] Make bld.inf target in Symbian mkspecs to depend on .pro file.
- * [QTBUG-12715] Rename Symbian generated mmp/mk files to include target in filename.
- * [QTBUG-12617] Fix package header in cases where VERSION doesn't contain all values.
+ * [QTBUG-12715] Rename Symbian generated mmp/mk files to include target in
+ filename.
+ * [QTBUG-12617] Fix package header in cases where VERSION doesn't contain all
+ values.
* Fix run and runonphone targets for projects that have TARGET with path.
* Fix QT_LIBINFIX for QT_PLUGINS_BASE_DIR.
- * No longer require PRE_TARGETDEPS items to be absolute for symbian-sbsv2 mkspec.
+ * No longer require PRE_TARGETDEPS items to be absolute for symbian-sbsv2
+ mkspec.
* Do smart command replacement for commands containing $$QMAKE_*
command variables, such as $$QMAKE_COPY, when generating bld.inf
extensions for QMAKE_EXTRA_* variables for symbian-sbsv2 mkspec.
@@ -364,7 +385,8 @@ Qt for Symbian
Check S60_VERSION instead of existence of certain files in bearer plugin.
- Demos & Examples
- * [QTBUG-13461] Remove some .pro statements left behind after IAP usage cleanup
+ * [QTBUG-13461] Remove some .pro statements left behind after IAP usage
+ cleanup.
* [QTBUG-12276] Assigned valid UID3 for fortuneserver example.
Qt for Windows CE
@@ -372,25 +394,21 @@ Qt for Windows CE
- Gui
* [QTBUG-8408] Show the [X] button on Windows mobile when maximizing.
+
****************************************************************************
* Tools *
****************************************************************************
- - Designer
-
- uic
- * Improve warnings and error reports
+ * Improve warnings and error reports.
- moc
- * Show an error if NOTIFY refer to a wrong signal in Q_PROPERTY
+ * Show an error if NOTIFY refer to a wrong signal in Q_PROPERTY.
- QML Viewer
- * [QTBUG-13347] Paused orientation sensors in Qml Viewer when the application window is not active to save device battery
- * [QTBUG-11019] Add a menu option to open remote files in the QML viewer
- * QML Viewer is deployed under QtDemos folder instead of QtExamples folder in Symbian application menu
-
-****************************************************************************
-* Important Behavior Changes *
-****************************************************************************
-
+ * [QTBUG-13347] Paused orientation sensors in Qml Viewer when the
+ application window is not active to save device battery.
+ * [QTBUG-11019] Add a menu option to open remote files in the QML viewer.
+ * QML Viewer is deployed under QtDemos folder instead of QtExamples
+ folder in Symbian application menu.
diff --git a/dist/changes-4.7.2 b/dist/changes-4.7.2
new file mode 100644
index 0000000..49bdd8e
--- /dev/null
+++ b/dist/changes-4.7.2
@@ -0,0 +1,158 @@
+Qt 4.7.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 4.7.0. For more details,
+refer to the online documentation included in this distribution. The
+documentation is also available online:
+
+ http://qt.nokia.com/doc/4.7
+
+The Qt version 4.7 series is binary compatible with the 4.6.x series.
+Applications compiled for 4.6 will continue to run with 4.7.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker or the Merge Request queue
+of the public source repository.
+
+Qt Bug Tracker: http://bugreports.qt.nokia.com
+Merge Request: http://qt.gitorious.org
+
+****************************************************************************
+* General *
+****************************************************************************
+
+New features
+------------
+
+ - SomeClass, SomeOtherClass
+ * New classes for foo, bar and baz
+
+Optimizations
+-------------
+
+ - Optimized foo in QSomeClass
+ * See list of Important Behavior Changes below
+
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtCore
+------
+
+ - foo
+ * bar
+
+QtGui
+-----
+
+ - foo
+ * bar
+
+QtDBus
+------
+
+ - foo
+ * bar
+
+QtNetwork
+---------
+
+ - foo
+ * bar
+
+QtOpenGL
+--------
+
+ - foo
+ * bar
+
+QtScript
+--------
+
+ - foo
+ * bar
+
+QtSql
+-----
+
+ - foo
+ * bar
+
+QtXml
+-----
+
+ - foo
+ * bar
+
+Qt Plugins
+----------
+
+ - foo
+ * bar
+
+Third party components
+----------------------
+
+ - Updated foo to version 2.3.9.
+
+ - Updated bar to the latest version from baz.org.
+
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+Qt for Unix (X11 and Mac OS X)
+------------------------------
+
+ -
+
+Qt for Linux/X11
+----------------
+
+ -
+
+Qt for Windows
+--------------
+
+ -
+
+Qt for Mac OS X
+---------------
+
+ -
+
+Qt for Embedded Linux
+---------------------
+
+ -
+
+DirectFB
+--------
+
+ -
+
+Qt for Windows CE
+-----------------
+
+ -
+
+****************************************************************************
+* Tools *
+****************************************************************************
+
+ - Designer
+ * foo
+
+ - qdoc3
+ * bar
+
+ - Linguist
+ * baz
+
+****************************************************************************
+* Important Behavior Changes *
+****************************************************************************
+
+ -
+
diff --git a/dist/changes-4.8.0 b/dist/changes-4.8.0
index f8ca4bc..c55faf6 100644
--- a/dist/changes-4.8.0
+++ b/dist/changes-4.8.0
@@ -37,6 +37,8 @@ Third party components
QtCore
------
- Removed support for QT_NO_THREAD define for QHostInfo.
+ - Optimized plugin loading on ELF platforms.
+ Print failure reason at runtime with QT_DEBUG_PLUGINS=1 in environment.
QtGui
-----
diff --git a/doc/src/bughowto.qdoc b/doc/src/bughowto.qdoc
index a833e00..1793fce 100644
--- a/doc/src/bughowto.qdoc
+++ b/doc/src/bughowto.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -34,7 +34,7 @@
about it so that we can fix it.
Before reporting a bug, please check the \l{FAQs}, \l{Platform
- Notes}, and the \l{Qt Bug Tracker} on the Qt website to see
+ and Compiler Notes}, and the \l{Qt Bug Tracker} on the Qt website to see
if the issue is already known.
The first thing you should do is to sign up for an account for
@@ -51,7 +51,7 @@
compiled with
\o Reliable and clear description on how to reproduce the problem
\endlist
-
+
If possible, please provide a test written using the QtTest module
as this will improve the procedure of reproducing your problem and
allow the developers to address the issue in a more efficient way.
diff --git a/doc/src/classes.qdoc b/doc/src/classes.qdoc
index b3f8869..66009f5 100644
--- a/doc/src/classes.qdoc
+++ b/doc/src/classes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/classes/exportedfunctions.qdoc b/doc/src/classes/exportedfunctions.qdoc
index b3fd5a0..ac6a970 100644
--- a/doc/src/classes/exportedfunctions.qdoc
+++ b/doc/src/classes/exportedfunctions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/classes/phonon-api.qdoc b/doc/src/classes/phonon-api.qdoc
index 6fe0223..6c9c8de 100644
--- a/doc/src/classes/phonon-api.qdoc
+++ b/doc/src/classes/phonon-api.qdoc
@@ -4114,6 +4114,13 @@
*/
/*!
+ \fn Phonon::VideoWidget::snapshot() const
+ \since 4.7
+
+ Returns a snapshot of the current frame shown in the widget.
+*/
+
+/*!
\enum Phonon::VideoWidget::ScaleMode
The ScaleMode enum describes how to treat aspect ratio during
@@ -4305,6 +4312,22 @@
*/
/*!
+ \class Phonon::VideoWidgetInterface44
+ \inmodule Phonon
+ \since 4.7
+*/
+
+/*!
+ \fn Phonon::VideoWidgetInterface44::snapshot() const
+*/
+
+/*!
+ \typedef Phonon::VideoWidgetInterfaceLatest
+ \inmodule Phonon
+ \since 4.7
+*/
+
+/*!
\class Phonon::PlatformPlugin
\inmodule Phonon
\since 4.4
@@ -5021,3 +5044,103 @@
\internal
*/
+/*!
+ \class Phonon::PulseSupport
+ \inmodule Phonon
+ \since 4.7
+ \internal
+*/
+
+/*!
+ \class Phonon::AudioDataOutput
+ \inmodule Phonon
+ \since 4.7
+
+ \brief The AudioDataOutput class provides access to audio data.
+
+ This class is used to obtain audio data, typically for the purpose of
+ visualizing it.
+
+ Although it is not designed for realtime performance, the latencies
+ associated with accessing the data should be low enough for applications
+ that provide visualizations of the data. This class can also be used to
+ save the audio data for further processing.
+*/
+
+/*!
+ \enum Phonon::AudioDataOutput::Channel
+
+ This enum describes the channel audio data belongs to.
+
+ \value LeftChannel
+ \value RightChannel
+ \value CenterChannel
+ \value LeftSurroundChannel
+ \value RightSurroundChannel
+ \value SubwooferChannel
+*/
+
+/*!
+ \property Phonon::AudioDataOutput::dataSize
+ \brief the number of samples passed via the dataReady() signal.
+*/
+
+/*!
+ \fn int Phonon::AudioDataOutput::sampleRate() const
+
+ Returns the sample rate measured in Hertz, as reported by the backend.
+ If the backend is unavailable -1 is returned.
+*/
+
+/*!
+ \fn void Phonon::AudioDataOutput::endOfMedia(int remainingSamples)
+
+ This signal is emitted before the final dataReady() signal is emitted for
+ a media. The \a remainingSamples value sent by the signal contains the
+ number of samples that will be sent in the final dataReady() signal for
+ the media.
+*/
+
+/*!
+ \fn Phonon::AudioDataOutput::dataReady(const QMap<Phonon::AudioDataOutput::Channel, QVector<qint16> > &data)
+
+ This signal is emitted whenever there is data available to read. The
+ \a data sent by the signal is supplied in the form of a map that holds the
+ data for different output channels.
+*/
+
+/*!
+ \fn Phonon::AudioDataOutputPrivate::AudioDataOutputPrivate()
+ \internal
+*/
+
+/*!
+ \fn Phonon::AudioDataOutputInterface::~AudioDataOutputInterface()
+
+ Destroys the data interface.
+*/
+
+/*!
+ \fn Phonon::AudioDataOutputInterface::frontendObject() const
+ \internal
+*/
+
+/*!
+ \fn Phonon::AudioDataOutputInterface::setFrontendObject(AudioDataOutput *)
+ \internal
+*/
+
+/*!
+ \fn Phonon::GlobalConfigPrivate::GlobalConfigPrivate()
+ \internal
+*/
+
+/*!
+ \fn Phonon::GlobalConfigPrivate::~GlobalConfigPrivate()
+ \internal
+*/
+
+/*!
+ \fn Phonon::SwiftSlider::~SwiftSlider()
+ \internal
+*/
diff --git a/doc/src/classes/phonon-namespace.qdoc b/doc/src/classes/phonon-namespace.qdoc
index 282c96f..c53f69b 100644
--- a/doc/src/classes/phonon-namespace.qdoc
+++ b/doc/src/classes/phonon-namespace.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/credits.qdoc b/doc/src/credits.qdoc
index 2f1d76e..20aa366 100644
--- a/doc/src/credits.qdoc
+++ b/doc/src/credits.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc
index 2ca9418..04d7f07 100644
--- a/doc/src/declarative/advtutorial.qdoc
+++ b/doc/src/declarative/advtutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/anchor-layout.qdoc b/doc/src/declarative/anchor-layout.qdoc
index 99f7777..b77ce36 100644
--- a/doc/src/declarative/anchor-layout.qdoc
+++ b/doc/src/declarative/anchor-layout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/animation.qdoc b/doc/src/declarative/animation.qdoc
index 53a0c55..208a1c4 100644
--- a/doc/src/declarative/animation.qdoc
+++ b/doc/src/declarative/animation.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc
index e327d4a..8ab06ab 100644
--- a/doc/src/declarative/basictypes.qdoc
+++ b/doc/src/declarative/basictypes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -156,8 +156,10 @@
Example:
\qml
Rectangle { color: "steelblue" }
+ Rectangle { color: "transparent" }
Rectangle { color: "#FF0000" }
Rectangle { color: "#800000FF" }
+ Rectangle { color: "#00000000" } // ARGB fully transparent
\endqml
Or with the \l{QML:Qt::rgba()}{Qt.rgba()}, \l{QML:Qt::hsla()}{Qt.hsla()}, \l{QML:Qt::darker()}{Qt.darker()},
@@ -353,9 +355,11 @@
\brief A list of objects.
- A list of objects. While not technically a basic type, QML also
- supports lists of object types. When used from QML, the engine
- automatically appends each value to the list.
+ A list type contains a list of objects. While not technically
+ a basic type, QML supports lists of object types. When used
+ from QML, the engine automatically appends each value to the list.
+ Items in the list can be accessed by index using the usual
+ \c listName[index] syntax.
For example, the \l Item class contains a list property named
children that can be used like this:
@@ -364,14 +368,87 @@
Item {
children: [
Item { id: child1 },
- Rectangle { id: child2 },
+ Rectangle { id: child2; width: 200 },
Text { id: child3 }
]
+
+ Component.onCompleted: {
+ console.log("Width of child rectangle:", children[1].width)
+ }
}
\endqml
- \c child1, \c child2 and \c child3 will all be added to the children list
+ \c child1, \c child2 and \c child3 will be added to the children list
in the order in which they appear.
+ List \l {Adding new properties}{properties} can be created as a
+ \c variant type, or as a \c list<Type> type, where \c Type is the
+ type of the object in the list:
+
+ \qml
+ Item {
+ property variant values: [ 10, 20, 'abc', 'xyz' ]
+
+ property list<Rectangle> rects: [
+ Rectangle { width: 100; height: 100},
+ Rectangle { width: 200; height: 200}
+ ]
+ }
+ \endqml
+
+ A \c variant list can contain values of any of the \l {QML Basic Types}{basic QML types}
+ such as numbers, strings, etc. while a \c list<Type> list can only contain values
+ that match (or are derived from) the specified \c Type.
+
+ A list property can be cleared by setting it to an empty list:
+
+ \qml
+ Item {
+ children: []
+ }
+ \endqml
+
+ A list property cannot be modified in any other way. Items cannot be dynamically added to
+ or removed from the list through JavaScript operations; any \c push() operations on the
+ list only modify a \e copy of the list and not the actual list. (These current limitations
+ are due to restrictions on \l {Property Binding} where lists are involved.)
+
+ To create a modifiable list, create an array object from within a \c .js JavaScript file,
+ or implement a custom list element in C++. Here is a QML element that modifies the list in a
+ JavaScript file:
+
+ \table
+ \row
+ \o
+ \qml
+ // QML
+ import "script.js" as Script
+
+ Item {
+ Component.onCompleted: {
+ Script.addItem('abc')
+ console.log("Added:", Script.getList()[0])
+ }
+ }
+ \endqml
+
+ \o
+ \code
+ // script.js
+ var myArray = new Array()
+
+ function getList() {
+ return myArray
+ }
+
+ function addItem(item) {
+ myArray.push(item)
+ }
+ \endcode
+ \endtable
+
+ However, note that a JavaScript list should not be used as a QML \c property value,
+ as the property is not updated when the list changes.
+
\sa {QML Basic Types}
*/
diff --git a/doc/src/declarative/codingconventions.qdoc b/doc/src/declarative/codingconventions.qdoc
index aa4feef..ba789e0 100644
--- a/doc/src/declarative/codingconventions.qdoc
+++ b/doc/src/declarative/codingconventions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/declarativeui.qdoc b/doc/src/declarative/declarativeui.qdoc
index a8df4b1..28a8a70 100644
--- a/doc/src/declarative/declarativeui.qdoc
+++ b/doc/src/declarative/declarativeui.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/dynamicobjects.qdoc b/doc/src/declarative/dynamicobjects.qdoc
index e735bce..daf2ae1 100644
--- a/doc/src/declarative/dynamicobjects.qdoc
+++ b/doc/src/declarative/dynamicobjects.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -173,7 +173,11 @@ component. Each instance runs a NumberAnimation, and when the animation has fini
Alternatively, the \c application.qml could have destroyed the created object
by calling \c object.destroy().
-Notice that if a \c SelfDestroyingRect instance was created statically like this:
+Note that it is safe to call destroy() on an object within that object. Objects are not destroyed the
+instant destroy() is called, but are cleaned up sometime between the end of that script block and the next frame
+(unless you specified a non-zero delay).
+
+Note also that if a \c SelfDestroyingRect instance was created statically like this:
\qml
Item {
diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc
index 252b964..54f07a2 100644
--- a/doc/src/declarative/elements.qdoc
+++ b/doc/src/declarative/elements.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -37,8 +37,110 @@
To see the QML elements listed by functional area, see the
\l{Groups Of Related QML Elements} page.
- \generatelist qmlclasses
-
+ \table
+ \header \o {2,1} \bold {Basic Visual Items}
+ \row \o \l {Item} \o Basic item element inherited by all visual items in QML
+ \row \o \l {Rectangle} \o Basic visual rectangle element
+ \row \o \l {Gradient} \o Defines a gradient between two or more colors
+ \row \o \l {GradientStop} \o Defines a color used in a \l {Gradient}
+ \row \o \l {Image} \o Allows the use of bitmaps to a scene
+ \row \o \l {BorderImage} (Item-specific) \o Defines an image as a border
+ \row \o \l {AnimatedImage} \o For playing animations stored as a series of frames
+ \row \o \l {Text} \o Allows the use of formatted text in a scene
+ \row \o \l {TextInput} \o Displays an editable line of text
+ \row \o \l {IntValidator} \o Validator for integer values
+ \row \o \l {DoubleValidator} \o Validator for non-integer values
+ \row \o \l {RegExpValidator} \o Validator for string regular expressions
+ \row \o \l {TextEdit} \o Displays multiple lines of editable formatted text
+
+ \header \o {2,1} \bold {Basic Interaction Items}
+ \row \o \l {MouseArea} \o Handles mouse interactions
+ \row \o \l {FocusScope} \o For keyboard focus handling
+ \row \o \l {Flickable} \o Provides a surface that can be "flicked"
+ \row \o \l {Flipable} \o Provides a surface that produces flipping effects
+ \row \o \l {GestureArea} (experimental) \o Enables simple gesture handling
+
+ \header \o {2,1} \bold {States}
+ \row \o \l {State} \o Defines sets of configurations of objects and properties
+ \row \o \l {PropertyChanges} \o Describes property changes within a state
+ \row \o \l {StateGroup} \o Contains a set of states and state transitions
+ \row \o \l {StateChangeScript} \o Allows script binding in a state
+ \row \o \l {ParentChange} (Item-specific) \o Re-parent an Item in a state change
+ \row \o \l {AnchorChanges} \o Change the anchors of an item in a state
+
+ \header \o {2,1} \bold {Animation and Transitions}
+ \row \o \l {Behavior} \o Specifies a default animation for property changes
+ \row \o \l {SequentialAnimation} \o Runs animations sequentially
+ \row \o \l {ParallelAnimation} \o Runs animations in parallel
+ \row \o \l {PropertyAnimation} \o Animates property changes
+ \row \o \l {NumberAnimation} \o Animates properties of type qreal
+ \row \o \l {Vector3dAnimation} \o Animates properties of type QVector3d
+ \row \o \l {ColorAnimation} \o Animates color changes
+ \row \o \l {RotationAnimation} \o Animates rotations
+ \row \o \l {ParentAnimation} \o Animates parent changes
+ \row \o \l {AnchorAnimation} \o Animates anchor changes
+ \row \o \l {PauseAnimation} \o Pauses an animation
+ \row \o \l {SmoothedAnimation} \o Allows a property to smoothly track a value
+ \row \o \l {SpringAnimation} \o Allows a property to track a value in a spring-like motion
+ \row \o \l {PropertyAction} \o Sets immediate property changes during animation
+ \row \o \l {ScriptAction} \o Runs scripts during an animation
+ \row \o \l {Transition} \o Animates transitions during state changes
+
+ \header \o {2,1} \bold {Working with Data}
+ \row \o \l {Binding} \o Binds any value to any property
+ \row \o \l {ListModel} \o Defines a list of data
+ \row \o \l {ListElement} \o Defines a data item in a \l {ListModel}
+ \row \o \l {VisualItemModel} \o Contains items that already defines its own visual delegate
+ \row \o \l {VisualDataModel} \o Encapsulates a model and a delegate
+ \row \o \l {Package} \o Collection that enables sharing of items within different views
+ \row \o \l {XmlListModel} \o Specifies a model using XPath expressions
+ \row \o \l {XmlRole} \o Specifies a role for an \l {XmlListModel}
+
+ \header \o {2,1} \bold {Views}
+ \row \o \l {ListView} \o Provides a list visualization of a model
+ \row \o \l {GridView} \o Provides a grid visualization of a model
+ \row \o \l {PathView} \o Visualizes a model's contents along a path
+ \row \o \l {Path} \o Defines a path used by \l {PathView}
+ \row \o \l {PathLine} \o Defines a line in \l {Path}
+ \row \o \l {PathQuad} \o Defines a quadratic Bezier curve in a \l {Path}
+ \row \o \l {PathCubic} \o Defines a cubic Bezier curve in a \l {Path}
+ \row \o \l {PathAttribute} \o Allows the setting of attributes along a \l {Path}
+ \row \o \l {PathPercent} \o Modifies the item distribution along a \l {Path}
+ \row \o \l {WebView} \o Allows the addition of web content to a canvas
+
+ \header \o {2,1} \bold {Positioners}
+ \row \o \l {Column} \o Arranges its children vertically
+ \row \o \l {Row} \o Arranges its children horizontally
+ \row \o \l {Grid} \o Positions its children in a grid
+ \row \o \l {Flow} \o Positions its children with wrapping support
+
+ \header \o {2,1} \bold {Utility}
+ \row \o \l {Connections} \o Explicitly connects signals and signal handlers
+ \row \o \l {Component} \o Encapsulate QML items as a component
+ \row \o \l {Timer} \o Provides timed triggers
+ \row \o \l {QML:QtObject} {QtObject} \o Basic element containing only the objectName property
+ \row \o \l {QML:Qt} {Qt} \o The QML global Qt object provides useful enums and functions from Qt.
+ \row \o \l {WorkerScript} \o Enables the use of threads in QML
+ \row \o \l {Loader} \o Controls the loading of items or components
+ \row \o \l {Repeater} \o Uses a model to create multiples of components
+ \row \o \l {SystemPalette} \o Provides access to the Qt palettes
+ \row \o \l {FontLoader} \o Loads fonts by name or URL
+ \row \o \l {LayoutItem} \o Allows declarative UI elements inside Qt's Graphics View layouts
+
+ \header \o {2,1} \bold {Transforms}
+ \row \o \l {Scale} \o Assigns item scaling behaviors
+ \row \o \l {Rotation} \o Assigns item rotation behaviors
+ \row \o \l {Translate} \o Assigns item translation behaviors
+
+ \header \o {2,1} \bold {Effects}
+ \row \o \l {Particles} (experimental) \o Generates and animates particles
+ \row \o \l {ParticleMotionLinear} \o Adds linear motion behavior to \l {Particles}
+ \row \o \l {ParticleMotionGravity} \o Adds gravitational motion to \l {Particles}
+ \row \o \l {ParticleMotionWander} \o Adds varied motions to \l {Particles}
+ \endtable
+
+
+
*/
diff --git a/doc/src/declarative/example-slideswitch.qdoc b/doc/src/declarative/example-slideswitch.qdoc
index 09b6006..bad8bbf 100644
--- a/doc/src/declarative/example-slideswitch.qdoc
+++ b/doc/src/declarative/example-slideswitch.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc
index 3f075bb..224d346 100644
--- a/doc/src/declarative/examples.qdoc
+++ b/doc/src/declarative/examples.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/extending-tutorial.qdoc b/doc/src/declarative/extending-tutorial.qdoc
index 349ac30..2bfe62e 100644
--- a/doc/src/declarative/extending-tutorial.qdoc
+++ b/doc/src/declarative/extending-tutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -260,49 +260,39 @@ custom QML types may see unexpected behavior if bindings are not implemented.
The \c PieChart type currently has a string-type property and a color-type property.
It could have many other types of properties. For example, it could have an
-enum-type property to store a display mode for each chart:
+int-type property to store an identifier for each chart:
\code
// C++
class PieChart : public QDeclarativeItem
{
- Q_ENUMS(DisplayMode)
- Q_PROPERTY(DisplayMode displayMode READ displayMode WRITE setDisplayMode)
+ Q_PROPERTY(int chartId READ chartId WRITE setChartId NOTIFY chartIdChanged)
...
public:
- enum DisplayMode {
- MultiLevel,
- Exploded,
- ThreeDimensional
- };
-
- void setDisplayMode(DisplayMode mode);
- DisplayMode displayMode() const;
+ void setChartId(int chartId);
+ int chartId() const;
...
+
+ signals:
+ void chartIdChanged();
};
// QML
PieChart {
...
- displayMode: PieChart.Exploded
+ chartId: 100
}
\endcode
We can also use various other property types. QML has built-in support for the following
-types:
+types listed in the \l{Extending Types from QML} document, including the following:
\list
-\o bool
-\o unsigned int, int
-\o float, double, qreal
-\o QString
-\o QUrl
-\o QColor
+\o bool, unsigned int, int, float, double, qreal
+\o QString, QUrl, QColor
\o QDate, QTime, QDateTime
-\o QPoint, QPointF
-\o QSize, QSizeF
-\o QRect, QRectF
+\o QPoint, QPointF, QSize, QSizeF, QRect, QRectF
\o QVariant
\endlist
diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc
index df8a1e7..19e9ffc 100644
--- a/doc/src/declarative/extending.qdoc
+++ b/doc/src/declarative/extending.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -80,19 +80,14 @@ Types can be registered by libraries, application code, or by plugins
Once registered, all \l {Qt's Property System}{properties} of the
supported types are available in QML. QML has intrinsic support for
-properties of these types:
+properties of the types listed in the \l{Extending Types from QML}
+document, including the following:
\list
-\o bool
-\o unsigned int, int
-\o float, double, qreal
-\o QString
-\o QUrl
-\o QColor
+\o bool, unsigned int, int, float, double, qreal
+\o QString, QUrl, QColor
\o QDate, QTime, QDateTime
-\o QPoint, QPointF
-\o QSize, QSizeF
-\o QRect, QRectF
+\o QPoint, QPointF, QSize, QSizeF, QRect, QRectF
\o QVariant
\endlist
@@ -432,7 +427,7 @@ on<Property-name>Changed, regardless of the name used for the NOTIFY
signal in C++. We recommend using <property-name>Changed() for the
NOTIFY signal in C++.
-See also \l {Extending types from QML}.
+See also \l {Extending Types from QML}.
\section1 Methods
@@ -640,7 +635,7 @@ public:
/*!
\page qml-extending-types.html
-\title Extending types from QML
+\title Extending Types from QML
Many of the elements available for use in QML are implemented in
\l {Extending QML in C++}{C++}. These types are know as "core types". QML
@@ -652,7 +647,8 @@ language.
\section1 Adding new properties
-New properties can be added to an existing type. These new properties are
+New properties can be added to an existing type using the \c property keyword.
+These new properties are
available for use within QML, and also appear as regular Qt properties on the
C++ object, accessible through the regular property access mechanisms.
@@ -684,8 +680,12 @@ like this:
property list<Item> listOfItemsProperty
\endcode
+Custom types must be registered with qmlRegisterType() to be usable as a property
+type. Also note that list properties cannot be modified like ordinary JavaScript
+arrays; see the \l {list}{list type documentation} for details.
+
QML supports two methods for adding a new property to a type: a new property
-definition, and a property alias.
+definition, and a property alias. These are shown below.
\section2 Property definitions
diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc
index c3c94c5..2e74fe0 100644
--- a/doc/src/declarative/focus.qdoc
+++ b/doc/src/declarative/focus.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/globalobject.qdoc b/doc/src/declarative/globalobject.qdoc
index a9aee2f..ffc84f9 100644
--- a/doc/src/declarative/globalobject.qdoc
+++ b/doc/src/declarative/globalobject.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/integrating.qdoc b/doc/src/declarative/integrating.qdoc
index 2586009..7028585 100644
--- a/doc/src/declarative/integrating.qdoc
+++ b/doc/src/declarative/integrating.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -47,7 +47,7 @@ qmlView->setSource(QUrl::fromLocalFile("myqml.qml"));
QWidget *widget = myExistingWidget();
QVBoxLayout *layout = new QVBoxLayout(widget);
-widget->addWidget(qmlView);
+layout->addWidget(qmlView);
\endcode
The one drawback to this approach is that QDeclarativeView is slower to initialize
diff --git a/doc/src/declarative/javascriptblocks.qdoc b/doc/src/declarative/javascriptblocks.qdoc
index d290690..b6fad5b 100644
--- a/doc/src/declarative/javascriptblocks.qdoc
+++ b/doc/src/declarative/javascriptblocks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc
index 25a61c9..011eb63 100644
--- a/doc/src/declarative/modules.qdoc
+++ b/doc/src/declarative/modules.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/network.qdoc b/doc/src/declarative/network.qdoc
index 60359de..a19ca6b 100644
--- a/doc/src/declarative/network.qdoc
+++ b/doc/src/declarative/network.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/positioners.qdoc b/doc/src/declarative/positioners.qdoc
index 8c9b8b7..9265732 100644
--- a/doc/src/declarative/positioners.qdoc
+++ b/doc/src/declarative/positioners.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/propertybinding.qdoc b/doc/src/declarative/propertybinding.qdoc
index f58d8fe..3bf85de 100644
--- a/doc/src/declarative/propertybinding.qdoc
+++ b/doc/src/declarative/propertybinding.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativedebugging.qdoc b/doc/src/declarative/qdeclarativedebugging.qdoc
index 26d3b38..9e0a969 100644
--- a/doc/src/declarative/qdeclarativedebugging.qdoc
+++ b/doc/src/declarative/qdeclarativedebugging.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativedocument.qdoc b/doc/src/declarative/qdeclarativedocument.qdoc
index b6af90b..8af24a6 100644
--- a/doc/src/declarative/qdeclarativedocument.qdoc
+++ b/doc/src/declarative/qdeclarativedocument.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativei18n.qdoc b/doc/src/declarative/qdeclarativei18n.qdoc
index 620b902..0d5fbcc 100644
--- a/doc/src/declarative/qdeclarativei18n.qdoc
+++ b/doc/src/declarative/qdeclarativei18n.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc
index c97240c..1d807e3 100644
--- a/doc/src/declarative/qdeclarativeintro.qdoc
+++ b/doc/src/declarative/qdeclarativeintro.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -37,7 +37,7 @@ interface is specified as a tree of objects with properties.
This introduction is meant for those with little or no programming
experience. JavaScript is used as a scripting language in QML, so you may want
-to learn a bit more about it (\l{JavaScript: The Definitive Guide}) before diving
+to learn a bit more about it (\l{Javascript Guide}) before diving
deeper into QML. It's also helpful to have a basic understanding of other web
technologies like HTML and CSS, but it's not required.
@@ -65,8 +65,8 @@ types always begin with a capital letter. In the above example, there are
two objects, a \l Rectangle, and an \l Image. Between the braces, we can specify
information about the object, such as its properties.
-Properties are specified as \c {property: value}. In the above example, we
-can see the Image has a property named \c source, which has been assigned the
+Properties are specified as \c {property: value}. In the above example, we
+can see the Image has a property named \c source, which has been assigned the
value \c "pics/logo.png". The property and its value are separated by a colon.
Properties can be specified one-per-line:
diff --git a/doc/src/declarative/qdeclarativemodels.qdoc b/doc/src/declarative/qdeclarativemodels.qdoc
index 7548c96..e11cd56 100644
--- a/doc/src/declarative/qdeclarativemodels.qdoc
+++ b/doc/src/declarative/qdeclarativemodels.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativeperformance.qdoc b/doc/src/declarative/qdeclarativeperformance.qdoc
index 061a71c..ab8759e 100644
--- a/doc/src/declarative/qdeclarativeperformance.qdoc
+++ b/doc/src/declarative/qdeclarativeperformance.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativereference.qdoc b/doc/src/declarative/qdeclarativereference.qdoc
index 8c5811b..c2c5e91 100644
--- a/doc/src/declarative/qdeclarativereference.qdoc
+++ b/doc/src/declarative/qdeclarativereference.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativesecurity.qdoc b/doc/src/declarative/qdeclarativesecurity.qdoc
index 7395af3..01d6c56 100644
--- a/doc/src/declarative/qdeclarativesecurity.qdoc
+++ b/doc/src/declarative/qdeclarativesecurity.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc
index 148726f..b663d43 100644
--- a/doc/src/declarative/qdeclarativestates.qdoc
+++ b/doc/src/declarative/qdeclarativestates.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc
index 18fa439..f891e01 100644
--- a/doc/src/declarative/qml-intro.qdoc
+++ b/doc/src/declarative/qml-intro.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qmlruntime.qdoc b/doc/src/declarative/qmlruntime.qdoc
index 51f9e4d..dfc0ad9 100644
--- a/doc/src/declarative/qmlruntime.qdoc
+++ b/doc/src/declarative/qmlruntime.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qmlviewer.qdoc b/doc/src/declarative/qmlviewer.qdoc
index 81ad218..82f1fec 100644
--- a/doc/src/declarative/qmlviewer.qdoc
+++ b/doc/src/declarative/qmlviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qtbinding.qdoc b/doc/src/declarative/qtbinding.qdoc
index 53db5c7..8a969eb 100644
--- a/doc/src/declarative/qtbinding.qdoc
+++ b/doc/src/declarative/qtbinding.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -30,126 +30,389 @@
\target qtbinding
\title Using QML in C++ Applications
-\tableofcontents
+QML is designed to be easily extensible from C++. The classes in the
+QtDeclarative module allow QML components to be loaded and manipulated from C++, and through
+Qt's \l{The Meta-Object System}{meta-object system}, QML and C++ objects can easily
+communicate through Qt signals and slots. In addition, QML plugins can be written to create
+reusable QML components for distribution.
-The QML API is split into three main classes - QDeclarativeEngine, QDeclarativeComponent and QDeclarativeContext.
-QDeclarativeEngine provides the environment in which QML is run, QDeclarativeComponent encapsulates
-\l {QML Documents}, and QDeclarativeContext allows applications to expose data to QML component instances.
+You may want to mix QML and C++ for a number of reasons. For example:
-QML also includes a convenience API, QDeclarativeView, for applications that simply want to embed QML
-components into a new QGraphicsView. QDeclarativeView covers up many of the details discussed below.
-While QDeclarativeView is mainly intended for rapid prototyping it can have uses in production applications.
+\list
+\o To use functionality defined in a C++ source (for example, when using a C++ Qt-based data model, or
+calling functions in a third-party C++ library)
+\o To access functionality in the QtDeclarative module (for example, to dynamically generate
+images using QDeclarativeImageProvider)
+\o To write your own QML elements (whether for your applications, or for distribution to others)
+\endlist
+
+To use the QtDeclarative module, you must include and link to the module appropriately, as shown on
+the \l {QtDeclarative}{module index page}. The \l {Qt Declarative UI Runtime} documentation
+shows how to build a basic C++ application that uses this module.
+
+
+\section1 Core module classes
-If you are looking at retrofitting an existing Qt application with QML,
-read \l{Integrating QML with existing Qt UI code}.
-\section1 Basic Usage
+The QtDeclarative module provides a set of C++ APIs for extending your QML applications from C++ and
+embedding QML into C++ applications. There are several core classes in the QtDeclarative module
+that provide the essential capabilities for doing this. These are:
-Every application requires at least one QDeclarativeEngine. A QDeclarativeEngine allows the configuration of
-global settings that apply to all the QML component instances - such as the QNetworkAccessManager
-that is used for network communications, and the path used for persistent storage.
-Multiple QDeclarativeEngine's are only needed if the application requires these settings to differ
-between QML component instances.
+\list
+\o QDeclarativeEngine: A QML engine provides the environment for executing QML code. Every
+application requires at least one engine instance.
+\o QDeclarativeComponent: A component encapsulates a \l{QML Documents}{QML document}.
+\o QDeclarativeContext: A context allows an application to expose data to the QML components
+created by an engine.
+\endlist
-\l {QML Documents} are loaded using the QDeclarativeComponent class. Each QDeclarativeComponent instance
-represents a single QML document. A QDeclarativeComponent can be passed a document URL, or raw text
-representing the content of the document. The document URL can be a local filesystem URL, or
-any network URL supported by QNetworkAccessManager.
+A QDeclarativeEngine allows the configuration of global settings that apply to all of its QML
+component instances: for example, the QNetworkAccessManager to be used for network communications,
+and the file path to be used for persistent storage.
-QML component instances can then be created by calling the QDeclarativeComponent::create() method. Here's
-an example of loading a QML document, and creating an object from it.
+QDeclarativeComponent is used to load QML documents. Each QDeclarativeComponent instance represents
+a single document. A component can be created from the URL or file path of a QML document, or the raw
+QML code of the document. Component instances are instatiated through the
+QDeclarativeComponent::create() method, like this:
\code
- QDeclarativeEngine *engine = new QDeclarativeEngine(parent);
- QDeclarativeComponent component(engine, QUrl::fromLocalFile("main.qml"));
- QObject *myObject = component.create();
+QDeclarativeEngine engine;
+QDeclarativeComponent component(&engine, QUrl::fromLocalFile("MyRectangle.qml"));
+QObject *rectangleInstance = component.create();
+
+// ...
+delete rectangleInstance;
\endcode
-\section1 Exposing Data
+QML documents can also be loaded using QDeclarativeView. This class provides a convenient
+QWidget-based view for embedding QML components into QGraphicsView-based applications. (For other
+methods of integrating QML into QWidget-based applications, see \l {Integrating QML with existing Qt
+UI code}.)
+
+
+\section1 Approaches to using QML with C++
+
+There are a number of ways to extend your QML application through C++. For example, you could:
+
+\list
+\o Load a QML component and manipulate it (or its children) from C++
+\o Embed a C++ object and its properties directly into a QML component (for example, to make a
+particular C++ object callable from QML, or to replace a dummy list model data with a real data set)
+\o Define new QML elements (through QObject-based C++ classes) and create them directly from your
+QML code
+\endlist
+
+These methods are shown below. Naturally these approaches are not exclusive; you can mix any of
+these methods throughout your application as appropriate.
+
+
+\section2 Loading QML components from C++
+
+A QML document can be loaded with QDeclarativeComponent or QDeclarativeView. QDeclarativeComponent
+loads a QML component as a C++ object; QDeclarativeView also does this,
+but additionally loads the QML component directly into a QGraphicsView. It is convenient for loading
+a displayable QML component into a QWidget-based application.
+
+For example, suppose there is a \c MyItem.qml file that looks like this:
+
+\snippet doc/src/snippets/declarative/qtbinding/loading/MyItem.qml start
+\snippet doc/src/snippets/declarative/qtbinding/loading/MyItem.qml end
+
+This QML document can be loaded with QDeclarativeComponent or QDeclarativeView with the following
+C++ code. Using a QDeclarativeComponent requires calling QDeclarativeComponent::create() to create
+a new instance of the component, while a QDeclarativeView automatically creates an instance of the
+component, which is accessible via QDeclarativeView::rootObject():
+
+\table
+\row
+\o
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp QDeclarativeComponent-a
+\dots 0
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp QDeclarativeComponent-b
+\o
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp QDeclarativeView
+\endtable
+
+This \c object is the instance of the \c MyItem.qml component that has been created. You can now
+modify the item's properties using QObject::setProperty() or QDeclarativeProperty:
+
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp properties
+
+Alternatively, you can cast the object to its actual type and call functions with compile-time
+safety. In this case the base object of \c MyItem.qml is an \l Item, which is defined by the
+QDeclarativeItem class:
+
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp cast
+
+You can also connect to any signals or call functions defined in the component using
+QMetaObject::invokeMethod() and QObject::connect(). See \l {Exchanging data between QML and C++}
+below for further details.
+
+\section3 Locating child objects
+
+QML components are essentially object trees with children that have siblings and their own children.
+Child objects of QML components can be located using the QObject::objectName property with
+QObject::findChild(). For example, if the root item in \c MyItem.qml had a child \l Rectangle item:
+
+\snippet doc/src/snippets/declarative/qtbinding/loading/MyItem.qml start
+\codeline
+\snippet doc/src/snippets/declarative/qtbinding/loading/MyItem.qml child
+\snippet doc/src/snippets/declarative/qtbinding/loading/MyItem.qml end
+
+The child could be located like this:
+
+\snippet doc/src/snippets/declarative/qtbinding/loading/main.cpp findChild
+
+If \c objectName is used inside a delegate of a ListView, \l Repeater or some other
+element that creates multiple instances of its delegates, there will be multiple children with
+the same \c objectName. In this case, QObject::findChildren() can be used to find all children
+with a matching \c objectName.
+
+\warning While it is possible to use C++ to access and manipulate QML objects deep into the
+object tree, we recommend that you do not take this approach outside of application
+testing and prototyping. One strength of QML and C++ integration is the ability to implement the
+QML user interface separately from the C++ logic and dataset backend, and this strategy breaks if the
+C++ side reaches deep into the QML components to manipulate them directly. This would make it difficult
+to, for example, swap a QML view component for another view, if the new component was missing a
+required \c objectName. It is better for the C++ implementation to know as little as possible about
+the QML user interface implementation and the composition of the QML object tree.
+
+
+\section2 Embedding C++ objects into QML components
+
+When loading a QML scene into a C++ application, it can be useful to directly embed C++ data into
+the QML object. QDeclarativeContext enables this by exposing data to the context of a QML
+component, allowing data to be injected from C++ into QML.
+
+For example, here is a QML item that refers to a \c currentDateTime value that does not exist in
+the current scope:
+
+\snippet doc/src/snippets/declarative/qtbinding/context/MyItem.qml 0
+
+This \c currentDateTime value can be set directly by the C++ application that loads the QML
+component, using QDeclarativeContext::setContextProperty():
+
+\snippet doc/src/snippets/declarative/qtbinding/context/main.cpp 0
+
+Context properties can hold either QVariant or QObject* values. This means custom C++ objects can
+also be injected using this approach, and these objects can be modified and read directly in QML.
+Here, we modify the above example to embed a QObject instance instead of a QDateTime value, and the QML code
+invokes a method on the object instance:
+
+\table
+\row
+\o
+\snippet doc/src/snippets/declarative/qtbinding/context-advanced/applicationdata.h 0
+\codeline
+\snippet doc/src/snippets/declarative/qtbinding/context-advanced/main.cpp 0
+\o
+\snippet doc/src/snippets/declarative/qtbinding/context-advanced/MyItem.qml 0
+\endtable
+
+(Note that date/time values returned from C++ to QML can be formatted through
+\l{QML:Qt::formatDateTime}{Qt.formatDateTime()} and associated functions.)
+
+If the QML item needs to receive signals from the context property, it can connect to them using the
+\l Connections element. For example, if \c ApplicationData has a signal named \c
+dataChanged(), this signal can be connected to using an \c onDataChanged handler within
+a \l Connections object:
+
+\snippet doc/src/snippets/declarative/qtbinding/context-advanced/connections.qml 0
+
+Context properties can be useful for using C++ based data models in a QML view. See the
+\l {declarative/modelviews/stringlistmodel}{String ListModel},
+\l {declarative/modelviews/objectlistmodel}{Object ListModel} and
+\l {declarative/modelviews/abstractitemmodel}{AbstractItemModel} models for
+respective examples on using QStringListModel, QObjectList-based models and QAbstractItemModel
+in QML views.
+
+Also see the QDeclarativeContext documentation for more information.
+
+
+\section2 Defining new QML elements
+
+While new QML elements can be \l {Defining new Components}{defined in QML}, they can also be
+defined by C++ classes; in fact, many of the core \l {QML Elements} are implemented through
+C++ classes. When you create a QML object using one of these elements, you are simply creating an
+instance of a QObject-based C++ class and setting its properties.
+
+For example, here is an \c ImageViewer class with an \c image URL property:
+
+\snippet doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h 0
+
+Aside from the fact that it inherits QDeclarativeItem, this is an ordinary class that could
+exist outside of QML. However, once it is registered with the QML engine using qmlRegisterType():
+
+\snippet doc/src/snippets/declarative/qtbinding/newelements/main.cpp register
+
+Then, any QML code loaded by your C++ application or \l{QDeclarativeExtensionPlugin}{plugin} can create and manipulate
+\c ImageViewer objects:
+
+\snippet doc/src/snippets/declarative/qtbinding/newelements/standalone.qml 0
+
+Note that custom C++ types do not have to inherit from QDeclarativeItem; this is only necessary if it is
+a displayable item. If the item is not displayable, it can simply inherit from QObject.
+
+For more information on defining new QML elements, see the \l {Tutorial: Writing QML extensions with C++}
+{Writing QML extensions with C++} tutorial and the \l {Extending QML in C++} reference
+documentation.
+
+
+
+\section1 Exchanging data between QML and C++
+
+QML and C++ objects can communicate with one another through signals, slots and property
+modifications. For a C++ object, any data that is exposed to Qt's \l{The Meta-Object System}{Meta-Object System}
+- that is, properties, signals, slots and Q_INVOKABLE methods - become available to QML. On
+the QML side, all QML object data is automatically made available to the meta-object system and can
+be accessed from C++.
+
+
+\section2 Calling functions
-QML components are instantiated in a QDeclarativeContext. A context allows the application to expose data
-to the QML component instance. A single QDeclarativeContext can be used to instantiate all the objects
-used by an application, or several QDeclarativeContext can be created for more fine grained control over
-the data exposed to each instance. If a context is not passed to the QDeclarativeComponent::create()
-method, the QDeclarativeEngine's \l {QDeclarativeEngine::rootContext()}{root context} is used. Data exposed through
-the root context is available to all object instances.
+QML functions can be called from C++ and vice-versa.
-\section1 Simple Data
+All QML functions are exposed to the meta-object system and can be called using
+QMetaObject::invokeMethod(). Here is a C++ application that uses this to call a QML function:
-To expose data to a QML component instance, applications set \l {QDeclarativeContext::setContextProperty()}
-{context properties} which are then accessible by name from QML \l {Property Binding}s and JavaScript.
-The following example shows how to expose a background color to a QML file through QDeclarativeView:
+\table
+\row
+\o \snippet doc/src/snippets/declarative/qtbinding/functions-qml/MyItem.qml 0
+\o \snippet doc/src/snippets/declarative/qtbinding/functions-qml/main.cpp 0
+\endtable
+
+Notice the Q_RETURN_ARG() and Q_ARG() arguments for QMetaObject::invokeMethod() must be specified as
+QVariant types, as this is the generic data type used for QML functions and return values.
+
+To call a C++ function from QML, the function must be either a Qt slot, or a function marked with
+the Q_INVOKABLE macro, to be available to QML. In the following example, the QML code invokes
+methods on the \c myObject object, which has been set using QDeclarativeContext::setContextProperty():
+
+\table
+\row
+\o
+\snippet doc/src/snippets/declarative/qtbinding/functions-cpp/MyItem.qml 0
+\o
+\snippet doc/src/snippets/declarative/qtbinding/functions-cpp/myclass.h 0
+\codeline
+\snippet doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp 0
+\endtable
+
+Note that QML does not support overloaded functions. If a C++ has more than one function with the
+same name, there is no guarantee which overloaded function will be called from QML.
+
+
+\section2 Receiving signals
+
+All QML signals are automatically available to C++, and can be connected to using QObject::connect()
+like any ordinary Qt C++ signal.
+
+Here is a QML component with a signal named \c qmlSignal. This signal is connected to a C++ object's
+slot using QObject::connect():
+
+\table
+\row
+\o
+\snippet doc/src/snippets/declarative/qtbinding/signals-qml/MyItem.qml 0
+\o
+\snippet doc/src/snippets/declarative/qtbinding/signals-qml/myclass.h 0
+\codeline
+\snippet doc/src/snippets/declarative/qtbinding/signals-qml/main.cpp 0
+\endtable
+
+To connect to Qt C++ signals from within QML, use a signal handler with the \c on<SignalName> syntax.
+If the C++ object is directly creatable from within QML (see \l {Defining new QML elements} above)
+then the signal handler can be defined within the object declaration. In the following example, the
+QML code creates a \c ImageViewer object, and the \c imageChanged and \c loadingError signals of the
+C++ object are connected to through \c onImagedChanged and \c onLoadingError signal handlers in QML:
\table
\row
\o
-\c {// main.cpp}
-\snippet doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp 0
+
+\snippet doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h start
+\dots 4
+\snippet doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h end
\o
-\c {// main.qml}
-\snippet doc/src/snippets/declarative/qtbinding/contextproperties/main.qml 0
+\snippet doc/src/snippets/declarative/qtbinding/signals-cpp/standalone.qml 0
+\endtable
+
+(Note that if a signal has been declared as the NOTIFY signal for a property, QML allows it to be
+received with an \c on<Property>Changed handler even if the signal's name does not follow the \c
+<Property>Changed naming convention. In the above example, if the "imageChanged" signal was named
+"imageModified" instead, the \c onImageChanged signal handler would still be called.)
+
+If, however, the object with the signal is not created from within the QML code, and the QML item only has a
+reference to the created object - for example, if the object was set using
+QDeclarativeContext::setContextProperty() - then the \l Connections element can be used
+instead to create the signal handler:
+\table
+\row
+\o \snippet doc/src/snippets/declarative/qtbinding/signals-cpp/main.cpp connections
+\o \snippet doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml 0
\endtable
-Or, if you want \c main.cpp to create the component without showing it in a QDeclarativeView, you could create an instance of QDeclarativeContext using QDeclarativeEngine::rootContext() instead:
-\snippet doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp 1
+\section2 Modifying properties
-Context properties work just like normal properties in QML bindings - if the \c backgroundColor
-context property in this example was changed to red, the component object instances would
-all be automatically updated. Note that it is the responsibility of the creator to delete any
-QDeclarativeContext it constructs. If the \c windowContext is no longer needed when
-the \c window component instantiation is destroyed, the \c windowContext must be destroyed
-explicitly. The simplest way to ensure this is to set \c window as \c windowContext's parent.
+Any properties declared in a QML object are automatically accessible from C++. Given a QML item
+like this:
-QDeclarativeContexts form a tree - each QDeclarativeContext except for the root context has a parent. Child
-QDeclarativeContexts effectively inherit the context properties present in their parents. This gives
-applications more freedom in partitioning the data exposed to different QML object instances.
-If a QDeclarativeContext sets a context property that is also set in one of its parents, the new context
-property shadows that in the parent. In The following example, the \c background context property
-in \c {Context 1} shadows the \c background context property in the root context.
+\snippet doc/src/snippets/declarative/qtbinding/properties-qml/MyItem.qml 0
-\image qml-context-tree.png
+The value of the \c someNumber property can be set and read using QDeclarativeProperty, or
+QObject::setProperty() and QObject::property():
-\section2 Structured Data
+\snippet doc/src/snippets/declarative/qtbinding/properties-qml/main.cpp 0
-Context properties can also be used to expose structured and writable data to QML objects. In
-addition to all the types already supported by QVariant, QObject derived types can be assigned to
-context properties. QObject context properties allow the data exposed to be more structured, and
-allow QML to set values.
+You should always use QObject::setProperty(), QDeclarativeProperty or QMetaProperty::write() to
+change a QML property value, to ensure the QML engine is made aware of the property change. For example,
+say you have a custom element \c PushButton with a \c buttonText property that internally reflects
+the value of a \c m_buttonText member variable. Modifying the member variable directly like this is
+not a good idea:
-The following example creates a \c CustomPalette object, and sets it as the \c palette context
-property.
+\badcode
+// BAD!
+QDeclarativeComponent component(engine, "MyButton.qml");
+PushButton *button = qobject_cast<PushButton*>(component.create());
+button->m_buttonText = "Click me";
+\endcode
-\snippet doc/src/snippets/declarative/qtbinding/custompalette/custompalette.h 0
+Since the value is changed directly, this bypasses Qt's \l{The Meta-Object System}{meta-object system}
+and the QML engine is not made aware of the property change. This means property bindings to
+\c buttonText would not be updated, and any \c onButtonTextChanged handlers would not be called.
-\snippet doc/src/snippets/declarative/qtbinding/custompalette/main.cpp 0
-The QML that follows references the palette object, and its properties, to set the appropriate
-background and text colors. When the window is clicked, the palette's text color is changed, and
-the window text will update accordingly.
+\target properties-cpp
-\snippet doc/src/snippets/declarative/qtbinding/custompalette/main.qml 0
+Any \l {The Property System}{Qt properties} - that is, those declared with the Q_PROPERTY()
+macro - are accessible from QML. Here is a modified version of the \l {Embedding C++ objects into
+QML components}{earlier example} on this page; here, the \c ApplicationData class has a \c backgroundColor
+property. This property can be written to and read from QML:
-To detect when a C++ property value - in this case the \c CustomPalette's \c text property -
-changes, the property must have a corresponding NOTIFY signal. The NOTIFY signal specifies a signal
-that is emitted whenever the property changes value. Implementers should take care to only emit the
-signal if the value \e changes to prevent loops from occurring. Accessing a property from a
-binding that does not have a NOTIFY signal will cause QML to issue a warning at runtime.
+\table
+\row
+\o \snippet doc/src/snippets/declarative/qtbinding/properties-cpp/applicationdata.h 0
+\o \snippet doc/src/snippets/declarative/qtbinding/properties-cpp/MyItem.qml 0
+\endtable
-\section2 Dynamic Structured Data
+Notice the \c backgroundColorChanged signal is declared as the NOTIFY signal for the
+\c backgroundColor property. If a Qt property does not have an associated NOTIFY signal,
+the property cannot be used for \l {Property Binding} in QML, as the QML engine would not be
+notified when the value changes. If you are using custom types in QML, make sure their
+properties have NOTIFY signals so that they can be used in property bindings.
-If an application is too dynamic to structure data as compile-time QObject types, dynamically
-structured data can be constructed at runtime using the QDeclarativePropertyMap class.
+See \l {Tutorial: Writing QML extensions with C++} for further details and examples
+on using Qt properties with QML.
-\section1 Calling C++ methods from QML
+\section1 Supported data types
-It is possible to call methods of QObject derived types by either exposing the
-methods as public slots, or by marking the methods Q_INVOKABLE.
+Any C++ data that is used from QML - whether as custom properties, or parameters for signals or
+functions - must be of a type that is recognizable by QML.
-The C++ methods can also have parameters and return values. QML has support for
-the following types:
+By default, QML recognizes the following data types:
\list
\o bool
@@ -163,102 +426,168 @@ the following types:
\o QSize, QSizeF
\o QRect, QRectF
\o QVariant
+\o QObject*
+\o Enumerations declared with Q_ENUMS()
\endlist
-This example toggles the "Stopwatch" object on/off when the MouseArea is clicked:
+To allow a custom C++ type to be created or used in QML, the C++ class must be registered as a QML
+type using qmlRegisterType(), as shown in the \l {Defining new QML elements} section above.
-\table
-\row
-\o
-\c {// main.cpp}
-\snippet doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.h 0
-\snippet doc/src/snippets/declarative/qtbinding/stopwatch/main.cpp 0
-\o
-\c {// main.qml}
-\snippet doc/src/snippets/declarative/qtbinding/stopwatch/main.qml 0
+\section2 Using enumerations of a custom type
-\endtable
+To use an enumeration from a custom C++ component, the enumeration must be declared with Q_ENUMS() to
+register it with Qt's meta object system. For example, the following C++ type has a \c Status enum:
-Note that in this particular example a better way to achieve the same result
-is to have a "running" property in \c main.qml. This leads to much nicer QML code:
+\snippet doc/src/snippets/declarative/qtbinding/enums/imageviewer.h start
+\snippet doc/src/snippets/declarative/qtbinding/enums/imageviewer.h end
+
+Providing the \c ImageViewer class has been registered using qmlRegisterType(), its \c Status enum can
+now be used from QML:
+
+\snippet doc/src/snippets/declarative/qtbinding/enums/standalone.qml 0
+
+The C++ type must be registered with QML to use its enums. If your C++ type is not instantiable, it
+can be registered using qmlRegisterUncreatableType().
+
+See the \l {Tutorial: Writing QML extensions with C++}{Writing QML extensions with C++} tutorial and
+the \l {Extending QML in C++} reference documentation for more information.
+
+
+\section2 Automatic type conversion
+
+As a convenience, some basic types can be specified in QML using format strings to make it easier to
+pass simple values from QML to C++.
\table
+\header
+\o Type
+\o String format
+\o Example
\row
-\o
-\code
-// main.qml
-import QtQuick 1.0
-
-Rectangle {
- MouseArea {
- anchors.fill: parent
- onClicked: stopwatch.running = !stopwatch.running
- }
-}
-\endcode
+\o QColor
+\o Color name, "#RRGGBB", "#RRGGBBAA"
+\o "red", "#ff0000", "#ff000000"
+\row
+\o QDate
+\o "YYYY-MM-DD"
+\o "2010-05-31"
+\row
+\o QPoint
+\o "x,y"
+\o "10,20"
+\row
+\o QRect
+\o "x,y,WidthxHeight"
+\o "50,50,100x100"
+\row
+\o QSize
+\o "WidthxHeight"
+\o "100x200"
+\row
+\o QTime
+\o "hh:mm:ss"
+\o "14:22:55"
+\row
+\o QUrl
+\o URL string
+\o "http://www.example.com"
+\row
+\o QVector3D
+\o "x,y,z"
+\o "0,1,0"
+\row
+\o Enumeration value
+\o Enum value name
+\o "AlignRight"
\endtable
-Of course, it is also possible to call \l {Adding new methods}{functions declared in QML from C++}.
+(More details on these string formats and types can be found in the
+\l {QML Basic Types}{basic type documentation}.)
+
+These string formats can be used to set QML \c property values and pass arguments to C++
+functions. This is demonstrated by various examples on this page; in the above
+\l{#properties-cpp}{Qt properties example}, the \c ApplicationData class has a \c backgroundColor
+property of a QColor type, which is set from the QML code with the string "red" rather rather
+than an actual QColor object.
+
+If it is preferred to pass an explicitly-typed value rather than a string, the global
+\l{QmlGlobalQtObject}{Qt object} provides convenience functions for creating some of the object
+types listed above. For example, \l{QML:Qt::rgba()}{Qt.rgba()} creates a QColor value from four
+RGBA values. The QColor returned from this function could be used instead of a string to set
+a QColor-type property or to call a C++ function that requires a QColor parameter.
+
+
+\section1 Writing QML plugins
+
+The QtDeclarative module includes the QDeclarativeExtensionPlugin class, which is an abstract
+class for writing QML plugins. This allows QML extension types to be dynamically loaded into
+QML applications.
+
+See the QDeclarativeExtensionPlugin documentation and \l {How to Create Qt Plugins} for more
+details.
+
+
+\section1 Managing resource files with the Qt resource system
+The \l {The Qt Resource System}{Qt resource system} allows resource files to be stored as
+binary files in an application executable. This can be useful when building a mixed
+QML/C++ application as it enables QML files (as well as other resources such as images
+and sound files) to be referred to through the resource system URI scheme rather than
+relative or absolute paths to filesystem resources. Note, however, that if you use the resource
+system, the application executable must be re-compiled whenever a QML source file is changed
+in order to update the resources in the package.
-\section1 Network Components
+To use the resource system in a mixed QML/C++ application:
-If the URL passed to QDeclarativeComponent is a network resource, or if the QML document references a
-network resource, the QDeclarativeComponent has to fetch the network data before it is able to create
-objects. In this case, the QDeclarativeComponent will have a \l {QDeclarativeComponent::Loading}{Loading}
-\l {QDeclarativeComponent::status()}{status}. An application will have to wait until the component
-is \l {QDeclarativeComponent::Ready}{Ready} before calling \l {QDeclarativeComponent::create()}.
+\list
+\o Create a \c .qrc \l {The Qt Resource System}{resource collection file} that lists resource
+ files in XML format
+\o From C++, load the main QML file as a resource using the \c :/ prefix or as a URL with the
+ \c qrc scheme
+\endlist
+
+Once this is done, all files specified by relative paths in QML will be loaded from
+the resource system instead. Use of the resource system is completely transparent to
+the QML layer; this means all QML code should refer to resource files using relative
+paths and should \e not use the \c qrc scheme. This scheme should only be used from
+C++ code for referring to resource files.
-The following example shows how to load a QML file from a network resource. After creating
-the QDeclarativeComponent, it tests whether the component is loading. If it is, it connects to the
-QDeclarativeComponent::statusChanged() signal and otherwise calls the \c {continueLoading()} method
-directly. This test is necessary, even for URLs that are known to be remote, just in case
-the component has been cached and is ready immediately.
+Here is a application packaged using the \l {The Qt Resource System}{Qt resource system}.
+The directory structure looks like this:
\code
-MyApplication::MyApplication()
-{
- // ...
- component = new QDeclarativeComponent(engine, QUrl("http://www.example.com/main.qml"));
- if (component->isLoading())
- QObject::connect(component, SIGNAL(statusChanged(QDeclarativeComponent::Status)),
- this, SLOT(continueLoading()));
- else
- continueLoading();
-}
-
-void MyApplication::continueLoading()
-{
- if (component->isError()) {
- qWarning() << component->errors();
- } else {
- QObject *myObject = component->create();
- }
-}
+project
+ |- example.qrc
+ |- main.qml
+ |- images
+ |- background.png
+ |- main.cpp
+ |- project.pro
\endcode
-\section1 Qt Resources
+The \c main.qml and \c background.png files will be packaged as resource files. This is
+done in the \c example.qrc resource collection file:
-QML content can be loaded from \l {The Qt Resource System} using the \e qrc: URL scheme.
-For example:
+\quotefile doc/src/snippets/declarative/qtbinding/resources/example.qrc
-\c [project/example.qrc]
-\quotefile doc/src/snippets/declarative/qtbinding/resources/example.qrc
+Since \c background.png is a resource file, \c main.qml can refer to it using the relative
+path specified in \c example.qrc:
+
+\snippet doc/src/snippets/declarative/qtbinding/resources/main.qml 0
-\c [project/project.pro]
-\quotefile doc/src/snippets/declarative/qtbinding/resources/resources.pro
+To allow QML to locate resource files correctly, the \c main.cpp loads the main QML
+file, \c main.qml, as a resource file using the \c qrc scheme:
-\c [project/main.cpp]
\snippet doc/src/snippets/declarative/qtbinding/resources/main.cpp 0
-\c [project/main.qml]
-\snippet doc/src/snippets/declarative/qtbinding/resources/main.qml 0
+Finally \c project.pro uses the RESOURCES variable to indicate that \c example.qrc should
+be used to build the application resources:
+
+\quotefile doc/src/snippets/declarative/qtbinding/resources/resources.pro
+
+See \l {The Qt Resource System} for more information.
-Note that the resource system cannot be accessed from QML directly. If the main QML file is
-loaded as a resource, all files specified as relative paths in QML will also be loaded from
-the resource system. Using the resource system is completely transparent to the QML layer.
-This also means that if the main QML file is not loaded as a resource then files in the resource
-system cannot be accessed from QML.
*/
+
diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc
index 5232841..7ecdc53 100644
--- a/doc/src/declarative/qtdeclarative.qdoc
+++ b/doc/src/declarative/qtdeclarative.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc
index 69e6358..0c14093 100644
--- a/doc/src/declarative/qtprogrammers.qdoc
+++ b/doc/src/declarative/qtprogrammers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/scope.qdoc b/doc/src/declarative/scope.qdoc
index 17f8632..7e75380 100644
--- a/doc/src/declarative/scope.qdoc
+++ b/doc/src/declarative/scope.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/tutorial.qdoc b/doc/src/declarative/tutorial.qdoc
index f913d44..8467478 100644
--- a/doc/src/declarative/tutorial.qdoc
+++ b/doc/src/declarative/tutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/declarative/whatsnew.qdoc b/doc/src/declarative/whatsnew.qdoc
index f8d1d0e..df0e999 100644
--- a/doc/src/declarative/whatsnew.qdoc
+++ b/doc/src/declarative/whatsnew.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/affine.qdoc b/doc/src/demos/affine.qdoc
index b4bd5d6..f8b3fd2 100644
--- a/doc/src/demos/affine.qdoc
+++ b/doc/src/demos/affine.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/anomaly.qdoc b/doc/src/demos/anomaly.qdoc
index ab00757..403a516 100644
--- a/doc/src/demos/anomaly.qdoc
+++ b/doc/src/demos/anomaly.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/arthurplugin.qdoc b/doc/src/demos/arthurplugin.qdoc
index 2345fdd..1c28bfe 100644
--- a/doc/src/demos/arthurplugin.qdoc
+++ b/doc/src/demos/arthurplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/books.qdoc b/doc/src/demos/books.qdoc
index 8fbeb0a..f712fb2 100644
--- a/doc/src/demos/books.qdoc
+++ b/doc/src/demos/books.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/boxes.qdoc b/doc/src/demos/boxes.qdoc
index bae6a70..67657ce 100644
--- a/doc/src/demos/boxes.qdoc
+++ b/doc/src/demos/boxes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/browser.qdoc b/doc/src/demos/browser.qdoc
index 722e28b..6286f76 100644
--- a/doc/src/demos/browser.qdoc
+++ b/doc/src/demos/browser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/chip.qdoc b/doc/src/demos/chip.qdoc
index bfe9cec..7573b2e 100644
--- a/doc/src/demos/chip.qdoc
+++ b/doc/src/demos/chip.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/composition.qdoc b/doc/src/demos/composition.qdoc
index 7bf0caa..b642abc 100644
--- a/doc/src/demos/composition.qdoc
+++ b/doc/src/demos/composition.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/deform.qdoc b/doc/src/demos/deform.qdoc
index e516c2b..6e7938f 100644
--- a/doc/src/demos/deform.qdoc
+++ b/doc/src/demos/deform.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/desktopservices.qdoc b/doc/src/demos/desktopservices.qdoc
index b281bdf..1da3244 100644
--- a/doc/src/demos/desktopservices.qdoc
+++ b/doc/src/demos/desktopservices.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/digiflip.qdoc b/doc/src/demos/digiflip.qdoc
index f275797..174c337 100644
--- a/doc/src/demos/digiflip.qdoc
+++ b/doc/src/demos/digiflip.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/embeddeddialogs.qdoc b/doc/src/demos/embeddeddialogs.qdoc
index db331dd..3be0e65 100644
--- a/doc/src/demos/embeddeddialogs.qdoc
+++ b/doc/src/demos/embeddeddialogs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/embeddedsvgviewer.qdoc b/doc/src/demos/embeddedsvgviewer.qdoc
index 9df35a8..a866ef5 100644
--- a/doc/src/demos/embeddedsvgviewer.qdoc
+++ b/doc/src/demos/embeddedsvgviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/flickable.qdoc b/doc/src/demos/flickable.qdoc
index 9b2db8c..1e1cb33 100644
--- a/doc/src/demos/flickable.qdoc
+++ b/doc/src/demos/flickable.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/flightinfo.qdoc b/doc/src/demos/flightinfo.qdoc
index af4448b..f31d298 100644
--- a/doc/src/demos/flightinfo.qdoc
+++ b/doc/src/demos/flightinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/fluidlauncher.qdoc b/doc/src/demos/fluidlauncher.qdoc
index eabeaaa..9619077 100644
--- a/doc/src/demos/fluidlauncher.qdoc
+++ b/doc/src/demos/fluidlauncher.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/gradients.qdoc b/doc/src/demos/gradients.qdoc
index 7552c54..de79b8c 100644
--- a/doc/src/demos/gradients.qdoc
+++ b/doc/src/demos/gradients.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/interview.qdoc b/doc/src/demos/interview.qdoc
index 40e6369..ea4ff9f 100644
--- a/doc/src/demos/interview.qdoc
+++ b/doc/src/demos/interview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/lightmaps.qdoc b/doc/src/demos/lightmaps.qdoc
index 2234893..02a3362 100644
--- a/doc/src/demos/lightmaps.qdoc
+++ b/doc/src/demos/lightmaps.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/macmainwindow.qdoc b/doc/src/demos/macmainwindow.qdoc
index 28ccf7c..dd95530 100644
--- a/doc/src/demos/macmainwindow.qdoc
+++ b/doc/src/demos/macmainwindow.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/mainwindow.qdoc b/doc/src/demos/mainwindow.qdoc
index 9bd301c..97ebf84 100644
--- a/doc/src/demos/mainwindow.qdoc
+++ b/doc/src/demos/mainwindow.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/mediaplayer.qdoc b/doc/src/demos/mediaplayer.qdoc
index 8d2fc9a..b20cb5d 100644
--- a/doc/src/demos/mediaplayer.qdoc
+++ b/doc/src/demos/mediaplayer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/pathstroke.qdoc b/doc/src/demos/pathstroke.qdoc
index deaa660..ecb442d 100644
--- a/doc/src/demos/pathstroke.qdoc
+++ b/doc/src/demos/pathstroke.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/qtdemo.qdoc b/doc/src/demos/qtdemo.qdoc
index 04fd548..65afa51 100644
--- a/doc/src/demos/qtdemo.qdoc
+++ b/doc/src/demos/qtdemo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/raycasting.qdoc b/doc/src/demos/raycasting.qdoc
index 9ad4ca5..5cbf55d 100644
--- a/doc/src/demos/raycasting.qdoc
+++ b/doc/src/demos/raycasting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/spectrum.qdoc b/doc/src/demos/spectrum.qdoc
index d5a3f85..0d3823b 100644
--- a/doc/src/demos/spectrum.qdoc
+++ b/doc/src/demos/spectrum.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/spreadsheet.qdoc b/doc/src/demos/spreadsheet.qdoc
index 496425d..a77ba9e 100644
--- a/doc/src/demos/spreadsheet.qdoc
+++ b/doc/src/demos/spreadsheet.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/sqlbrowser.qdoc b/doc/src/demos/sqlbrowser.qdoc
index 88eead6..57e7bc2 100644
--- a/doc/src/demos/sqlbrowser.qdoc
+++ b/doc/src/demos/sqlbrowser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/styledemo.qdoc b/doc/src/demos/styledemo.qdoc
index 1a6ba9c..21e2381 100644
--- a/doc/src/demos/styledemo.qdoc
+++ b/doc/src/demos/styledemo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/sub-attaq.qdoc b/doc/src/demos/sub-attaq.qdoc
index 42b6b45..1d53a18 100644
--- a/doc/src/demos/sub-attaq.qdoc
+++ b/doc/src/demos/sub-attaq.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/textedit.qdoc b/doc/src/demos/textedit.qdoc
index e7b628f..40410c7 100644
--- a/doc/src/demos/textedit.qdoc
+++ b/doc/src/demos/textedit.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/undo.qdoc b/doc/src/demos/undo.qdoc
index fd31ba1..c66def9 100644
--- a/doc/src/demos/undo.qdoc
+++ b/doc/src/demos/undo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/demos/weatherinfo.qdoc b/doc/src/demos/weatherinfo.qdoc
index bc43a97..8e7bd67 100644
--- a/doc/src/demos/weatherinfo.qdoc
+++ b/doc/src/demos/weatherinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/deployment/deployment-plugins.qdoc b/doc/src/deployment/deployment-plugins.qdoc
index 7bb14ff..0885163 100644
--- a/doc/src/deployment/deployment-plugins.qdoc
+++ b/doc/src/deployment/deployment-plugins.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/deployment/deployment.qdoc b/doc/src/deployment/deployment.qdoc
index f2908bd..c078316 100644
--- a/doc/src/deployment/deployment.qdoc
+++ b/doc/src/deployment/deployment.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -756,6 +756,7 @@
\snippet doc/src/snippets/code/doc_src_deployment.qdoc 21
to your .pro file. The \c embed_manifest_dll option is enabled by default.
+ The \c embed_manifest_exe option is NOT enabled by default.
You can find more information about manifest files and side-by-side
assemblies at the
diff --git a/doc/src/deployment/qt-conf.qdoc b/doc/src/deployment/qt-conf.qdoc
index 48d688b..920eba6 100644
--- a/doc/src/deployment/qt-conf.qdoc
+++ b/doc/src/deployment/qt-conf.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/deployment/qtconfig.qdoc b/doc/src/deployment/qtconfig.qdoc
index 8c3658c..e429599 100644
--- a/doc/src/deployment/qtconfig.qdoc
+++ b/doc/src/deployment/qtconfig.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/activeqt-dumpcpp.qdoc b/doc/src/development/activeqt-dumpcpp.qdoc
index 5d689eb..843d40d 100644
--- a/doc/src/development/activeqt-dumpcpp.qdoc
+++ b/doc/src/development/activeqt-dumpcpp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/activeqt-dumpdoc.qdoc b/doc/src/development/activeqt-dumpdoc.qdoc
index 3ecc2c9..26450e3 100644
--- a/doc/src/development/activeqt-dumpdoc.qdoc
+++ b/doc/src/development/activeqt-dumpdoc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/activeqt-idc.qdoc b/doc/src/development/activeqt-idc.qdoc
index 60ac079..7a0ff66 100644
--- a/doc/src/development/activeqt-idc.qdoc
+++ b/doc/src/development/activeqt-idc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/activeqt-testcon.qdoc b/doc/src/development/activeqt-testcon.qdoc
index 35fe5df..86d4097 100644
--- a/doc/src/development/activeqt-testcon.qdoc
+++ b/doc/src/development/activeqt-testcon.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/assistant-manual.qdoc b/doc/src/development/assistant-manual.qdoc
index 677e8d0..9dc973d 100644
--- a/doc/src/development/assistant-manual.qdoc
+++ b/doc/src/development/assistant-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/debug.qdoc b/doc/src/development/debug.qdoc
index 9e881d1..91a83cf 100644
--- a/doc/src/development/debug.qdoc
+++ b/doc/src/development/debug.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/designer-manual.qdoc b/doc/src/development/designer-manual.qdoc
index 01229ad..df82fba 100644
--- a/doc/src/development/designer-manual.qdoc
+++ b/doc/src/development/designer-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -1769,37 +1769,54 @@ pixmap property in the property editor.
\title Using a Designer UI File in Your Application
- With Qt's integrated build tools, \l{qmake Manual}{qmake} and \l uic, the
- code for user interface components created with \QD is automatically
- generated when the rest of your application is built. Forms can be included
- and used directly from your application. Alternatively, you can use them to
- extend subclasses of standard widgets. These forms can be processed at
- compile time or at run time, depending on the approach used.
+ Qt Designer UI files represent the widget tree of the form in XML format. The
+ forms can be processed:
+ \list
+ \o \l{Compile Time Form Processing}{At compile time}, which means that forms
+ are converted to C++ code that can be compiled.
+ \o \l{Run Time Form Processing}{At runtime}, which means that forms are processed
+ by the QUiLoader class that dynamically constructs the widget tree while
+ parsing the XML file.
+ \endlist
\tableofcontents
\section1 Compile Time Form Processing
+ You create user interface components with \QD and use Qt's integrated build tools,
+ \l{qmake Manual}{qmake} and \l{User Interface Compiler (uic)}{uic}, to generate code
+ for them when the application is built. The generated code contains the form's user
+ interface object. It is a C++ struct that contains:
+
+ \list
+ \o Pointers to the form's widgets, layouts, layout items,
+ button groups, and actions.
+ \o A member function called \c setupUi() to build the widget tree
+ on the parent widget.
+ \o A member function called \c retranslateUi() that handles the
+ translation of the string properties of the form. For more information,
+ see \l{Reacting to Language Changes}.
+ \endlist
+
+ The generated code can be included in your application and used directly from
+ it. Alternatively, you can use it to extend subclasses of standard widgets.
+
A compile time processed form can be used in your application with one of
the following approaches:
\list
- \o The Direct Approach: you construct a widget to use as a placeholder
+ \o \l{The Direct Approach}: you construct a widget to use as a placeholder
for the component, and set up the user interface inside it.
- \o The Single Inheritance Approach: you subclass the form's base class
+ \o \l{The Single Inheritance Approach}: you subclass the form's base class
(QWidget or QDialog, for example), and include a private instance
of the form's user interface object.
- \o The MultipleInheritance Approach: you subclass both the form's base
+ \o \l{The Multiple Inheritance Approach}: you subclass both the form's base
class and the form's user interface object. This allows the widgets
defined in the form to be used directly from within the scope of
the subclass.
\endlist
-
- \section2 The Direct Approach
-
- To demonstrate how to use user interface (UI) files straight from
- \QD, we create a simple Calculator Form application. This is based on the
+ To demonstrate, we create a simple Calculator Form application. It is based on the
original \l{Calculator Form Example}{Calculator Form} example.
The application consists of one source file, \c main.cpp and a UI
@@ -1817,15 +1834,18 @@ pixmap property in the property editor.
The special feature of this file is the \c FORMS declaration that tells
\c qmake which files to process with \c uic. In this case, the
\c calculatorform.ui file is used to create a \c ui_calculatorform.h file
- that can be used by any file listed in the \c SOURCES declaration. To
- ensure that \c qmake generates the \c ui_calculatorform.h file, we need to
- include it in a file listed in \c SOURCES. Since we only have \c main.cpp,
- we include it there:
+ that can be used by any file listed in the \c SOURCES declaration.
- \snippet doc/src/snippets/uitools/calculatorform/main.cpp 0
+ \note You can use Qt Creator to create the Calculator Form project. It
+ automatically generates the main.cpp, UI, and .pro files, which you can
+ then modify.
+
+ \section2 The Direct Approach
- This include is an additional check to ensure that we do not generate code
- for UI files that are not used.
+ To use the direct approach, we include the \c ui_calculatorform.h file
+ directly in \c main.cpp:
+
+ \snippet doc/src/snippets/uitools/calculatorform/main.cpp 0
The \c main function creates the calculator widget by constructing a
standard QWidget that we use to host the user interface described by the
@@ -1837,23 +1857,33 @@ pixmap property in the property editor.
from the \c ui_calculatorform.h file that sets up all the dialog's widgets
and the connections between its signals and slots.
- This approach provides a quick and easy way to use simple, self-contained
- components in your applications, but many componens created with \QD will
+ The direct approach provides a quick and easy way to use simple, self-contained
+ components in your applications. However, componens created with \QD often
require close integration with the rest of the application code. For
instance, the \c CalculatorForm code provided above will compile and run,
but the QSpinBox objects will not interact with the QLabel as we need a
custom slot to carry out the add operation and display the result in the
- QLabel. To achieve this, we need to subclass a standard Qt widget (known as
- the single inheritance approach).
-
+ QLabel. To achieve this, we need to use the single inheritance approach.
\section2 The Single Inheritance Approach
+ To use the single inheritance approach, we subclass a standard Qt widget and
+ include a private instance of the form's user interface object. This can take
+ the form of:
+
+ \list
+ \o A member variable
+ \o A pointer member variable
+ \endlist
+
+ \section3 Using a Member Variable
+
In this approach, we subclass a Qt widget and set up the user interface
from within the constructor. Components used in this way expose the widgets
and layouts used in the form to the Qt widget subclass, and provide a
standard system for making signal and slot connections between the user
interface and other objects in your application.
+ The generated \c{Ui::CalculatorForm} structure is a member of the class.
This approach is used in the \l{Calculator Form Example}{Calculator Form}
example.
@@ -1893,6 +1923,52 @@ pixmap property in the property editor.
them. This approach can be used to create individual tabs from existing
forms, for example.
+ \section3 Using a Pointer Member Variable
+
+ Alternatively, the \c{Ui::CalculatorForm} structure can be made a pointer
+ member of the class. The header then looks as follows:
+
+ \code
+
+ namespace Ui {
+ class CalculatorForm;
+ }
+
+ class CalculatorForm : public QWidget
+ ...
+ virtual ~CalculatorForm();
+ ...
+ private:
+ Ui::CalculatorForm *ui;
+ ...
+
+ \endcode
+
+ The corresponding source file looks as follows:
+
+ \code
+ #include "ui_calculatorform.h"
+
+ CalculatorForm::CalculatorForm(QWidget *parent) :
+ QWidget(parent), ui(new Ui::CalculatorForm)
+ {
+ ui->setupUi(this);
+ }
+
+ CalculatorForm::~CalculatorForm()
+ {
+ delete ui;
+ }
+ \endcode
+
+ The advantage of this approach is that the user interface object can be
+ forward-declared, which means that we do not have to include the generated
+ \c ui_calculatorform.h file in the header. The form can then be changed without
+ recompiling the dependent source files. This is particularly important if the
+ class is subject to binary compatibility restrictions.
+
+ We generally recommend this approach for libraries and large applications.
+ For more information, see \l{Creating Shared Libraries}.
\section2 The Multiple Inheritance Approach
@@ -1906,13 +1982,14 @@ pixmap property in the property editor.
{Multiple Inheritance} example.
We need to include the header file that \c uic generates from the
- \c calculatorform.ui file:
+ \c calculatorform.ui file, as follows:
\snippet examples/uitools/multipleinheritance/calculatorform.h 0
The class is defined in a similar way to the one used in the
\l{The Single Inheritance Approach}{single inheritance approach}, except that
- this time we inherit from \e{both} QWidget and \c{Ui::CalculatorForm}:
+ this time we inherit from \e{both} QWidget and \c{Ui::CalculatorForm},
+ as follows:
\snippet examples/uitools/multipleinheritance/calculatorform.h 1
@@ -1931,11 +2008,26 @@ pixmap property in the property editor.
same say as a widget created in code by hand. We no longer require the
\c{ui} prefix to access them.
- Subclassing using multiple inheritance gives us more direct access to the
- contents of the form, is slightly cleaner than the single inheritance
- approach, but does not conveniently support composition of multiple user
- interfaces.
+ \section2 Reacting to Language Changes
+
+ Qt notifies applications if the user interface language changes by sending an
+ event of the type QEvent::LanguageChange. To call the member function
+ \c retranslateUi() of the user interface object, we reimplement
+ \c QWidget::changeEvent() in the form class, as follows:
+ \code
+ void CalculatorForm::changeEvent(QEvent *e)
+ {
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+ }
+ \endcode
\section1 Run Time Form Processing
diff --git a/doc/src/development/developing-on-mac.qdoc b/doc/src/development/developing-on-mac.qdoc
index ab2ed70..5ea4d22 100644
--- a/doc/src/development/developing-on-mac.qdoc
+++ b/doc/src/development/developing-on-mac.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/developing-with-qt.qdoc b/doc/src/development/developing-with-qt.qdoc
index b88fe3f..6793abd 100644
--- a/doc/src/development/developing-with-qt.qdoc
+++ b/doc/src/development/developing-with-qt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -81,8 +81,8 @@
\o \l {Compiler Notes}
\o \l {Developing Qt Applications for Mac OS X}
\o \l {Known Issues}
- \o \l {Platform Notes}
- \o \l {Platform Notes - Symbian}
+ \o \l {Platform and Compiler Notes}
+ \o \l {Platform and Compiler Notes - Symbian}
\o \l {ActiveX in Qt}
\o \l {Qt for Embedded Linux Classes}
\o \l {Qt for Embedded Platforms}
@@ -112,4 +112,4 @@
\endtable
-*/ \ No newline at end of file
+*/
diff --git a/doc/src/development/moc.qdoc b/doc/src/development/moc.qdoc
index bbcaf3f..6ecaf09 100644
--- a/doc/src/development/moc.qdoc
+++ b/doc/src/development/moc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index 588a9cc..1230af3 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -939,7 +939,9 @@
\snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 130
- The default values depend on the version of the Symbian SDK you're using.
+ The default values depend on the version of the Symbian SDK you're using,
+ however, the Qt toolchain sets this to the maximum possible value and this
+ should not be changed.
\section2 Compiler specific options
@@ -958,23 +960,30 @@
Symbian applications may have unique identifiers attached to them.
Here is how to define them in a project file:
- There are four types of IDs supported: \c UID2, \c UID3, \c SID, and \c VID. They
+ There are four available types of IDs supported: \c UID2, \c UID3, \c SID, and \c VID. They
are specified like this:
\snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 132
- If \c UID2 is not specified, it defaults to the same value as \c UID3.
+ If \c SID is not specified, it defaults to the same value as \c UID3.
If \c UID3 is not specified, qmake will automatically generate a \c UID3
suitable for development and debugging. This value should be manually
specified for applications that are to be released. In order to obtain
- an official UID, please contact Nokia. Both \c SID and \c VID default to empty values.
-
- For more information about unique identifiers and their meaning for
- Symbian applications, please refer to the Symbian SDK documentation.
-
+ an official UID, please contact \l{Symbian}{http:\\www.symbiansigned.com}.
+ Both \c SID and \c VID default to empty values.
+
+ There exists one UID1 too, but this should not be touched by any application.
+
+ The UID2 has a specific value for different types of files - e.g. apps/exes
+ are always 0x100039CE. The toolchain will set this for value for the most common file types like,
+ EXE/APP and shared library DLL.
+
+ For more information about unique identifiers and their meaning for Symbian applications,
+ please refer to the \l{Symbian SDK documentation}{http://developer.symbian.org/main/documentation/reference/s3/pdk/GUID-380A8C4F-3EB6-5E1C-BCFB-ED5B866136D9.html}
+
\section2 Capabilities
- Capabilities define extra priviledges for the application, such as the
+ Capabilities define extra privileges for the application, such as the
ability to list all files on the file system. Capabilities are defined
in the project file like this:
diff --git a/doc/src/development/qmsdev.qdoc b/doc/src/development/qmsdev.qdoc
index ab99719..07b77cf 100644
--- a/doc/src/development/qmsdev.qdoc
+++ b/doc/src/development/qmsdev.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc
index a83c27e..e53957f 100644
--- a/doc/src/development/qtestlib.qdoc
+++ b/doc/src/development/qtestlib.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -32,7 +32,7 @@
\ingroup frameworks-technologies
\ingroup qt-basic-concepts
-
+
\keyword qtestlib
The QTestLib framework, provided by Nokia, is a tool for unit
@@ -40,10 +40,6 @@
all the functionality commonly found in unit testing frameworks as
well as extensions for testing graphical user interfaces.
- Table of contents:
-
- \tableofcontents
-
\section1 QTestLib Features
QTestLib is designed to ease the writing of unit tests for Qt
@@ -88,6 +84,10 @@
\o Custom types can easily be added to the test data and test output.
\endtable
+ \note For higher-level GUI and application testing needs, please
+ see the \l{Partner Directory} for Qt testing products provided by
+ Nokia partners.
+
\section1 QTestLib API
@@ -213,17 +213,17 @@
\endlist
\section2 Creating a Benchmark
-
+
To create a benchmark, follow the instructions for creating a test and then add a
QBENCHMARK macro to the test function that you want to benchmark.
-
+
\snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 12
-
+
The code inside the QBENCHMARK macro will be measured, and possibly also repeated
several times in order to get an accurate measurement. This depends on the selected
measurement back-end. Several back-ends are available. They can be selected on the
command line:
-
+
\target testlib-benchmarking-measurement
\table
@@ -243,7 +243,7 @@
\o -eventcounter
\o All platforms
\endtable
-
+
In short, walltime is always available but requires many repetitions to
get a useful result.
Tick counters are usually available and can provide
@@ -255,7 +255,7 @@
Event counting is available on all platforms and it provides the number of events
that were received by the event loop before they are sent to their corresponding
targets (this might include non-Qt events).
-
+
\note Depending on the device configuration, Tick counters on the
Windows CE platform may not be as fine-grained, compared to other platforms.
Devices that do not support high-resolution timers default to
@@ -320,7 +320,7 @@
host computer and the device. Thus header files and libraries are needed to compile
cetest and QtRemote successfully.
- Prior to \l{Installing Qt on Windows CE}{installation} of Qt, you need to set your
+ Prior to \l{Installing Qt for Windows CE}{installation} of Qt, you need to set your
\c INCLUDE and \c LIB environment variables properly.
A default installation of Windows Mobile 5 for Pocket PC can be obtained by:
@@ -334,7 +334,7 @@
The CPU tick counters used for benchmarking is licensed under the following
license: (from src/testlib/3rdparty/cycle.h)
-
+
\legalese
Copyright (c) 2003, 2006 Matteo Frigo\br
Copyright (c) 2003, 2006 Massachusetts Institute of Technology
@@ -365,6 +365,7 @@
\brief A short introduction to testing with QTestLib.
\contentspage QTestLib Manual
\nextpage {Chapter 1: Writing a Unit Test}{Chapter 1}
+ \ingroup best-practices
\title QTestLib Tutorial
@@ -749,9 +750,10 @@
\section1 External Tools
Tools for handling and visualizing test data are available as part of
- the \l{qtestlib-tools} project on the Qt Labs Web site. These include
- a tool for comparing performance data obtained from test runs and a
- utility to generate Web-based graphs of performance data.
+ the qtestlib-tools project on the
+ \l{http://labs.qt.nokia.com/}{http://labs.qt.nokia.com/}Qt Labs Web site.
+ These include a tool for comparing performance data obtained from test
+ runs and a utility to generate Web-based graphs of performance data.
See the \l{qtestlib-tools Announcement} for more information on these
tools and a simple graphing example.
diff --git a/doc/src/development/rcc.qdoc b/doc/src/development/rcc.qdoc
index 5b3c6c7..2bbac6a 100644
--- a/doc/src/development/rcc.qdoc
+++ b/doc/src/development/rcc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/tools-list.qdoc b/doc/src/development/tools-list.qdoc
index 4f6945d..c362bdf 100644
--- a/doc/src/development/tools-list.qdoc
+++ b/doc/src/development/tools-list.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/development/uic.qdoc b/doc/src/development/uic.qdoc
index edeb64a..ec8b3d6 100644
--- a/doc/src/development/uic.qdoc
+++ b/doc/src/development/uic.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/2dpainting.qdoc b/doc/src/examples/2dpainting.qdoc
index b349c83..079fa13 100644
--- a/doc/src/examples/2dpainting.qdoc
+++ b/doc/src/examples/2dpainting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/comapp.qdoc b/doc/src/examples/activeqt/comapp.qdoc
index 1355cb5..f1884ef 100644
--- a/doc/src/examples/activeqt/comapp.qdoc
+++ b/doc/src/examples/activeqt/comapp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/dotnet.qdoc b/doc/src/examples/activeqt/dotnet.qdoc
index f523830..55853d9 100644
--- a/doc/src/examples/activeqt/dotnet.qdoc
+++ b/doc/src/examples/activeqt/dotnet.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/hierarchy.qdoc b/doc/src/examples/activeqt/hierarchy.qdoc
index 71e21cf..7905e8a 100644
--- a/doc/src/examples/activeqt/hierarchy.qdoc
+++ b/doc/src/examples/activeqt/hierarchy.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/menus.qdoc b/doc/src/examples/activeqt/menus.qdoc
index 7310e97..ed91a3e 100644
--- a/doc/src/examples/activeqt/menus.qdoc
+++ b/doc/src/examples/activeqt/menus.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/multiple.qdoc b/doc/src/examples/activeqt/multiple.qdoc
index aae93b0..036f80e 100644
--- a/doc/src/examples/activeqt/multiple.qdoc
+++ b/doc/src/examples/activeqt/multiple.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/opengl.qdoc b/doc/src/examples/activeqt/opengl.qdoc
index caf9361..2c55e1e 100644
--- a/doc/src/examples/activeqt/opengl.qdoc
+++ b/doc/src/examples/activeqt/opengl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/qutlook.qdoc b/doc/src/examples/activeqt/qutlook.qdoc
index 9ceb6b6..845305f 100644
--- a/doc/src/examples/activeqt/qutlook.qdoc
+++ b/doc/src/examples/activeqt/qutlook.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/simple.qdoc b/doc/src/examples/activeqt/simple.qdoc
index 72f99e8..9860326 100644
--- a/doc/src/examples/activeqt/simple.qdoc
+++ b/doc/src/examples/activeqt/simple.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/webbrowser.qdoc b/doc/src/examples/activeqt/webbrowser.qdoc
index 051a26f..3b66c57 100644
--- a/doc/src/examples/activeqt/webbrowser.qdoc
+++ b/doc/src/examples/activeqt/webbrowser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/activeqt/wrapper.qdoc b/doc/src/examples/activeqt/wrapper.qdoc
index 2cb0981..4bf7901 100644
--- a/doc/src/examples/activeqt/wrapper.qdoc
+++ b/doc/src/examples/activeqt/wrapper.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/addressbook.qdoc b/doc/src/examples/addressbook.qdoc
index 18211e9..8de1778 100644
--- a/doc/src/examples/addressbook.qdoc
+++ b/doc/src/examples/addressbook.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/analogclock.qdoc b/doc/src/examples/analogclock.qdoc
index fe39cda..45e78c3 100644
--- a/doc/src/examples/analogclock.qdoc
+++ b/doc/src/examples/analogclock.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/animatedtiles.qdoc b/doc/src/examples/animatedtiles.qdoc
index 329f3fb..5a99d21 100644
--- a/doc/src/examples/animatedtiles.qdoc
+++ b/doc/src/examples/animatedtiles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/appchooser.qdoc b/doc/src/examples/appchooser.qdoc
index 940b207..f9c4a8d 100644
--- a/doc/src/examples/appchooser.qdoc
+++ b/doc/src/examples/appchooser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/application.qdoc b/doc/src/examples/application.qdoc
index 699d40c..b69009f 100644
--- a/doc/src/examples/application.qdoc
+++ b/doc/src/examples/application.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/arrowpad.qdoc b/doc/src/examples/arrowpad.qdoc
index 0fa7c40..647f20e 100644
--- a/doc/src/examples/arrowpad.qdoc
+++ b/doc/src/examples/arrowpad.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/audiodevices.qdoc b/doc/src/examples/audiodevices.qdoc
index 4bf65ee..aa04f60 100644
--- a/doc/src/examples/audiodevices.qdoc
+++ b/doc/src/examples/audiodevices.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/audioinput.qdoc b/doc/src/examples/audioinput.qdoc
index d224423..b7f390b 100644
--- a/doc/src/examples/audioinput.qdoc
+++ b/doc/src/examples/audioinput.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/audiooutput.qdoc b/doc/src/examples/audiooutput.qdoc
index 429cff2..618db27 100644
--- a/doc/src/examples/audiooutput.qdoc
+++ b/doc/src/examples/audiooutput.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/basicdrawing.qdoc b/doc/src/examples/basicdrawing.qdoc
index 0e8cc69..d0b5294 100644
--- a/doc/src/examples/basicdrawing.qdoc
+++ b/doc/src/examples/basicdrawing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/basicgraphicslayouts.qdoc b/doc/src/examples/basicgraphicslayouts.qdoc
index 335506a..5951873 100644
--- a/doc/src/examples/basicgraphicslayouts.qdoc
+++ b/doc/src/examples/basicgraphicslayouts.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/basiclayouts.qdoc b/doc/src/examples/basiclayouts.qdoc
index 03cd590..cbc9297 100644
--- a/doc/src/examples/basiclayouts.qdoc
+++ b/doc/src/examples/basiclayouts.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -66,7 +66,7 @@
horizontal layout. Next we use the \c createGridGroupBox() function
to create a group box containing several line edits and a small text
editor which are displayed in a grid layout. Finally, we use the
- \c createFormGroupBox() function to createa a group box with
+ \c createFormGroupBox() function to create a group box with
three labels and three input fields: a line edit, a combo box and
a spin box.
diff --git a/doc/src/examples/basicsortfiltermodel.qdoc b/doc/src/examples/basicsortfiltermodel.qdoc
index 176a77d..8d00e03 100644
--- a/doc/src/examples/basicsortfiltermodel.qdoc
+++ b/doc/src/examples/basicsortfiltermodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/bearercloud.qdoc b/doc/src/examples/bearercloud.qdoc
index 7a61bac..bf5da41 100644
--- a/doc/src/examples/bearercloud.qdoc
+++ b/doc/src/examples/bearercloud.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/bearermonitor.qdoc b/doc/src/examples/bearermonitor.qdoc
index 5295488..1a15bc3 100644
--- a/doc/src/examples/bearermonitor.qdoc
+++ b/doc/src/examples/bearermonitor.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/blockingfortuneclient.qdoc b/doc/src/examples/blockingfortuneclient.qdoc
index 9545823..be8a9ba 100644
--- a/doc/src/examples/blockingfortuneclient.qdoc
+++ b/doc/src/examples/blockingfortuneclient.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/blurpicker.qdoc b/doc/src/examples/blurpicker.qdoc
index 0edcfdd..7be5863 100644
--- a/doc/src/examples/blurpicker.qdoc
+++ b/doc/src/examples/blurpicker.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/borderlayout.qdoc b/doc/src/examples/borderlayout.qdoc
index 47414f7..5ccc95f 100644
--- a/doc/src/examples/borderlayout.qdoc
+++ b/doc/src/examples/borderlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/broadcastreceiver.qdoc b/doc/src/examples/broadcastreceiver.qdoc
index b40f7c0..13555e7 100644
--- a/doc/src/examples/broadcastreceiver.qdoc
+++ b/doc/src/examples/broadcastreceiver.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/broadcastsender.qdoc b/doc/src/examples/broadcastsender.qdoc
index 0e88a88..b7140b9 100644
--- a/doc/src/examples/broadcastsender.qdoc
+++ b/doc/src/examples/broadcastsender.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/cachedtable.qdoc b/doc/src/examples/cachedtable.qdoc
index efbcee1..31cc40f 100644
--- a/doc/src/examples/cachedtable.qdoc
+++ b/doc/src/examples/cachedtable.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/calculator.qdoc b/doc/src/examples/calculator.qdoc
index bda369b..a85e0b0 100644
--- a/doc/src/examples/calculator.qdoc
+++ b/doc/src/examples/calculator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/calculatorbuilder.qdoc b/doc/src/examples/calculatorbuilder.qdoc
index dae70be..03acb93 100644
--- a/doc/src/examples/calculatorbuilder.qdoc
+++ b/doc/src/examples/calculatorbuilder.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/calculatorform.qdoc b/doc/src/examples/calculatorform.qdoc
index 5c36589..9ee6e3c 100644
--- a/doc/src/examples/calculatorform.qdoc
+++ b/doc/src/examples/calculatorform.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/calendar.qdoc b/doc/src/examples/calendar.qdoc
index 27ef538..1395a3f 100644
--- a/doc/src/examples/calendar.qdoc
+++ b/doc/src/examples/calendar.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/calendarwidget.qdoc b/doc/src/examples/calendarwidget.qdoc
index 3338f22..a65145f 100644
--- a/doc/src/examples/calendarwidget.qdoc
+++ b/doc/src/examples/calendarwidget.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/capabilitiesexample.qdoc b/doc/src/examples/capabilitiesexample.qdoc
index 59a30e5..2eab2c0 100644
--- a/doc/src/examples/capabilitiesexample.qdoc
+++ b/doc/src/examples/capabilitiesexample.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/charactermap.qdoc b/doc/src/examples/charactermap.qdoc
index 9dd69ca..b9dd0c0 100644
--- a/doc/src/examples/charactermap.qdoc
+++ b/doc/src/examples/charactermap.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/chart.qdoc b/doc/src/examples/chart.qdoc
index 78b3295..4021d46 100644
--- a/doc/src/examples/chart.qdoc
+++ b/doc/src/examples/chart.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/classwizard.qdoc b/doc/src/examples/classwizard.qdoc
index d81084f..18da08e 100644
--- a/doc/src/examples/classwizard.qdoc
+++ b/doc/src/examples/classwizard.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/codecs.qdoc b/doc/src/examples/codecs.qdoc
index a0699bf..fc948e8 100644
--- a/doc/src/examples/codecs.qdoc
+++ b/doc/src/examples/codecs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/codeeditor.qdoc b/doc/src/examples/codeeditor.qdoc
index 9dc176c..6c7b914 100644
--- a/doc/src/examples/codeeditor.qdoc
+++ b/doc/src/examples/codeeditor.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/collidingmice-example.qdoc b/doc/src/examples/collidingmice-example.qdoc
index 7a19575..af364ff 100644
--- a/doc/src/examples/collidingmice-example.qdoc
+++ b/doc/src/examples/collidingmice-example.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/coloreditorfactory.qdoc b/doc/src/examples/coloreditorfactory.qdoc
index 2229869..5a419e4 100644
--- a/doc/src/examples/coloreditorfactory.qdoc
+++ b/doc/src/examples/coloreditorfactory.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/combowidgetmapper.qdoc b/doc/src/examples/combowidgetmapper.qdoc
index 3621419..3a396c9 100644
--- a/doc/src/examples/combowidgetmapper.qdoc
+++ b/doc/src/examples/combowidgetmapper.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/completer.qdoc b/doc/src/examples/completer.qdoc
index 0237475..d56f4e6 100644
--- a/doc/src/examples/completer.qdoc
+++ b/doc/src/examples/completer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/complexpingpong.qdoc b/doc/src/examples/complexpingpong.qdoc
index c99095f..a49568d 100644
--- a/doc/src/examples/complexpingpong.qdoc
+++ b/doc/src/examples/complexpingpong.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/concentriccircles.qdoc b/doc/src/examples/concentriccircles.qdoc
index 3594736..03fb5ec 100644
--- a/doc/src/examples/concentriccircles.qdoc
+++ b/doc/src/examples/concentriccircles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/configdialog.qdoc b/doc/src/examples/configdialog.qdoc
index d05fd81..1c936b9 100644
--- a/doc/src/examples/configdialog.qdoc
+++ b/doc/src/examples/configdialog.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/containerextension.qdoc b/doc/src/examples/containerextension.qdoc
index c4c108f..64c607e 100644
--- a/doc/src/examples/containerextension.qdoc
+++ b/doc/src/examples/containerextension.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/context2d.qdoc b/doc/src/examples/context2d.qdoc
index d9b30ea..9501cc0 100644
--- a/doc/src/examples/context2d.qdoc
+++ b/doc/src/examples/context2d.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/contextsensitivehelp.qdoc b/doc/src/examples/contextsensitivehelp.qdoc
index d88356c..79baf3c 100644
--- a/doc/src/examples/contextsensitivehelp.qdoc
+++ b/doc/src/examples/contextsensitivehelp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/contiguouscache.qdoc b/doc/src/examples/contiguouscache.qdoc
index 2236fc4..cb8bd08 100644
--- a/doc/src/examples/contiguouscache.qdoc
+++ b/doc/src/examples/contiguouscache.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/customcompleter.qdoc b/doc/src/examples/customcompleter.qdoc
index 415abaa..9f49780 100644
--- a/doc/src/examples/customcompleter.qdoc
+++ b/doc/src/examples/customcompleter.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/customsortfiltermodel.qdoc b/doc/src/examples/customsortfiltermodel.qdoc
index 16b3bb6..98fcd05 100644
--- a/doc/src/examples/customsortfiltermodel.qdoc
+++ b/doc/src/examples/customsortfiltermodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/customtype.qdoc b/doc/src/examples/customtype.qdoc
index 0765c5f..dbd4f37 100644
--- a/doc/src/examples/customtype.qdoc
+++ b/doc/src/examples/customtype.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/customtypesending.qdoc b/doc/src/examples/customtypesending.qdoc
index 2c32154..83f0e85 100644
--- a/doc/src/examples/customtypesending.qdoc
+++ b/doc/src/examples/customtypesending.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -34,10 +34,6 @@
\image customtypesending-example.png
- Contents:
-
- \tableofcontents
-
\section1 Overview
In the \l{Custom Type Example}, we showed how to integrate custom types
@@ -51,7 +47,7 @@
a \c Window class containing signals and slots whose signatures include
\c Message arguments.
- \section1 The Window Class Definition
+ \section1 The Window and Message Class Definitions
We define a simple \c Window class with a signal and public slot that
allow a \c Message object to be sent via a signal-slot connection:
@@ -64,6 +60,17 @@
instance in the \c thisMessage private variable which holds the actual
message to be sent.
+ The \c Message class is defined in the following way:
+
+ \snippet examples/tools/customtypesending/message.h custom type definition
+
+ The type is declared to the meta-type system with the Q_DECLARE_METATYPE()
+ macro:
+
+ \snippet examples/tools/customtypesending/message.h custom type meta-type declaration
+
+ This will make the type available for use in direct signal-slot connections.
+
\section1 The Window Class Implementation
The \c Window constructor sets up a user interface containing a text
diff --git a/doc/src/examples/customwidgetplugin.qdoc b/doc/src/examples/customwidgetplugin.qdoc
index 05a2255..c0c6180 100644
--- a/doc/src/examples/customwidgetplugin.qdoc
+++ b/doc/src/examples/customwidgetplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dbscreen.qdoc b/doc/src/examples/dbscreen.qdoc
index c3c4def..36c7bde 100644
--- a/doc/src/examples/dbscreen.qdoc
+++ b/doc/src/examples/dbscreen.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dbus-chat.qdoc b/doc/src/examples/dbus-chat.qdoc
index 593a340..1627593 100644
--- a/doc/src/examples/dbus-chat.qdoc
+++ b/doc/src/examples/dbus-chat.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dbus-listnames.qdoc b/doc/src/examples/dbus-listnames.qdoc
index b163910..0f634d3 100644
--- a/doc/src/examples/dbus-listnames.qdoc
+++ b/doc/src/examples/dbus-listnames.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dbus-pingpong.qdoc b/doc/src/examples/dbus-pingpong.qdoc
index e1aea2a..47f624d 100644
--- a/doc/src/examples/dbus-pingpong.qdoc
+++ b/doc/src/examples/dbus-pingpong.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dbus-remotecontrolledcar.qdoc b/doc/src/examples/dbus-remotecontrolledcar.qdoc
index b7ffd08..93179e6 100644
--- a/doc/src/examples/dbus-remotecontrolledcar.qdoc
+++ b/doc/src/examples/dbus-remotecontrolledcar.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/defaultprototypes.qdoc b/doc/src/examples/defaultprototypes.qdoc
index c3c056a..d4075db 100644
--- a/doc/src/examples/defaultprototypes.qdoc
+++ b/doc/src/examples/defaultprototypes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/delayedencoding.qdoc b/doc/src/examples/delayedencoding.qdoc
index e3f00dc..f674dcb 100644
--- a/doc/src/examples/delayedencoding.qdoc
+++ b/doc/src/examples/delayedencoding.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/diagramscene.qdoc b/doc/src/examples/diagramscene.qdoc
index 7c643c2..98bc983 100644
--- a/doc/src/examples/diagramscene.qdoc
+++ b/doc/src/examples/diagramscene.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/digitalclock.qdoc b/doc/src/examples/digitalclock.qdoc
index 7495b7d..e550a52 100644
--- a/doc/src/examples/digitalclock.qdoc
+++ b/doc/src/examples/digitalclock.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dirview.qdoc b/doc/src/examples/dirview.qdoc
index 0fdebf5..b36d81f 100644
--- a/doc/src/examples/dirview.qdoc
+++ b/doc/src/examples/dirview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dockwidgets.qdoc b/doc/src/examples/dockwidgets.qdoc
index 8ded28c..1f31a12 100644
--- a/doc/src/examples/dockwidgets.qdoc
+++ b/doc/src/examples/dockwidgets.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dombookmarks.qdoc b/doc/src/examples/dombookmarks.qdoc
index 1ff0e03..5cb6777 100644
--- a/doc/src/examples/dombookmarks.qdoc
+++ b/doc/src/examples/dombookmarks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/domtraversal.qdoc b/doc/src/examples/domtraversal.qdoc
index 83c79e7..66546df 100644
--- a/doc/src/examples/domtraversal.qdoc
+++ b/doc/src/examples/domtraversal.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/draganddroppuzzle.qdoc b/doc/src/examples/draganddroppuzzle.qdoc
index 0038b5d..8f99c93 100644
--- a/doc/src/examples/draganddroppuzzle.qdoc
+++ b/doc/src/examples/draganddroppuzzle.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dragdroprobot.qdoc b/doc/src/examples/dragdroprobot.qdoc
index 59d9f10..7e4c06f 100644
--- a/doc/src/examples/dragdroprobot.qdoc
+++ b/doc/src/examples/dragdroprobot.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/draggableicons.qdoc b/doc/src/examples/draggableicons.qdoc
index 7d5a936..589ba27 100644
--- a/doc/src/examples/draggableicons.qdoc
+++ b/doc/src/examples/draggableicons.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/draggabletext.qdoc b/doc/src/examples/draggabletext.qdoc
index f1cf63b..2195a8f 100644
--- a/doc/src/examples/draggabletext.qdoc
+++ b/doc/src/examples/draggabletext.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/drilldown.qdoc b/doc/src/examples/drilldown.qdoc
index 56ac538..8160bed 100644
--- a/doc/src/examples/drilldown.qdoc
+++ b/doc/src/examples/drilldown.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dropsite.qdoc b/doc/src/examples/dropsite.qdoc
index 2767a35..7145c0e 100644
--- a/doc/src/examples/dropsite.qdoc
+++ b/doc/src/examples/dropsite.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/dynamiclayouts.qdoc b/doc/src/examples/dynamiclayouts.qdoc
index 46a996c..f691321 100644
--- a/doc/src/examples/dynamiclayouts.qdoc
+++ b/doc/src/examples/dynamiclayouts.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/easing.qdoc b/doc/src/examples/easing.qdoc
index 70237fe..8116791 100644
--- a/doc/src/examples/easing.qdoc
+++ b/doc/src/examples/easing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/echoplugin.qdoc b/doc/src/examples/echoplugin.qdoc
index a3c3772..dec85be 100644
--- a/doc/src/examples/echoplugin.qdoc
+++ b/doc/src/examples/echoplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/editabletreemodel.qdoc b/doc/src/examples/editabletreemodel.qdoc
index c6cd824..fc0743a 100644
--- a/doc/src/examples/editabletreemodel.qdoc
+++ b/doc/src/examples/editabletreemodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/elasticnodes.qdoc b/doc/src/examples/elasticnodes.qdoc
index bdc807f..c33a4a1 100644
--- a/doc/src/examples/elasticnodes.qdoc
+++ b/doc/src/examples/elasticnodes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/eventtransitions.qdoc b/doc/src/examples/eventtransitions.qdoc
index b07b227..cf59e1b 100644
--- a/doc/src/examples/eventtransitions.qdoc
+++ b/doc/src/examples/eventtransitions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/extension.qdoc b/doc/src/examples/extension.qdoc
index daa4433..23c1eb4 100644
--- a/doc/src/examples/extension.qdoc
+++ b/doc/src/examples/extension.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/factorial.qdoc b/doc/src/examples/factorial.qdoc
index f4ea022..085d469 100644
--- a/doc/src/examples/factorial.qdoc
+++ b/doc/src/examples/factorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fademessage.qdoc b/doc/src/examples/fademessage.qdoc
index 5735a54..15f7ce4 100644
--- a/doc/src/examples/fademessage.qdoc
+++ b/doc/src/examples/fademessage.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc
index ae8e7fa..44683a3 100644
--- a/doc/src/examples/fancybrowser.qdoc
+++ b/doc/src/examples/fancybrowser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fetchmore.qdoc b/doc/src/examples/fetchmore.qdoc
index 85040f3..8781d61 100644
--- a/doc/src/examples/fetchmore.qdoc
+++ b/doc/src/examples/fetchmore.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/filetree.qdoc b/doc/src/examples/filetree.qdoc
index b0e947a..11492e6 100644
--- a/doc/src/examples/filetree.qdoc
+++ b/doc/src/examples/filetree.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/findfiles.qdoc b/doc/src/examples/findfiles.qdoc
index e10329e..a46dda0 100644
--- a/doc/src/examples/findfiles.qdoc
+++ b/doc/src/examples/findfiles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fingerpaint.qdoc b/doc/src/examples/fingerpaint.qdoc
index 4b62570..264a226 100644
--- a/doc/src/examples/fingerpaint.qdoc
+++ b/doc/src/examples/fingerpaint.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/flowlayout.qdoc b/doc/src/examples/flowlayout.qdoc
index c9ab554..c786b13 100644
--- a/doc/src/examples/flowlayout.qdoc
+++ b/doc/src/examples/flowlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fontsampler.qdoc b/doc/src/examples/fontsampler.qdoc
index 1b05f77..7b38f58 100644
--- a/doc/src/examples/fontsampler.qdoc
+++ b/doc/src/examples/fontsampler.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/formextractor.qdoc b/doc/src/examples/formextractor.qdoc
index af5977a..b199b70 100644
--- a/doc/src/examples/formextractor.qdoc
+++ b/doc/src/examples/formextractor.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fortuneclient.qdoc b/doc/src/examples/fortuneclient.qdoc
index ecfb4be..fa75e3e 100644
--- a/doc/src/examples/fortuneclient.qdoc
+++ b/doc/src/examples/fortuneclient.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fortuneserver.qdoc b/doc/src/examples/fortuneserver.qdoc
index 92c67ca..3708146 100644
--- a/doc/src/examples/fortuneserver.qdoc
+++ b/doc/src/examples/fortuneserver.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/framebufferobject.qdoc b/doc/src/examples/framebufferobject.qdoc
index 9f2d984..9f5d2dc 100644
--- a/doc/src/examples/framebufferobject.qdoc
+++ b/doc/src/examples/framebufferobject.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/framebufferobject2.qdoc b/doc/src/examples/framebufferobject2.qdoc
index f8936ba..0b2dbe9 100644
--- a/doc/src/examples/framebufferobject2.qdoc
+++ b/doc/src/examples/framebufferobject2.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/fridgemagnets.qdoc b/doc/src/examples/fridgemagnets.qdoc
index 2ba5cc7..ac67b55 100644
--- a/doc/src/examples/fridgemagnets.qdoc
+++ b/doc/src/examples/fridgemagnets.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/frozencolumn.qdoc b/doc/src/examples/frozencolumn.qdoc
index 4ee0ef6..e8deddd 100644
--- a/doc/src/examples/frozencolumn.qdoc
+++ b/doc/src/examples/frozencolumn.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/ftp.qdoc b/doc/src/examples/ftp.qdoc
index 30746a4..087ac5a 100644
--- a/doc/src/examples/ftp.qdoc
+++ b/doc/src/examples/ftp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/globalVariables.qdoc b/doc/src/examples/globalVariables.qdoc
index 18363fb..8468abb 100644
--- a/doc/src/examples/globalVariables.qdoc
+++ b/doc/src/examples/globalVariables.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/googlechat.qdoc b/doc/src/examples/googlechat.qdoc
index 9a6999c..a751ae5 100644
--- a/doc/src/examples/googlechat.qdoc
+++ b/doc/src/examples/googlechat.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/googlesuggest.qdoc b/doc/src/examples/googlesuggest.qdoc
index 579124b..63fabf8 100644
--- a/doc/src/examples/googlesuggest.qdoc
+++ b/doc/src/examples/googlesuggest.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/grabber.qdoc b/doc/src/examples/grabber.qdoc
index 7555f08..19501a5 100644
--- a/doc/src/examples/grabber.qdoc
+++ b/doc/src/examples/grabber.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/graphicsview-anchorlayout.qdoc b/doc/src/examples/graphicsview-anchorlayout.qdoc
index dbf512c..61e7f55 100644
--- a/doc/src/examples/graphicsview-anchorlayout.qdoc
+++ b/doc/src/examples/graphicsview-anchorlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/graphicsview-flowlayout.qdoc b/doc/src/examples/graphicsview-flowlayout.qdoc
index 5b9d763..6320780 100644
--- a/doc/src/examples/graphicsview-flowlayout.qdoc
+++ b/doc/src/examples/graphicsview-flowlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/graphicsview-simpleanchorlayout.qdoc b/doc/src/examples/graphicsview-simpleanchorlayout.qdoc
index 22192a0..c8d332b 100644
--- a/doc/src/examples/graphicsview-simpleanchorlayout.qdoc
+++ b/doc/src/examples/graphicsview-simpleanchorlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/graphicsview-weatheranchorlayout.qdoc b/doc/src/examples/graphicsview-weatheranchorlayout.qdoc
index de0ebac..f77e3f5 100644
--- a/doc/src/examples/graphicsview-weatheranchorlayout.qdoc
+++ b/doc/src/examples/graphicsview-weatheranchorlayout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/groupbox.qdoc b/doc/src/examples/groupbox.qdoc
index 28af11c..f8a1ffd 100644
--- a/doc/src/examples/groupbox.qdoc
+++ b/doc/src/examples/groupbox.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/hellogl.qdoc b/doc/src/examples/hellogl.qdoc
index 97410c7..c8b82b3 100644
--- a/doc/src/examples/hellogl.qdoc
+++ b/doc/src/examples/hellogl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/hellogl_es.qdoc b/doc/src/examples/hellogl_es.qdoc
index 4a38b2a..d96d3de 100644
--- a/doc/src/examples/hellogl_es.qdoc
+++ b/doc/src/examples/hellogl_es.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/helloscript.qdoc b/doc/src/examples/helloscript.qdoc
index 2e7b60f..842e393 100644
--- a/doc/src/examples/helloscript.qdoc
+++ b/doc/src/examples/helloscript.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/hellotr.qdoc b/doc/src/examples/hellotr.qdoc
index 5cd9743..5d794c6 100644
--- a/doc/src/examples/hellotr.qdoc
+++ b/doc/src/examples/hellotr.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/htmlinfo.qdoc b/doc/src/examples/htmlinfo.qdoc
index d25219b..a4e11bd 100644
--- a/doc/src/examples/htmlinfo.qdoc
+++ b/doc/src/examples/htmlinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/http.qdoc b/doc/src/examples/http.qdoc
index 087a7e5..2c86edd 100644
--- a/doc/src/examples/http.qdoc
+++ b/doc/src/examples/http.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/i18n.qdoc b/doc/src/examples/i18n.qdoc
index 361123d..0698dbe 100644
--- a/doc/src/examples/i18n.qdoc
+++ b/doc/src/examples/i18n.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/icons.qdoc b/doc/src/examples/icons.qdoc
index e445374..21a308d 100644
--- a/doc/src/examples/icons.qdoc
+++ b/doc/src/examples/icons.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/imagecomposition.qdoc b/doc/src/examples/imagecomposition.qdoc
index 3bf6e7f..f2b6083 100644
--- a/doc/src/examples/imagecomposition.qdoc
+++ b/doc/src/examples/imagecomposition.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/imagegestures.qdoc b/doc/src/examples/imagegestures.qdoc
index 3d4e467..8bdfaf4 100644
--- a/doc/src/examples/imagegestures.qdoc
+++ b/doc/src/examples/imagegestures.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/imageviewer.qdoc b/doc/src/examples/imageviewer.qdoc
index 3d1dc6f..8cf16d7 100644
--- a/doc/src/examples/imageviewer.qdoc
+++ b/doc/src/examples/imageviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/inputpanel.qdoc b/doc/src/examples/inputpanel.qdoc
index fe6c665..ea83171 100644
--- a/doc/src/examples/inputpanel.qdoc
+++ b/doc/src/examples/inputpanel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/itemviewspuzzle.qdoc b/doc/src/examples/itemviewspuzzle.qdoc
index 0a3f3cd..ed5e736 100644
--- a/doc/src/examples/itemviewspuzzle.qdoc
+++ b/doc/src/examples/itemviewspuzzle.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/licensewizard.qdoc b/doc/src/examples/licensewizard.qdoc
index 3719a4c..b29abb7 100644
--- a/doc/src/examples/licensewizard.qdoc
+++ b/doc/src/examples/licensewizard.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/lighting.qdoc b/doc/src/examples/lighting.qdoc
index 6277c1f..3e222e1 100644
--- a/doc/src/examples/lighting.qdoc
+++ b/doc/src/examples/lighting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/lineedits.qdoc b/doc/src/examples/lineedits.qdoc
index 8d94ee3..fc38bf9 100644
--- a/doc/src/examples/lineedits.qdoc
+++ b/doc/src/examples/lineedits.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/localfortuneclient.qdoc b/doc/src/examples/localfortuneclient.qdoc
index 33f40d7..295b8c8 100644
--- a/doc/src/examples/localfortuneclient.qdoc
+++ b/doc/src/examples/localfortuneclient.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/localfortuneserver.qdoc b/doc/src/examples/localfortuneserver.qdoc
index 7ee36cf..4bfc20c 100644
--- a/doc/src/examples/localfortuneserver.qdoc
+++ b/doc/src/examples/localfortuneserver.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/loopback.qdoc b/doc/src/examples/loopback.qdoc
index b58b786..0e2e808 100644
--- a/doc/src/examples/loopback.qdoc
+++ b/doc/src/examples/loopback.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/mandelbrot.qdoc b/doc/src/examples/mandelbrot.qdoc
index d4c17aa..44e8e66 100644
--- a/doc/src/examples/mandelbrot.qdoc
+++ b/doc/src/examples/mandelbrot.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/masterdetail.qdoc b/doc/src/examples/masterdetail.qdoc
index b3a673f..5bfdb4d 100644
--- a/doc/src/examples/masterdetail.qdoc
+++ b/doc/src/examples/masterdetail.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/mdi.qdoc b/doc/src/examples/mdi.qdoc
index 9e42ba2..ea388db 100644
--- a/doc/src/examples/mdi.qdoc
+++ b/doc/src/examples/mdi.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/menus.qdoc b/doc/src/examples/menus.qdoc
index d925745..9e82da3 100644
--- a/doc/src/examples/menus.qdoc
+++ b/doc/src/examples/menus.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/mousecalibration.qdoc b/doc/src/examples/mousecalibration.qdoc
index 71eecf3..bb9301c 100644
--- a/doc/src/examples/mousecalibration.qdoc
+++ b/doc/src/examples/mousecalibration.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/moveblocks.qdoc b/doc/src/examples/moveblocks.qdoc
index 48d6d60..eee5ac3 100644
--- a/doc/src/examples/moveblocks.qdoc
+++ b/doc/src/examples/moveblocks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/movie.qdoc b/doc/src/examples/movie.qdoc
index 4d7b3e0..478104ef 100644
--- a/doc/src/examples/movie.qdoc
+++ b/doc/src/examples/movie.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/multipleinheritance.qdoc b/doc/src/examples/multipleinheritance.qdoc
index 83a4d29..54c2ba4 100644
--- a/doc/src/examples/multipleinheritance.qdoc
+++ b/doc/src/examples/multipleinheritance.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/musicplayerexample.qdoc b/doc/src/examples/musicplayerexample.qdoc
index eaee747..9805bbb 100644
--- a/doc/src/examples/musicplayerexample.qdoc
+++ b/doc/src/examples/musicplayerexample.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/network-chat.qdoc b/doc/src/examples/network-chat.qdoc
index ba78f79..c5dba3f 100644
--- a/doc/src/examples/network-chat.qdoc
+++ b/doc/src/examples/network-chat.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/network-download.qdoc b/doc/src/examples/network-download.qdoc
index c1ab652..ecd45e6 100644
--- a/doc/src/examples/network-download.qdoc
+++ b/doc/src/examples/network-download.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/network-downloadmanager.qdoc b/doc/src/examples/network-downloadmanager.qdoc
index 6013e56..fbd3bca 100644
--- a/doc/src/examples/network-downloadmanager.qdoc
+++ b/doc/src/examples/network-downloadmanager.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/openvg-star.qdoc b/doc/src/examples/openvg-star.qdoc
index f3eee57..7b6193e 100644
--- a/doc/src/examples/openvg-star.qdoc
+++ b/doc/src/examples/openvg-star.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/orderform.qdoc b/doc/src/examples/orderform.qdoc
index b287f96..e78790a 100644
--- a/doc/src/examples/orderform.qdoc
+++ b/doc/src/examples/orderform.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/overpainting.qdoc b/doc/src/examples/overpainting.qdoc
index 36002ed..f930d6b 100644
--- a/doc/src/examples/overpainting.qdoc
+++ b/doc/src/examples/overpainting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/padnavigator.qdoc b/doc/src/examples/padnavigator.qdoc
index 9f471a8..2bdad8d 100644
--- a/doc/src/examples/padnavigator.qdoc
+++ b/doc/src/examples/padnavigator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/painterpaths.qdoc b/doc/src/examples/painterpaths.qdoc
index 981a30e..dbc3563 100644
--- a/doc/src/examples/painterpaths.qdoc
+++ b/doc/src/examples/painterpaths.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/pbuffers.qdoc b/doc/src/examples/pbuffers.qdoc
index 331a194..a8257e1 100644
--- a/doc/src/examples/pbuffers.qdoc
+++ b/doc/src/examples/pbuffers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/pbuffers2.qdoc b/doc/src/examples/pbuffers2.qdoc
index 230bf27..5a0bba3 100644
--- a/doc/src/examples/pbuffers2.qdoc
+++ b/doc/src/examples/pbuffers2.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/pinchzoom.qdoc b/doc/src/examples/pinchzoom.qdoc
index 198cbb3..60fac29 100644
--- a/doc/src/examples/pinchzoom.qdoc
+++ b/doc/src/examples/pinchzoom.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/pingpong.qdoc b/doc/src/examples/pingpong.qdoc
index fc0580f..2b27db7 100644
--- a/doc/src/examples/pingpong.qdoc
+++ b/doc/src/examples/pingpong.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/pixelator.qdoc b/doc/src/examples/pixelator.qdoc
index f631b0b..d40316e 100644
--- a/doc/src/examples/pixelator.qdoc
+++ b/doc/src/examples/pixelator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/plugandpaint.qdoc b/doc/src/examples/plugandpaint.qdoc
index 0bd3edb..19053da 100644
--- a/doc/src/examples/plugandpaint.qdoc
+++ b/doc/src/examples/plugandpaint.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/portedasteroids.qdoc b/doc/src/examples/portedasteroids.qdoc
index 17f9ccf..6307931 100644
--- a/doc/src/examples/portedasteroids.qdoc
+++ b/doc/src/examples/portedasteroids.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/portedcanvas.qdoc b/doc/src/examples/portedcanvas.qdoc
index acfca12..9e4b004 100644
--- a/doc/src/examples/portedcanvas.qdoc
+++ b/doc/src/examples/portedcanvas.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/previewer.qdoc b/doc/src/examples/previewer.qdoc
index 61660da..c7140f7 100644
--- a/doc/src/examples/previewer.qdoc
+++ b/doc/src/examples/previewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-calculator.qdoc b/doc/src/examples/qml-calculator.qdoc
index 5c52575..1bc5f79 100644
--- a/doc/src/examples/qml-calculator.qdoc
+++ b/doc/src/examples/qml-calculator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-examples.qdoc b/doc/src/examples/qml-examples.qdoc
index 745baa3..ca24c66 100644
--- a/doc/src/examples/qml-examples.qdoc
+++ b/doc/src/examples/qml-examples.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -236,6 +236,37 @@
This example shows how to enable text translation in QML.
\image qml-i18n-example.png
+
+ \section1 Introduction
+
+ The QML runtime automatically loads a translation from the i18n subdirectory
+ of the root QML file, based on the system language. The translations are
+ held in QM files that must be generated from TS files.
+
+ \section1 Updating Translations
+
+ The \c{.ts} files are created and updated by running:
+
+ \code
+ lupdate i18n.qml -ts i18n/base.ts
+ \endcode
+
+ If no translation file exists, one will be created. If a file already exists,
+ it will be updated to contain the latest strings from the QML file.
+
+ Translations for new languages are created by copying \c{i18n/base.ts} to
+ \c{i18n/qml_<lang>.ts} The TS files can then be edited with
+ \l{Qt Linguist Manual}{Qt Linguist}:
+
+ \code
+ linguist i18n/qml_fr.ts
+ \endcode
+
+ The run-time translation files are then generated by running:
+
+ \code
+ lrelease i18n/*.ts
+ \endcode
*/
/*!
diff --git a/doc/src/examples/qml-extending.qdoc b/doc/src/examples/qml-extending.qdoc
index 21ec3bb..789b8f6 100644
--- a/doc/src/examples/qml-extending.qdoc
+++ b/doc/src/examples/qml-extending.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-flickr.qdoc b/doc/src/examples/qml-flickr.qdoc
index 5ebd1ea..6d47675 100644
--- a/doc/src/examples/qml-flickr.qdoc
+++ b/doc/src/examples/qml-flickr.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-folderlistmodel.qdoc b/doc/src/examples/qml-folderlistmodel.qdoc
index 666d2dd..1592d7b 100644
--- a/doc/src/examples/qml-folderlistmodel.qdoc
+++ b/doc/src/examples/qml-folderlistmodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-minehunt.qdoc b/doc/src/examples/qml-minehunt.qdoc
index e1ff22f..6e7ce4f 100644
--- a/doc/src/examples/qml-minehunt.qdoc
+++ b/doc/src/examples/qml-minehunt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-photoviewer.qdoc b/doc/src/examples/qml-photoviewer.qdoc
index e54d4af..032284e 100644
--- a/doc/src/examples/qml-photoviewer.qdoc
+++ b/doc/src/examples/qml-photoviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-rssnews.qdoc b/doc/src/examples/qml-rssnews.qdoc
index 5a6696c..e7da263 100644
--- a/doc/src/examples/qml-rssnews.qdoc
+++ b/doc/src/examples/qml-rssnews.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-samegame.qdoc b/doc/src/examples/qml-samegame.qdoc
index 1248fc1..588a51c 100644
--- a/doc/src/examples/qml-samegame.qdoc
+++ b/doc/src/examples/qml-samegame.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-snake.qdoc b/doc/src/examples/qml-snake.qdoc
index eaea128..c4c1125 100644
--- a/doc/src/examples/qml-snake.qdoc
+++ b/doc/src/examples/qml-snake.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-twitter.qdoc b/doc/src/examples/qml-twitter.qdoc
index c3182a0..73e3f49 100644
--- a/doc/src/examples/qml-twitter.qdoc
+++ b/doc/src/examples/qml-twitter.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qml-webbrowser.qdoc b/doc/src/examples/qml-webbrowser.qdoc
index a3cef66..a7d543f 100644
--- a/doc/src/examples/qml-webbrowser.qdoc
+++ b/doc/src/examples/qml-webbrowser.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qobjectxmlmodel.qdoc b/doc/src/examples/qobjectxmlmodel.qdoc
index 8054ae2..cddc1d1 100644
--- a/doc/src/examples/qobjectxmlmodel.qdoc
+++ b/doc/src/examples/qobjectxmlmodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtconcurrent-imagescaling.qdoc b/doc/src/examples/qtconcurrent-imagescaling.qdoc
index df6d84b..4ee7e75 100644
--- a/doc/src/examples/qtconcurrent-imagescaling.qdoc
+++ b/doc/src/examples/qtconcurrent-imagescaling.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtconcurrent-map.qdoc b/doc/src/examples/qtconcurrent-map.qdoc
index b605137..ee4608a 100644
--- a/doc/src/examples/qtconcurrent-map.qdoc
+++ b/doc/src/examples/qtconcurrent-map.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtconcurrent-progressdialog.qdoc b/doc/src/examples/qtconcurrent-progressdialog.qdoc
index b5e9dde..b5e01ed 100644
--- a/doc/src/examples/qtconcurrent-progressdialog.qdoc
+++ b/doc/src/examples/qtconcurrent-progressdialog.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtconcurrent-runfunction.qdoc b/doc/src/examples/qtconcurrent-runfunction.qdoc
index 33fbb38..5b431cf 100644
--- a/doc/src/examples/qtconcurrent-runfunction.qdoc
+++ b/doc/src/examples/qtconcurrent-runfunction.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtconcurrent-wordcount.qdoc b/doc/src/examples/qtconcurrent-wordcount.qdoc
index a5df4a9..b02017e 100644
--- a/doc/src/examples/qtconcurrent-wordcount.qdoc
+++ b/doc/src/examples/qtconcurrent-wordcount.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtscriptcalculator.qdoc b/doc/src/examples/qtscriptcalculator.qdoc
index a35ea4b..590f56c 100644
--- a/doc/src/examples/qtscriptcalculator.qdoc
+++ b/doc/src/examples/qtscriptcalculator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtscriptcustomclass.qdoc b/doc/src/examples/qtscriptcustomclass.qdoc
index 3918ba9..71d0ace 100644
--- a/doc/src/examples/qtscriptcustomclass.qdoc
+++ b/doc/src/examples/qtscriptcustomclass.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qtscripttetrix.qdoc b/doc/src/examples/qtscripttetrix.qdoc
index 3bab93b..c308b1b 100644
--- a/doc/src/examples/qtscripttetrix.qdoc
+++ b/doc/src/examples/qtscripttetrix.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/querymodel.qdoc b/doc/src/examples/querymodel.qdoc
index 2aa1c2e..ff538dc 100644
--- a/doc/src/examples/querymodel.qdoc
+++ b/doc/src/examples/querymodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/queuedcustomtype.qdoc b/doc/src/examples/queuedcustomtype.qdoc
index ed65bda..fec1600 100644
--- a/doc/src/examples/queuedcustomtype.qdoc
+++ b/doc/src/examples/queuedcustomtype.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/qxmlstreambookmarks.qdoc b/doc/src/examples/qxmlstreambookmarks.qdoc
index 87258d1..e3c5ccb 100644
--- a/doc/src/examples/qxmlstreambookmarks.qdoc
+++ b/doc/src/examples/qxmlstreambookmarks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/recentfiles.qdoc b/doc/src/examples/recentfiles.qdoc
index 5bd8fd3..501d12e 100644
--- a/doc/src/examples/recentfiles.qdoc
+++ b/doc/src/examples/recentfiles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/recipes.qdoc b/doc/src/examples/recipes.qdoc
index e47e2f0..f01eaf4 100644
--- a/doc/src/examples/recipes.qdoc
+++ b/doc/src/examples/recipes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/regexp.qdoc b/doc/src/examples/regexp.qdoc
index d160172..1759394 100644
--- a/doc/src/examples/regexp.qdoc
+++ b/doc/src/examples/regexp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/relationaltablemodel.qdoc b/doc/src/examples/relationaltablemodel.qdoc
index f4883f2..68c2d37 100644
--- a/doc/src/examples/relationaltablemodel.qdoc
+++ b/doc/src/examples/relationaltablemodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/remotecontrol.qdoc b/doc/src/examples/remotecontrol.qdoc
index a2241d4..f148cb2 100644
--- a/doc/src/examples/remotecontrol.qdoc
+++ b/doc/src/examples/remotecontrol.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/rogue.qdoc b/doc/src/examples/rogue.qdoc
index a1c41e9..5b49a50 100644
--- a/doc/src/examples/rogue.qdoc
+++ b/doc/src/examples/rogue.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/rsslisting.qdoc b/doc/src/examples/rsslisting.qdoc
index 95e579a..878ad49 100644
--- a/doc/src/examples/rsslisting.qdoc
+++ b/doc/src/examples/rsslisting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/samplebuffers.qdoc b/doc/src/examples/samplebuffers.qdoc
index cab66a2..a000f06 100644
--- a/doc/src/examples/samplebuffers.qdoc
+++ b/doc/src/examples/samplebuffers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/saxbookmarks.qdoc b/doc/src/examples/saxbookmarks.qdoc
index 7656846..6b8aa02 100644
--- a/doc/src/examples/saxbookmarks.qdoc
+++ b/doc/src/examples/saxbookmarks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/schema.qdoc b/doc/src/examples/schema.qdoc
index 47171ac..abe0f63 100644
--- a/doc/src/examples/schema.qdoc
+++ b/doc/src/examples/schema.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/screenshot.qdoc b/doc/src/examples/screenshot.qdoc
index 878f959..1bc5092 100644
--- a/doc/src/examples/screenshot.qdoc
+++ b/doc/src/examples/screenshot.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/scribble.qdoc b/doc/src/examples/scribble.qdoc
index d827e0e..cfb36e6 100644
--- a/doc/src/examples/scribble.qdoc
+++ b/doc/src/examples/scribble.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/script-marshal.qdoc b/doc/src/examples/script-marshal.qdoc
index 1dba23c..279036d 100644
--- a/doc/src/examples/script-marshal.qdoc
+++ b/doc/src/examples/script-marshal.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/script-qscript.qdoc b/doc/src/examples/script-qscript.qdoc
index caf2bce..0ec0d01 100644
--- a/doc/src/examples/script-qscript.qdoc
+++ b/doc/src/examples/script-qscript.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/script-qsdbg.qdoc b/doc/src/examples/script-qsdbg.qdoc
index bc95fdb..50b52f7 100644
--- a/doc/src/examples/script-qsdbg.qdoc
+++ b/doc/src/examples/script-qsdbg.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/sdi.qdoc b/doc/src/examples/sdi.qdoc
index 30bd89a..75c063f 100644
--- a/doc/src/examples/sdi.qdoc
+++ b/doc/src/examples/sdi.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/securesocketclient.qdoc b/doc/src/examples/securesocketclient.qdoc
index 69f444b..2356e86 100644
--- a/doc/src/examples/securesocketclient.qdoc
+++ b/doc/src/examples/securesocketclient.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/semaphores.qdoc b/doc/src/examples/semaphores.qdoc
index 6f749d2..d315c19 100644
--- a/doc/src/examples/semaphores.qdoc
+++ b/doc/src/examples/semaphores.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/settingseditor.qdoc b/doc/src/examples/settingseditor.qdoc
index 9f99f28..8429bcd 100644
--- a/doc/src/examples/settingseditor.qdoc
+++ b/doc/src/examples/settingseditor.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/shapedclock.qdoc b/doc/src/examples/shapedclock.qdoc
index 769c9eb..adb4441 100644
--- a/doc/src/examples/shapedclock.qdoc
+++ b/doc/src/examples/shapedclock.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/sharedmemory.qdoc b/doc/src/examples/sharedmemory.qdoc
index 6e13b96..6fd0947 100644
--- a/doc/src/examples/sharedmemory.qdoc
+++ b/doc/src/examples/sharedmemory.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simpledecoration.qdoc b/doc/src/examples/simpledecoration.qdoc
index 021a4d3..74d6c0e 100644
--- a/doc/src/examples/simpledecoration.qdoc
+++ b/doc/src/examples/simpledecoration.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simpledommodel.qdoc b/doc/src/examples/simpledommodel.qdoc
index d10f6a7..82ecac5 100644
--- a/doc/src/examples/simpledommodel.qdoc
+++ b/doc/src/examples/simpledommodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simpleselector.qdoc b/doc/src/examples/simpleselector.qdoc
index 1e68699..f66ced5 100644
--- a/doc/src/examples/simpleselector.qdoc
+++ b/doc/src/examples/simpleselector.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simpletextviewer.qdoc b/doc/src/examples/simpletextviewer.qdoc
index e5c887a..50ced54 100644
--- a/doc/src/examples/simpletextviewer.qdoc
+++ b/doc/src/examples/simpletextviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simpletreemodel.qdoc b/doc/src/examples/simpletreemodel.qdoc
index 7d1f8fe..c09c216 100644
--- a/doc/src/examples/simpletreemodel.qdoc
+++ b/doc/src/examples/simpletreemodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/simplewidgetmapper.qdoc b/doc/src/examples/simplewidgetmapper.qdoc
index 413ad2b..686263a 100644
--- a/doc/src/examples/simplewidgetmapper.qdoc
+++ b/doc/src/examples/simplewidgetmapper.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/sipdialog.qdoc b/doc/src/examples/sipdialog.qdoc
index 25ae7eb..16081f0 100644
--- a/doc/src/examples/sipdialog.qdoc
+++ b/doc/src/examples/sipdialog.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/sliders.qdoc b/doc/src/examples/sliders.qdoc
index f44fabb..5d878fe 100644
--- a/doc/src/examples/sliders.qdoc
+++ b/doc/src/examples/sliders.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/spinboxdelegate.qdoc b/doc/src/examples/spinboxdelegate.qdoc
index 44308ca..61eff51 100644
--- a/doc/src/examples/spinboxdelegate.qdoc
+++ b/doc/src/examples/spinboxdelegate.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/spinboxes.qdoc b/doc/src/examples/spinboxes.qdoc
index 34a95c7..865335e 100644
--- a/doc/src/examples/spinboxes.qdoc
+++ b/doc/src/examples/spinboxes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/sqlwidgetmapper.qdoc b/doc/src/examples/sqlwidgetmapper.qdoc
index db48f9c..d642909 100644
--- a/doc/src/examples/sqlwidgetmapper.qdoc
+++ b/doc/src/examples/sqlwidgetmapper.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/standarddialogs.qdoc b/doc/src/examples/standarddialogs.qdoc
index 368b713..dbe21b9 100644
--- a/doc/src/examples/standarddialogs.qdoc
+++ b/doc/src/examples/standarddialogs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/stardelegate.qdoc b/doc/src/examples/stardelegate.qdoc
index 6e5e371..c895667 100644
--- a/doc/src/examples/stardelegate.qdoc
+++ b/doc/src/examples/stardelegate.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/states.qdoc b/doc/src/examples/states.qdoc
index 24362a2..573cda0 100644
--- a/doc/src/examples/states.qdoc
+++ b/doc/src/examples/states.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/stickman.qdoc b/doc/src/examples/stickman.qdoc
index 08450aa..46301a8 100644
--- a/doc/src/examples/stickman.qdoc
+++ b/doc/src/examples/stickman.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/styleplugin.qdoc b/doc/src/examples/styleplugin.qdoc
index 85cad0f..9d84a14 100644
--- a/doc/src/examples/styleplugin.qdoc
+++ b/doc/src/examples/styleplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/styles.qdoc b/doc/src/examples/styles.qdoc
index fc243e7..b9f48da 100644
--- a/doc/src/examples/styles.qdoc
+++ b/doc/src/examples/styles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/stylesheet.qdoc b/doc/src/examples/stylesheet.qdoc
index 348e3f3..d08c2a4 100644
--- a/doc/src/examples/stylesheet.qdoc
+++ b/doc/src/examples/stylesheet.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/svgalib.qdoc b/doc/src/examples/svgalib.qdoc
index 86681e6..3e3e4d5 100644
--- a/doc/src/examples/svgalib.qdoc
+++ b/doc/src/examples/svgalib.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/svggenerator.qdoc b/doc/src/examples/svggenerator.qdoc
index 622cbbe..ae968b9 100644
--- a/doc/src/examples/svggenerator.qdoc
+++ b/doc/src/examples/svggenerator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/svgviewer.qdoc b/doc/src/examples/svgviewer.qdoc
index 674b796..e528054 100644
--- a/doc/src/examples/svgviewer.qdoc
+++ b/doc/src/examples/svgviewer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/syntaxhighlighter.qdoc b/doc/src/examples/syntaxhighlighter.qdoc
index 2162702..722dcca 100644
--- a/doc/src/examples/syntaxhighlighter.qdoc
+++ b/doc/src/examples/syntaxhighlighter.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/systray.qdoc b/doc/src/examples/systray.qdoc
index 469642a..8b9de81 100644
--- a/doc/src/examples/systray.qdoc
+++ b/doc/src/examples/systray.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/tabdialog.qdoc b/doc/src/examples/tabdialog.qdoc
index 3db9caa..da447c4 100644
--- a/doc/src/examples/tabdialog.qdoc
+++ b/doc/src/examples/tabdialog.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/tablemodel.qdoc b/doc/src/examples/tablemodel.qdoc
index 9934023..04a13cc 100644
--- a/doc/src/examples/tablemodel.qdoc
+++ b/doc/src/examples/tablemodel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/tablet.qdoc b/doc/src/examples/tablet.qdoc
index adc49bf..58af376 100644
--- a/doc/src/examples/tablet.qdoc
+++ b/doc/src/examples/tablet.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/taskmenuextension.qdoc b/doc/src/examples/taskmenuextension.qdoc
index 8d9d843..d89b68c 100644
--- a/doc/src/examples/taskmenuextension.qdoc
+++ b/doc/src/examples/taskmenuextension.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/tetrix.qdoc b/doc/src/examples/tetrix.qdoc
index 177f592..ec46507 100644
--- a/doc/src/examples/tetrix.qdoc
+++ b/doc/src/examples/tetrix.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/textfinder.qdoc b/doc/src/examples/textfinder.qdoc
index ead950d..a04df00 100644
--- a/doc/src/examples/textfinder.qdoc
+++ b/doc/src/examples/textfinder.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/textobject.qdoc b/doc/src/examples/textobject.qdoc
index ce7431f..e655206 100644
--- a/doc/src/examples/textobject.qdoc
+++ b/doc/src/examples/textobject.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/textures.qdoc b/doc/src/examples/textures.qdoc
index 03e481e..d18268b 100644
--- a/doc/src/examples/textures.qdoc
+++ b/doc/src/examples/textures.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/threadedfortuneserver.qdoc b/doc/src/examples/threadedfortuneserver.qdoc
index cb18872..c0c4815 100644
--- a/doc/src/examples/threadedfortuneserver.qdoc
+++ b/doc/src/examples/threadedfortuneserver.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/tooltips.qdoc b/doc/src/examples/tooltips.qdoc
index 351eaf9..f7737b9 100644
--- a/doc/src/examples/tooltips.qdoc
+++ b/doc/src/examples/tooltips.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/torrent.qdoc b/doc/src/examples/torrent.qdoc
index 8488787..3c0d108 100644
--- a/doc/src/examples/torrent.qdoc
+++ b/doc/src/examples/torrent.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/touch-dials.qdoc b/doc/src/examples/touch-dials.qdoc
index 552d752..c6fc326 100644
--- a/doc/src/examples/touch-dials.qdoc
+++ b/doc/src/examples/touch-dials.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/touch-knobs.qdoc b/doc/src/examples/touch-knobs.qdoc
index deb4c28..08c2d0c 100644
--- a/doc/src/examples/touch-knobs.qdoc
+++ b/doc/src/examples/touch-knobs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/trafficinfo.qdoc b/doc/src/examples/trafficinfo.qdoc
index bc06178..e60c1cd 100644
--- a/doc/src/examples/trafficinfo.qdoc
+++ b/doc/src/examples/trafficinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/trafficlight.qdoc b/doc/src/examples/trafficlight.qdoc
index f1498a9..3d381d9 100644
--- a/doc/src/examples/trafficlight.qdoc
+++ b/doc/src/examples/trafficlight.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/transformations.qdoc b/doc/src/examples/transformations.qdoc
index 3c949b7..e60ab39 100644
--- a/doc/src/examples/transformations.qdoc
+++ b/doc/src/examples/transformations.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/treemodelcompleter.qdoc b/doc/src/examples/treemodelcompleter.qdoc
index 17bbd2c..b473831 100644
--- a/doc/src/examples/treemodelcompleter.qdoc
+++ b/doc/src/examples/treemodelcompleter.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/trivialwizard.qdoc b/doc/src/examples/trivialwizard.qdoc
index 2632560..381d969 100644
--- a/doc/src/examples/trivialwizard.qdoc
+++ b/doc/src/examples/trivialwizard.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/trollprint.qdoc b/doc/src/examples/trollprint.qdoc
index b9c9c56..d08b047 100644
--- a/doc/src/examples/trollprint.qdoc
+++ b/doc/src/examples/trollprint.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/twowaybutton.qdoc b/doc/src/examples/twowaybutton.qdoc
index bcecbd5..5fffe6d 100644
--- a/doc/src/examples/twowaybutton.qdoc
+++ b/doc/src/examples/twowaybutton.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/undoframework.qdoc b/doc/src/examples/undoframework.qdoc
index ef6a6a0..c497acc 100644
--- a/doc/src/examples/undoframework.qdoc
+++ b/doc/src/examples/undoframework.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/videographicsitem.qdoc b/doc/src/examples/videographicsitem.qdoc
index 587298c..3bb1f9a 100644
--- a/doc/src/examples/videographicsitem.qdoc
+++ b/doc/src/examples/videographicsitem.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/videowidget.qdoc b/doc/src/examples/videowidget.qdoc
index 66c2555..ab1a1c1 100644
--- a/doc/src/examples/videowidget.qdoc
+++ b/doc/src/examples/videowidget.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/waitconditions.qdoc b/doc/src/examples/waitconditions.qdoc
index 15565e9..75f60bd 100644
--- a/doc/src/examples/waitconditions.qdoc
+++ b/doc/src/examples/waitconditions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/webkit-bridge-imageanalyzer.qdoc b/doc/src/examples/webkit-bridge-imageanalyzer.qdoc
new file mode 100644
index 0000000..cee2659
--- /dev/null
+++ b/doc/src/examples/webkit-bridge-imageanalyzer.qdoc
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** 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 Free Documentation License
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of this
+** file.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \example webkit/imageanalyzer
+ \startpage {index.html}{Qt Reference Documentation}
+ \title The Webkit Bridge Tutorial - Hybrid Client Application
+
+ In this example, we will show how to write a hybrid application using
+\l{The QtWebKit Bridge}{QtWebKit Bridge}, which distinguishes itself from a
+thin client in that it performs heavy calculations on the client side in C++,
+like a native application, but presents nothing more than a \c QWebView for its
+user interface, displaying web content written in HTML/JavaScript. The
+application uses QtConcurrent to distribute its work across as many CPU cores as
+are available from the system, so it can process each image in parallel.
+
+For the full reference documentation of QtWebKit hybrid development, see
+\l{qtwebkit-bridge.html}{The QtWebKit Bridge}.
+
+Initially, you will see a user interface with an empty list of images. Clicking
+on some of the images in the lower pane below adds them to the list view above,
+as shown in the screenshot below.
+
+ \image webkit-imageanalyzer-screenshot.png
+
+Now, we can click on \bold Analyze, and each image is analyzed using some
+computationally intensive C++ function, in parallel and on different cores.
+Progress is shown while the analysis is proceeding.
+
+ \image webkit-imageanalyzer-progress.png
+
+and in the end, we will see something like this, where the average RGB values of
+each image are shown.
+
+ \image webkit-imageanalyzer-complete.png
+
+The MainWindow is defined in C++, and creates a \l QNetworkDiskCache and a
+\l QWebView, and tells the \l QWebView to load the starting page, providing us
+with a user interface for the client.
+
+ \snippet examples/webkit/imageanalyzer/mainwindow.cpp MainWindow - constructor
+
+In this example, the sample content is addressed with the \tt qrc:/index.html
+URL. \tt qrc:/ indicates that the file is stored as a Qt resource (attached to
+the executable). In a real-world application, the content and images would
+likely be retrieved from the network rather than from resources.
+
+We wish to initialize an object reference in the JavaScript web page to point
+to our \tt ImageAnalyzer before any other scripts are run. To do this, we
+connect the \l{QWebFrame::}{javaScriptWindowObjectCleared()} signal to a slot
+which does the object creation and handoff to JavaScript.
+
+ \snippet examples/webkit/imageanalyzer/mainwindow.cpp MainWindow - addJSObject
+
+The ImageAnalyzer object is created and added to a JavaScript object on the web
+page's mainFrame with \c addToJavaScriptWindowObject().
+
+ The start page is resources/index.html.
+ In one of its <div> regions, we have images, each
+ with an \c onClick() handler that calls \c addImage().
+
+ \snippet examples/webkit/imageanalyzer/resources/index.html sample images
+
+Clicking an image adds it to an images list.
+
+ \snippet examples/webkit/imageanalyzer/resources/index.html addImage
+
+The \bold {Analyze} button at the bottom of the image list is clicked when we
+want to start the analysis:
+
+ \snippet examples/webkit/imageanalyzer/resources/index.html images list
+
+When the user clicks the \bold {Analyze} button, \c analyzeImages() is called,
+another regular JavaScript method, shown below.
+Notice it assumes the \c imageAnalyzer object is already defined and initialized
+in JavaScript space, but we guaranteed that by connecting our setup slot to the
+appropriate signal, \l{QWebFrame::}{javaScriptWindowObjectCleared()}.
+
+ \snippet examples/webkit/imageanalyzer/resources/index.html analyzeImages
+
+The only methods on \c ImageAnalyzer that we can or do call from JavaScript are
+those which are exposed through \{The Meta-Object System}{Qt's MetaObject}
+system: \l{The Property System}{property} getter/setter methods,
+\c public \l {Signals & Slots}{signals and slots}, and other
+\l{Q_INVOKABLE}{Q_INVOKABLE} functions.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.h ImageAnalyzer - public interface
+\dots
+\snippet examples/webkit/imageanalyzer/imageanalyzer.h ImageAnalyzer - private members
+
+Most of the members are set up in the constructor:
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - Constructor
+
+Back on the JavaScript side, we want to connect signals from this object to
+JavaScript functions on our web page, after the web page is loaded, but before
+the images are analyzed.
+
+From \c connectSlots(), we can see how to connect signals from the imageAnalyzer
+object to regular JavaScript functions, which can also behave like slots. We use
+this to monitor and display progress from the C++ side.
+
+ \snippet examples/webkit/imageanalyzer/resources/index.html connect slots
+
+The only public slot is \c startAnalysis(), called to place
+a list of URLs into the image analyzer's QtConcurrent processing queue
+from JavaScript space.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - startAnalysis
+
+The images need to be loaded again now, which is why fetchURLs first checks the
+cache to see if we can save an extra network get.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - fetchURLs
+
+For the images that were not in the cache, \c handleReply()
+will load them into a QImage when the data is ready.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - handleReply
+
+After the images are loaded, they are queued up in preparation to be
+sent in a batch for analysis to a \l QFutureWatcher, which will distribute the
+processing across multiple threads and cores, depending on how many are available.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - queueImage
+
+The function that gets performed on each image is \c averageRGB(),
+as specified in argument 2 to the \l{QtConcurrent::mapped()} function.
+Notice it repeats the same calculations 100 times on each pixel to keep the CPU
+very busy. This is done only for the purposes of the demo so that the analysis
+takes a noticeable time to complete.
+
+\snippet examples/webkit/imageanalyzer/imageanalyzer.cpp ImageAnalyzer - averageRGB
+
+*/
+
diff --git a/doc/src/examples/webkit-framecapture.qdoc b/doc/src/examples/webkit-framecapture.qdoc
index a3d9f1b..96e70d5 100644
--- a/doc/src/examples/webkit-framecapture.qdoc
+++ b/doc/src/examples/webkit-framecapture.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/widgets-softkeys.qdoc b/doc/src/examples/widgets-softkeys.qdoc
index dde1778..1958872 100644
--- a/doc/src/examples/widgets-softkeys.qdoc
+++ b/doc/src/examples/widgets-softkeys.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/widgets-validators.qdoc b/doc/src/examples/widgets-validators.qdoc
index 78054bb..c6b3711 100644
--- a/doc/src/examples/widgets-validators.qdoc
+++ b/doc/src/examples/widgets-validators.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/wiggly.qdoc b/doc/src/examples/wiggly.qdoc
index bd02900..1b3f1ff 100644
--- a/doc/src/examples/wiggly.qdoc
+++ b/doc/src/examples/wiggly.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/windowflags.qdoc b/doc/src/examples/windowflags.qdoc
index bc4f979..cfee598 100644
--- a/doc/src/examples/windowflags.qdoc
+++ b/doc/src/examples/windowflags.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/worldtimeclockbuilder.qdoc b/doc/src/examples/worldtimeclockbuilder.qdoc
index a70cbe7..27d846f 100644
--- a/doc/src/examples/worldtimeclockbuilder.qdoc
+++ b/doc/src/examples/worldtimeclockbuilder.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/worldtimeclockplugin.qdoc b/doc/src/examples/worldtimeclockplugin.qdoc
index 0157b68..d485ec3 100644
--- a/doc/src/examples/worldtimeclockplugin.qdoc
+++ b/doc/src/examples/worldtimeclockplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/examples/xmlstreamlint.qdoc b/doc/src/examples/xmlstreamlint.qdoc
index 3e25dbe..fa05874 100644
--- a/doc/src/examples/xmlstreamlint.qdoc
+++ b/doc/src/examples/xmlstreamlint.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc
index 61620f5..8eeaeb1 100644
--- a/doc/src/external-resources.qdoc
+++ b/doc/src/external-resources.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -436,7 +436,12 @@
/*!
\externalpage https://developer.mozilla.org/en/JavaScript
- \title JavaScript
+ \title JavaScript Resources
+*/
+
+/*!
+ \externalpage https://developer.mozilla.org/en/JavaScript/Guide
+ \title JavaScript Guide
*/
/*!
diff --git a/doc/src/files-and-resources/datastreamformat.qdoc b/doc/src/files-and-resources/datastreamformat.qdoc
index 060aee6..d014f20 100644
--- a/doc/src/files-and-resources/datastreamformat.qdoc
+++ b/doc/src/files-and-resources/datastreamformat.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/files-and-resources/resources.qdoc b/doc/src/files-and-resources/resources.qdoc
index f0cb130..0376d0c 100644
--- a/doc/src/files-and-resources/resources.qdoc
+++ b/doc/src/files-and-resources/resources.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/accessible.qdoc b/doc/src/frameworks-technologies/accessible.qdoc
index cbc1558..eb14310 100644
--- a/doc/src/frameworks-technologies/accessible.qdoc
+++ b/doc/src/frameworks-technologies/accessible.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/activeqt-container.qdoc b/doc/src/frameworks-technologies/activeqt-container.qdoc
index 736bca3..4e11abd 100644
--- a/doc/src/frameworks-technologies/activeqt-container.qdoc
+++ b/doc/src/frameworks-technologies/activeqt-container.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/activeqt-server.qdoc b/doc/src/frameworks-technologies/activeqt-server.qdoc
index 924856f..0f683f7 100644
--- a/doc/src/frameworks-technologies/activeqt-server.qdoc
+++ b/doc/src/frameworks-technologies/activeqt-server.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/activeqt.qdoc b/doc/src/frameworks-technologies/activeqt.qdoc
index e3fb3a7..c49dcad 100644
--- a/doc/src/frameworks-technologies/activeqt.qdoc
+++ b/doc/src/frameworks-technologies/activeqt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/animation.qdoc b/doc/src/frameworks-technologies/animation.qdoc
index 3763cb3..f78162d 100644
--- a/doc/src/frameworks-technologies/animation.qdoc
+++ b/doc/src/frameworks-technologies/animation.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/containers.qdoc b/doc/src/frameworks-technologies/containers.qdoc
index cf5fe73..aa618d6 100644
--- a/doc/src/frameworks-technologies/containers.qdoc
+++ b/doc/src/frameworks-technologies/containers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/dbus-adaptors.qdoc b/doc/src/frameworks-technologies/dbus-adaptors.qdoc
index f193a67..3132d2d 100644
--- a/doc/src/frameworks-technologies/dbus-adaptors.qdoc
+++ b/doc/src/frameworks-technologies/dbus-adaptors.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/dbus-intro.qdoc b/doc/src/frameworks-technologies/dbus-intro.qdoc
index 9d4cd95..2f7fa12 100644
--- a/doc/src/frameworks-technologies/dbus-intro.qdoc
+++ b/doc/src/frameworks-technologies/dbus-intro.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/desktop-integration.qdoc b/doc/src/frameworks-technologies/desktop-integration.qdoc
index 6c117e8..d48f8c7 100644
--- a/doc/src/frameworks-technologies/desktop-integration.qdoc
+++ b/doc/src/frameworks-technologies/desktop-integration.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/dnd.qdoc b/doc/src/frameworks-technologies/dnd.qdoc
index ebfa39e..356bf9b 100644
--- a/doc/src/frameworks-technologies/dnd.qdoc
+++ b/doc/src/frameworks-technologies/dnd.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -44,7 +44,7 @@
outlines the approach used to enable it in custom widgets. Drag
and drop operations are also supported by Qt's item views and by
the graphics view framework. More information is available in
- \l{Using drag & drop with item views} and \l{Graphics View
+ \l{Using drag and drop with item views} and \l{Graphics View
Framework}.
\section1 Drag and Drop Classes
diff --git a/doc/src/frameworks-technologies/eventsandfilters.qdoc b/doc/src/frameworks-technologies/eventsandfilters.qdoc
index fb14a3b..fb51976 100644
--- a/doc/src/frameworks-technologies/eventsandfilters.qdoc
+++ b/doc/src/frameworks-technologies/eventsandfilters.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/gestures.qdoc b/doc/src/frameworks-technologies/gestures.qdoc
index f7c8312..06d3431 100644
--- a/doc/src/frameworks-technologies/gestures.qdoc
+++ b/doc/src/frameworks-technologies/gestures.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/graphicsview.qdoc b/doc/src/frameworks-technologies/graphicsview.qdoc
index 20bb750..21d3f42 100644
--- a/doc/src/frameworks-technologies/graphicsview.qdoc
+++ b/doc/src/frameworks-technologies/graphicsview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/implicit-sharing.qdoc b/doc/src/frameworks-technologies/implicit-sharing.qdoc
index d62824e..fcfcf7f 100644
--- a/doc/src/frameworks-technologies/implicit-sharing.qdoc
+++ b/doc/src/frameworks-technologies/implicit-sharing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/ipc.qdoc b/doc/src/frameworks-technologies/ipc.qdoc
index 775243a..e73f649 100644
--- a/doc/src/frameworks-technologies/ipc.qdoc
+++ b/doc/src/frameworks-technologies/ipc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/model-view-programming.qdoc b/doc/src/frameworks-technologies/model-view-programming.qdoc
index 7a1fb40..cc98432 100644
--- a/doc/src/frameworks-technologies/model-view-programming.qdoc
+++ b/doc/src/frameworks-technologies/model-view-programming.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -32,7 +32,7 @@
/*!
\page model-view-programming.html
- \ingroup qt-basic-concepts
+ \ingroup qt-basic-concepts
\title Model/View Programming
\brief A guide to Qt's extensible model/view architecture.
@@ -1635,7 +1635,7 @@
contain the text given in the search string. This pattern can also be
used in the list and table widgets.
- \section1 Using drag & drop with item views
+ \section1 Using Drag and Drop with Item Views
Qt's drag and drop infrastructure is fully supported by the model/view framework.
Items in lists, tables, and trees can be dragged within the views, and data can be
@@ -1715,7 +1715,7 @@
of QAbstractItemModel::removeRows(), either directly or by inheriting the
implementation from its base class.
- \section3 Enabling drag & drop for items
+ \section3 Enabling drag and drop for items
Models indicate to views which items can be dragged, and which will accept drops,
by reimplementing the QAbstractItemModel::flags() function to provide suitable
@@ -2154,7 +2154,7 @@
models to supply some unique identifier to this function to ensure that
the model index can be re-associated with its corresponding item later on.
- \section2 Drag & drop support and MIME type handling
+ \section2 Drag and drop support and MIME type handling
The model/view classes support drag and drop operations, providing default behavior
that is sufficient for many applications. However, it is also possible to customize
@@ -2283,7 +2283,7 @@
\endlist
For more information about drag and drop with item views, refer to
- \l{Using drag & drop with item views}.
+ \l{Using drag and drop with item views}.
\section3 Convenience views
@@ -2294,7 +2294,7 @@
the existing contents with the data being transferred, the underlying model
will set the data of the target items rather than insert new rows and columns
into the model. For more information on drag and drop in convenience views,
- you can see \l{Using drag & drop with item views}.
+ you can see \l{Using drag and drop with item views}.
\section2 Performance optimization for large amounts of data
diff --git a/doc/src/frameworks-technologies/phonon.qdoc b/doc/src/frameworks-technologies/phonon.qdoc
index 5119638..9620136 100644
--- a/doc/src/frameworks-technologies/phonon.qdoc
+++ b/doc/src/frameworks-technologies/phonon.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -524,24 +524,5 @@
the QtOpenGL shared library. If this is not what you want, it is
possible to configure Qt without OpenGL support. In that case, you
need to run \c configure with the \c -no-opengl option.
-
- \section1 Work in Progress
-
- Phonon and its Qt backends, though fully functional for
- multimedia playback, are still under development. Functionality to
- come is the possibility to capture media and more processors for
- both music and video files.
-
- Another important consideration is to implement support for
- storing media to files; i.e., not playing back media directly.
-
- We also hope in the future to be able to support direct
- manipulation of media streams. This will give the programmer more
- freedom to manipulate streams than just through processors.
-
- Currently, the multimedia framework supports one input source. It will be
- possible to include several sources. This is useful in, for example, audio
- mixer applications where several audio sources can be sent, processed and
- output as a single audio stream.
*/
diff --git a/doc/src/frameworks-technologies/plugins-howto.qdoc b/doc/src/frameworks-technologies/plugins-howto.qdoc
index 5103bdc..8e4cbe4 100644
--- a/doc/src/frameworks-technologies/plugins-howto.qdoc
+++ b/doc/src/frameworks-technologies/plugins-howto.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/qthelp.qdoc b/doc/src/frameworks-technologies/qthelp.qdoc
index 2342e40..14874ef 100644
--- a/doc/src/frameworks-technologies/qthelp.qdoc
+++ b/doc/src/frameworks-technologies/qthelp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/qundo.qdoc b/doc/src/frameworks-technologies/qundo.qdoc
index bc050d8..08ed0e4 100644
--- a/doc/src/frameworks-technologies/qundo.qdoc
+++ b/doc/src/frameworks-technologies/qundo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/richtext.qdoc b/doc/src/frameworks-technologies/richtext.qdoc
index a9ee0b2..f065531 100644
--- a/doc/src/frameworks-technologies/richtext.qdoc
+++ b/doc/src/frameworks-technologies/richtext.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/statemachine.qdoc b/doc/src/frameworks-technologies/statemachine.qdoc
index 714483a..a0cd005 100644
--- a/doc/src/frameworks-technologies/statemachine.qdoc
+++ b/doc/src/frameworks-technologies/statemachine.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/templates.qdoc b/doc/src/frameworks-technologies/templates.qdoc
index 97b5a87..346f043 100644
--- a/doc/src/frameworks-technologies/templates.qdoc
+++ b/doc/src/frameworks-technologies/templates.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/frameworks-technologies/threads.qdoc b/doc/src/frameworks-technologies/threads.qdoc
index 405997a..3ef617c 100644
--- a/doc/src/frameworks-technologies/threads.qdoc
+++ b/doc/src/frameworks-technologies/threads.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -324,10 +324,6 @@
post events to objects that "live" in other threads. This is
possible because each thread is allowed to have its own event
loop.
-
- Topics:
-
- \tableofcontents
\section1 QObject Reentrancy
diff --git a/doc/src/frameworks-technologies/unicode.qdoc b/doc/src/frameworks-technologies/unicode.qdoc
index 2ad8947..061b61e 100644
--- a/doc/src/frameworks-technologies/unicode.qdoc
+++ b/doc/src/frameworks-technologies/unicode.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/demos.qdoc b/doc/src/getting-started/demos.qdoc
index f52fc92..2fe39a2 100644
--- a/doc/src/getting-started/demos.qdoc
+++ b/doc/src/getting-started/demos.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc
index 596cc01..5230b7e 100644
--- a/doc/src/getting-started/examples.qdoc
+++ b/doc/src/getting-started/examples.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -32,11 +32,11 @@
Qt includes a set of examples that cover nearly every aspect of Qt
development. They aren't meant to be impressive when you run them,
but in each case the source code has been carefully written to
- illustrate one or more best Qt programming practices.
+ illustrate one or more best Qt programming practices.
You can run the examples from the \l{Examples and Demos Launcher}
application (except see \l{QML Examples and Demos} {QML Examples}
- for special instructions for running thos examples).
+ for special instructions for running those examples).
The examples are listed below by functional area. Each example
listed in a particular functional area is meant to illustrate how
@@ -53,7 +53,8 @@
deliberately show off Qt's features. You might want to look at
these as well.
- These examples are provided under the terms of the \l{BSD License}.
+ These examples are provided under the terms of the
+ \l{New and Modified BSD Licenses}{Modified BSD License}.
\section1 Examples by Functional Area
@@ -766,6 +767,9 @@
\row \o \l{webkit/googlechat}{Google Chat}
\o A real-world example that shows how an existing Web-based service can be accessed
using QtWebKit.
+ \row \o \l{webkit/imageanalyzer}{Image Analyzer}\raisedaster
+ \o A \l{The QtWebKit Bridge}{QtWebKit bridge} application which contains a
+ web interface and client-side processing.
\row \o \l{webkit/previewer}{Previewer}\raisedaster
\o Shows how to make a simple Web page previewer by using Qt's text input widgets
together with a QWebView widget.
@@ -778,7 +782,7 @@
*/
/*!
- \page examples-helpsystem.html
+ \page examples-helpsystem.html
\ingroup all-examples
\title Help System Examples
\brief Adding interactive help to your Qt application.
diff --git a/doc/src/getting-started/gettingstarted.qdoc b/doc/src/getting-started/gettingstarted.qdoc
index e58305a..162dba1 100644
--- a/doc/src/getting-started/gettingstarted.qdoc
+++ b/doc/src/getting-started/gettingstarted.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc
index a6159c3..54fa098 100644
--- a/doc/src/getting-started/gettingstartedqml.qdoc
+++ b/doc/src/getting-started/gettingstartedqml.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -35,6 +35,16 @@
After reading this guide, you should be ready to develop your own applications
using QML and Qt C++.
+ \section1 Installation
+
+ First, we would need to install the latest version of Qt that includes \l{Qt
+ Quick}, which is Qt 4.7. The \l{Installation} {installation} guide contains
+ installation instructions and requirements for different platforms.
+
+ Qt Quick includes a declarative language called
+ \l{Introduction to the QML language}{QML}, the \l{QtDeclarative Module}, and
+ \l{QML Viewer}.
+
\section1 QML to Build User Interfaces
The application we are building is a simple text editor that will load, save,
@@ -48,7 +58,12 @@
\image qml-texteditor5_editmenu.png
- To run the QML example code, merely provide the included \l{QML Viewer}{qmlviewer}
+ The final source code is in the \c{examples/tutorials/gettingStarted/gsQml}
+ directory. You may need to compile the C++ plugin in the
+ \c{examples/tutorials/gettingStarted/gsQml/} first. This will put the
+ C++ plugin in a directory where the QML files may find it.
+
+ To launch the text editor, merely provide the included \l{QML Viewer}{qmlviewer}
tool with the QML file as the argument. The C++ portion of this tutorial assumes
that the reader possesses basic knowledge of Qt's compilation procedures.
@@ -68,10 +83,10 @@
We start our text editor by building a button. Functionally, a button has a mouse
sensitive area and a label. Buttons perform actions when a user presses the button.
- In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The
- \c Rectangle element has properties to control the element's appearance and location.
+ In QML, the basic visual item is the \l {Rectangle}{Rectangle} element. The
+ \c Rectangle element has properties to control the element's appearance and location.
- \snippet examples/tutorials/gettingStarted/gsQml/part0/Button.qml document
+ \snippet examples/tutorials/gettingStarted/gsQml/parts/part0/Button.qml document
First, the \c { import QtQuick 1.0 } allows the qmlviewer tool to import the QML elements
we will later use. This line must exist for every QML file. Notice that the version
@@ -88,7 +103,7 @@
\c text property. The label is contained within the Rectangle and in order to center
it in the middle, we assign the \c anchors of the Text element to its parent, which
is called \c simplebutton. Anchors may bind to other items' anchors, allowing layout
- assignments simpler.
+ assignments simpler.
We shall save this code as \c SimpleButton.qml. Running qmlviewer with the file as the
argument will display the grey rectangle with a text label.
@@ -104,7 +119,7 @@
id:simplebutton
...
- MouseArea{
+ MouseArea{
id: buttonMouseArea
anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors
@@ -126,7 +141,7 @@
whenever the acceptable mouse button is clicked, the left click being the default. We
can bind actions to the onClicked handler. In our example, \c console.log() outputs text
whenever the mouse area is clicked. The function \c console.log() is a useful tool for
- debugging purposes and for outputting text.
+ debugging purposes and for outputting text.
The code in \c SimpleButton.qml is sufficient to display a button on the screen and
output text whenever it is clicked with a mouse.
@@ -136,7 +151,7 @@
id:Button
...
- property color buttonColor: "lightblue"
+ property color buttonColor: "lightblue"
property color onHoverColor: "gold"
property color borderColor: "white"
@@ -145,8 +160,8 @@
console.log(buttonLabel.text + " clicked" )
}
- MouseArea{
- onClicked: buttonClick()
+ MouseArea{
+ onClicked: buttonClick()
hoverEnabled: true
onEntered: parent.border.color = onHoverColor
onExited: parent.border.color = borderColor
@@ -210,12 +225,12 @@
\code
import QtQuick 1.0 \\import the main Qt QML module
- import "folderName" \\import the contents of the folder
+ import "folderName" \\import the contents of the folder
import "script.js" as Script \\import a Javascript file and name it as Script
\endcode
The syntax shown above shows how to use the \c import keyword. This is required to
- use JavaScript files, or QML files that are not within the same directory. Since
+ use JavaScript files, or QML files that are not within the same directory. Since
\c Button.qml is in the same directory as \c FileMenu.qml, we do not need to import
the \c Button.qml file to use it. We can directly create a \c Button element by declaring
\c Button{}, similar to a \c Rectangle{} declaration.
@@ -242,7 +257,7 @@
label: "Exit"
buttonColor: "darkgrey"
- onButtonClick: Qt.quit()
+ onButtonClick: Qt.quit()
}
}
\endcode
@@ -266,7 +281,7 @@
The declaration of the edit menu is very similar at this stage. The menu has
buttons that have the labels: \c Copy, \c Paste, and \c {Select All}.
- \image qml-texteditor1_editmenu.png
+ \image qml-texteditor1_editmenu.png
Armed with our knowledge of importing and customizing previously made
components, we may now combine these menu pages to create a menu bar,
@@ -333,7 +348,7 @@
//control the movement of the menu switching
snapMode: ListView.SnapOneItem
orientation: ListView.Horizontal
- boundsBehavior: Flickable.StopAtBounds
+ boundsBehavior: Flickable.StopAtBounds
flickDeceleration: 5000
highlightFollowsCurrentItem: true
highlightMoveDuration:240
@@ -346,7 +361,7 @@
code above sets \c Flickable properties to create the desired flicking movement
to our view. In particular,the property \c highlightMoveDuration changes the
duration of the flick transition. A higher \c highlightMoveDuration value
- results in slower menu switching.
+ results in slower menu switching.
The \c ListView maintains the model items through an \c index and each visual
item in the model is accessible through the \c index, in the order of the
@@ -380,7 +395,7 @@
id: editButton
label: "Edit"
...
- onButtonClick: menuListView.currentIndex = 1
+ onButtonClick: menuListView.currentIndex = 1
}
}
}
@@ -389,7 +404,7 @@
The menu bar we just created can be flicked to access the menus or by clicking
on the menu names at the top. Switching menu screens feel intuitive and responsive.
- \image qml-texteditor2_menubar.png
+ \image qml-texteditor2_menubar.png
\section1 Building a Text Editor
@@ -402,7 +417,7 @@
\code
TextEdit{
- id: textEditor
+ id: textEditor
anchors.fill:parent
width:parent.width; height:parent.height
color:"midnightblue"
@@ -475,14 +490,14 @@
that already have defined behaviors. Using this approach, application layouts
and UI components can be created easily.
- \image qml-texteditor3_texteditor.png
+ \image qml-texteditor3_texteditor.png
\section1 Decorating the Text Editor
\section2 Implementing a Drawer Interface
Our text editor looks simple and we need to decorate it. Using QML, we can declare
transitions and animate our text editor. Our menu bar is occupying one-third of the
- screen and it would be nice to have it only appear when we want it.
+ screen and it would be nice to have it only appear when we want it.
We can add a drawer interface, that will contract or expand the menu bar when clicked.
In our implementation, we have a thin rectangle that responds to mouse clicks. The
@@ -537,7 +552,7 @@
the item's \c transitions property. Our text editor has a state transition whenever
the state changes to either \c DRAWER_OPEN or \c DRAWER_CLOSED. Importantly, the
transition needs a \c from and a \c to state but for our transitions, we can use
- the wild card \c * symbol to denote that the transition applies to all state changes.
+ the wild card \c * symbol to denote that the transition applies to all state changes.
During transitions, we can assign animations to the property changes. Our
\c menuBar switches position from \c {y:0} to \c {y:-partition} and we can animate
@@ -561,7 +576,7 @@
Behavior{
NumberAnimation{property: "rotation";easing.type: Easing.OutExpo }
- }
+ }
\endcode
Going back to our components with knowledge of states and animations, we can improve
@@ -607,9 +622,9 @@
We are finished building the user interface of a very simple text editor.
Going forward, the user interface is complete, and we can implement the
application logic using regular Qt and C++. QML works nicely as a prototyping
- tool, separating the application logic away from the UI design.
+ tool, separating the application logic away from the UI design.
- \image qml-texteditor4_texteditor.png
+ \image qml-texteditor4_texteditor.png
\section2 Extending QML using Qt C++
@@ -622,7 +637,7 @@
we shall implement the load and save functions in C++ and export it as a plugin.
This way, we only need to load the QML file directly instead of running an executable.
- \section3 Exposing C++ Classes to QML
+ \section3 Exposing C++ Classes to QML
We will be implementing file loading and saving using Qt and C++. C++ classes
and functions can be used in QML by registering them. The class also needs to be
@@ -645,7 +660,7 @@
directory.
\code
- In cppPlugins.pro:
+ In filedialog.pro:
TEMPLATE = lib
CONFIG += qt plugin
@@ -762,7 +777,7 @@
Similarly, we have the other properties declared according to their uses. The
\c filesCount property indicates the number of files in a directory. The filename
property is set to the currently selected file's name and the loaded/saved file
- content is stored in \c fileContent property.
+ content is stored in \c fileContent property.
\code
Q_PROPERTY(QDeclarativeListProperty<File> files READ files CONSTANT )
@@ -811,10 +826,10 @@
Regular C++ functions are also accessible from QML. The file loading and saving
functions are implemented in C++ and declared using the
\l {Q_INVOKABLE}{Q_INVOKABLE} macro. Alternatively, we can declare the functions
- as a \c slot and the functions will be accessible from QML.
+ as a \c slot and the functions will be accessible from QML.
\code
- In Directory.h:
+ In Directory.h:
Q_INVOKABLE void saveFile();
Q_INVOKABLE void loadFile();
@@ -848,9 +863,9 @@
The constructor passes pointers to functions that will append the list, count
the list, retrieve the item using an index, and empty the list. Only the append
function is mandatory. Note that the function pointers must match the definition
- of \l {QDeclarativeListProperty::AppendFunction}{AppendFunction},
- \l {QDeclarativeListProperty::CountFunction}{CountFunction},
- \l {QDeclarativeListProperty::AtFunction}{AtFunction}, or
+ of \l {QDeclarativeListProperty::AppendFunction}{AppendFunction},
+ \l {QDeclarativeListProperty::CountFunction}{CountFunction},
+ \l {QDeclarativeListProperty::AtFunction}{AtFunction}, or
\l {QDeclarativeListProperty::ClearFunction}{ClearFunction}.
\code
@@ -871,7 +886,7 @@
text files is in the application directory, get the file's name and content as a
string, and be notified whenever there are changes in the directory contents.
- To build the plugin, run \c qmake on the \c cppPlugins.pro project file, then run
+ To build the plugin, run \c qmake on the \c filedialog.pro project file, then run
\c make to build and transfer the plugin to the \c plugins directory.
@@ -883,7 +898,7 @@
plugins and other resources.
\code
- In qmldir:
+ In qmldir:
Button ./Button.qml
FileDialog ./FileDialog.qml
@@ -895,7 +910,7 @@
\endcode
The plugin we just created is called \c FileDialog, as indicated by the
- \c TARGET field in the project file. The compiled plugin is in the \c plugins directory.
+ \c TARGET field in the project file. The compiled plugin is in the \c plugins directory.
\section3 Integrating a File Dialog into the File Menu
@@ -910,7 +925,7 @@
\c FileDialog element that the directory refreshed its contents. This notification
is performed in the signal handler, \c onDirectoryChanged.
- \code
+ \code
In FileMenu.qml:
Directory{
@@ -922,7 +937,7 @@
Keeping with the simplicity of our application, the file dialog will always be
visible and will not display invalid text files, which do not have a \c .txt
- extension to their filenames.
+ extension to their filenames.
\code
In FileDialog.qml:
@@ -981,10 +996,10 @@
will transfer the text from the \c TextEdit onto the directory's \c fileContent
property, then copy its file name from the editable text input. Finally, the button
calls the \c saveFile() function, saving the file. The \c loadButton has a similar
- execution. Also, the \c New action will empty the contents of the \c TextEdit.
+ execution. Also, the \c New action will empty the contents of the \c TextEdit.
Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy,
- paste, and select all the text in the text editor.
+ paste, and select all the text in the text editor.
\image qml-texteditor5_filemenu.png
@@ -995,4 +1010,14 @@
The application can function as a simple text editor, able to accept text
and save the text into a file. The text editor can also load from a file and
perform text manipulation.
+
+ \section1 Running the Text Editor
+
+ We need to compile the file dialog C++ plugin before the text editor can run.
+ To compile, enter the \c gsQml directory, then run \c qmake and compile
+ using \c make or \c nmake, depending on your platform. To run, launch
+ qmlviewer and open the \c texteditor.qml file.
+
+ The source code is in the \c{examples/tutorials/gettingStarted/gsQml}
+ directory.
*/
diff --git a/doc/src/getting-started/gettingstartedqt.qdoc b/doc/src/getting-started/gettingstartedqt.qdoc
index 25d0ccd..945d7c3 100644
--- a/doc/src/getting-started/gettingstartedqt.qdoc
+++ b/doc/src/getting-started/gettingstartedqt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/how-to-learn-qt.qdoc b/doc/src/getting-started/how-to-learn-qt.qdoc
index 8ca1735..e9f462c 100644
--- a/doc/src/getting-started/how-to-learn-qt.qdoc
+++ b/doc/src/getting-started/how-to-learn-qt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc
index bc0128c..a68310c 100644
--- a/doc/src/getting-started/installation.qdoc
+++ b/doc/src/getting-started/installation.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -40,7 +40,7 @@ for your platform from the following list.
*/
/*! \page install-x11.html
-\title Installing Qt on X11 Platforms
+\title Installing Qt for X11 Platforms
\ingroup installation
\brief How to install Qt on platforms with X11.
\previouspage Installation
@@ -151,7 +151,7 @@ for your platform from the following list.
/*!
\page install-win.html
-\title Installing Qt on Windows
+\title Installing Qt for Windows
\ingroup installation
\brief How to install Qt on Windows.
\previouspage Installation
@@ -269,7 +269,7 @@ for your platform from the following list.
*/
/*! \page install-mac.html
-\title Installing Qt on Mac OS X
+\title Installing Qt for Mac OS X
\ingroup installation
\brief How to install Qt on Mac OS X.
\previouspage Installation
@@ -392,10 +392,10 @@ must be run as root.
*/
/*! \page install-wince.html
-\title Installing Qt on Windows CE
+\title Installing Qt for Windows CE
\ingroup installation
\ingroup qtce
-\brief How to install Qt on Windows CE.
+\brief How to install Qt for Windows CE.
\previouspage Installation
\tableofcontents
@@ -492,9 +492,9 @@ in the \l{Qt for Windows CE Requirements} document.
*/
/*! \page install-Symbian-installer.html
-\title Installing Qt on the Symbian platform from a Binary Package
+\title Installing Qt for the Symbian platform from a Binary Package
\ingroup qtsymbian
-\brief How to install Qt on the Symbian platform from a binary package.
+\brief How to install Qt for the Symbian platform from a binary package.
\previouspage Installation
\tableofcontents
@@ -551,10 +551,10 @@ Symbian platform,
*/
/*! \page install-Symbian.html
-\title Installing Qt on the Symbian platform
+\title Installing Qt for the Symbian platform
\ingroup installation
\ingroup qtsymbian
-\brief How to install Qt on the Symbian platform.
+\brief How to install Qt for the Symbian platform.
\previouspage Installation
\tableofcontents
@@ -563,7 +563,7 @@ in the \l{Qt for the Symbian platform Requirements} document.
This document describes how to install and configure Qt for
the Symbian platform from scratch. If you are using pre-built binaries, follow
-the instructions given in the \l{Installing Qt on the Symbian platform from a
+the instructions given in the \l{Installing Qt for the Symbian platform from a
Binary Package} document.
\section1 Step 1: Set Up the Development Environment
@@ -685,10 +685,10 @@ Binary Package} document.
*/
/*! \page install-Symbian-linux.html
-\title Installing Qt on the Symbian platform using Linux (experimental)
+\title Installing Qt for the Symbian platform using Linux (experimental)
\ingroup installation
\ingroup qtsymbian
-\brief How to install Qt on the Symbian platform using Linux.
+\brief How to install Qt for the Symbian platform using Linux.
\previouspage Installation
\tableofcontents
@@ -697,187 +697,224 @@ the Symbian platform from scratch, using Linux as the build host.
Qt for Symbian binaries can be downloaded directly so development of
applications using Qt for Symbian can start right away.
-\section1 Step 1: Setup the development environment
+\section1 Step 1: Setup the Development Environment
+
+Qt for the Symbian platform has some requirements on the development
+platform. The Symbian SDK for Linux as well as a cross compiler for the ARM
+processor used on Symbian devices should be present on the development
+machine.
+
+See \l{http://qt.gitorious.org/qt/pages/QtCreatorSymbianLinux} for more details.
+
- Qt for the Symbian platform has some requirements on the development
- platform. The Symbian SDK for Linux as well as a cross compiler for the ARM
- processor used on Symbian devices should be present on the development
- machine.
-
- See \l{http://qt.gitorious.org/qt/pages/QtCreatorSymbianLinux} for more details.
\section1 Step 2: Unpack the Archive
- Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
- directory you want Qt installed, e.g. \c{/home/user/qt/%VERSION%}.
+Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
+directory you want Qt installed, e.g. \c{/home/user/qt/%VERSION%}.
+
\section1 Step 3: Set the Environment Variables
- In order to build and use Qt, the \c PATH environment variable needs
- to be extended to fine Qt tools and also to find the Symbian platform tools:
+In order to build and use Qt, the \c PATH environment variable needs
+to be extended to fine Qt tools and also to find the Symbian platform tools:
- First you need to set the \c EPOCROOT environment variable to point to the
- location of your S60 SDK:
+First you need to set the \c EPOCROOT environment variable to point to the
+location of your S60 SDK:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 36
- Then you can update the PATH variable;
+Then you can update the PATH variable;
+
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 37
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 37
\section1 Step 4: Configure Qt
- To configure Qt for the Symbian platform, do:
+To configure Qt for the Symbian platform, do:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 38
- to build the libraries using RVCT or
+
+to build the libraries using RVCT or
\snippet doc/src/snippets/code/doc_src_installation.qdoc 39
- to build the libraries using GCCE.
+
+to build the libraries using GCCE.
+
\section1 Step 5: Build Qt
- To build Qt for the device, type:
+To build Qt for the device, type:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 40
- Congratulations, Qt is now ready to use.
+Congratulations, Qt is now ready to use.
-\section1 Step 6: Building Qt packages for the Device
- To run any application or demo on a real device, you need to install it
- on the device. To do this you first have to create a a package for the
- device, containing the libraries:
+\section1 Step 6: Building Qt Packages for the Device
- \bold{Building a Qt package without a certificate}
+To run any application or demo on a real device, you need to install it
+on the device. To do this you first have to create a a package for the
+device, containing the libraries:
- If you have no certificate, build a self signed Qt:
+\bold{Building a Qt package without a certificate}
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 41
+If you have no certificate, build a self signed Qt:
- The Qt libraries are built with "All -Tcb" capability, so that
- they can support all types of applications. However, these
- capabilities are automatically lowered if you make a self-signed
- package.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 41
- \bold{Building a Qt package with a Symbian developer certificate}
+The Qt libraries are built with "All -Tcb" capability, so that
+they can support all types of applications. However, these
+capabilities are automatically lowered if you make a self-signed
+package.
- If you have a symbian-signed developer certificate, specify the
- capabilities you can sign for, for example:
+\bold{Building a Qt package with a Symbian developer certificate}
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 42
-
- \section2 Installing Qt packages to the device.
+If you have a Symbian-signed developer certificate, specify the
+capabilities you can sign for, for example:
- It is possible to install packages to a phone in Linux by putting
- the package on the phone memory card and then installing manually
- from the phone menu. However, this is tedious and will not work
- on phones without a memory card, so the method recommended by Qt is
- to use the App TRK tool.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 42
- \section3 Obtaining the App TRK package.
+\section2 Installing Qt Packages to the Device.
- Download the package from the following location.
+It is possible to install packages to a phone in Linux by putting
+the package on the phone memory card and then installing manually
+from the phone menu. However, this is tedious and will not work
+on phones without a memory card, so the method recommended by Qt is
+to use the App TRK tool.
- \list
- \o \l{http://tools.ext.nokia.com/trk/}{Application TRK}.
- Choose the correct installation package based on the
- S60 version of your device
- (\c{S60_<S60-version>_app_trk_<TRK-version>.sisx}).
- \endlist
+\section3 Obtaining the App TRK package.
- This package currently has to be installed by putting the
- package on the memory card and installing from the phone
- menu, or using a Windows PC for doing the install. However,
- the installation only has to be done once.
+Download the package from the following location.
- \section3 Configuring App TRK on the phone.
+\list
+\o \l{http://tools.ext.nokia.com/trk/}{Application TRK}.
+ Choose the correct installation package based on the
+ S60 version of your device
+ (\c{S60_<S60-version>_app_trk_<TRK-version>.sisx}).
+\endlist
- When App TRK is installed, connect the phone to the PC using
- the USB cable. Select "PCSuite" as connection type. Then run
- App TRK on the phone, and make sure that the connection type is
- USB. This can be changed under
- the \c Settings menu entry. If necessary, choose \c Connect
- from the menu.
+This package currently has to be installed by putting the
+package on the memory card and installing from the phone
+menu, or using a Windows PC for doing the install. However,
+the installation only has to be done once.
- \section3 Configuring the USB serial driver on the Linux system.
+\section3 Configuring App TRK on the Phone
- On Linux, phone should appear as the \c /dev/ttyUSB1 device,
- however if you are running an old kernel, you may need to
- force the USB module to be loaded correctly before the device
- will appear:
+When App TRK is installed, connect the phone to the PC using
+the USB cable. Select "PCSuite" as connection type. Then run
+App TRK on the phone, and make sure that the connection type is
+USB. This can be changed under the \c Settings menu entry.
+If necessary, choose \c Connect from the menu.
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 43
+\section3 Configuring the USB Serial Driver on the Linux System
- Note the identifier on the line where your Symbian device
- appears. Then execute the following, using the first and
- second part of the identifier in place of \c XXX,
- respectively.
+On Linux, phone should appear as the \c /dev/ttyUSB1 device,
+however if you are running an old kernel, you may need to
+force the USB module to be loaded correctly before the device
+will appear:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 44
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 43
- The \c rmmod step may fail if the module is not already
- loaded, but that is harmless.
+Note the identifier on the line where your Symbian device
+appears. Then execute the following, using the first and
+second part of the identifier in place of \c XXX,
+respectively.
- \section3 Building the \c runonphone tool.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 44
- Note that building the \c runonphone tool requires a separate
- installation of Qt for Linux. If there is a version of Qt
- installed by your distribution's package mechanism, that that
- should do fine. Some distributions separate the libraries from
- the development setup which includes qmake. Make sure you have
- both installed.
+The \c rmmod step may fail if the module is not already
+loaded, but that is harmless.
- First make sure that the \c qmake you use is taken from the
- Linux installation of Qt. The easiest way to make sure of this
- is to open a new shell and run the following command:
+\section3 Building the runonphone Tool.
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 45
+Note that building the \c runonphone tool requires a separate
+installation of Qt for Linux. If there is a version of Qt
+installed by your distribution's package mechanism, that that
+should do fine. Some distributions separate the libraries from
+the development setup which includes \c qmake. Make sure you
+have both installed.
- \c qmake will tell you where it is installed.
+You will also need the \l{libusb} libraries and header files
+installed. Usually, installing a development package such as
+\c{libusb-dev} will ensure that you have all the necessary
+dependencies installed.
- Copy the \c{%QTDIR%/tools/runonphone} folder to a place outside
- of the Qt tree. Then go to the folder in a shell and build it:
+First, make sure that the \c qmake you use is taken from the
+Linux installation of Qt. The easiest way to make sure of this
+is to open a new shell and run the following command:
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 46
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 45
- Copy the resulting executable to a folder which is in your
- \c PATH environment variable.
+\c qmake will tell you where it is installed.
- \section3 Installing the built package onto the phone.
+Copy the \c{%QTDIR%/tools/runonphone} folder to a place outside
+of the Qt tree. Then go to the folder in a shell and build it:
- Return to the root of the Qt tree configured for Symbian. Then
- install the Qt libraries by running the following:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 46
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 47
+Copy the resulting executable to a folder which is in your
+\c PATH environment variable.
- \note If the installation fails, please make sure that there is
- no previously installed version of Qt on the phone.
+\section3 Installing the Built Package onto the Phone
- Qt requires some dependent packages to be installed on the device,
- they are shipped in the Symbian SDK and can be installed using the
- runonphone tool as well.
- The packages can be found in the EPOCROOT at the following locations;
+\note Before starting, please make sure that there is no previously
+installed version of Qt on the phone.
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 50
+Return to the root of the Qt tree configured for Symbian. Then
+install the Qt libraries by running the following:
-\section1 Running Qt demos
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 47
- We've included a subset of the Qt demos in this package for you
- to try out. An excellent starting point is the "fluidlauncher"
- demo.
+You may need to supply the path of the serial device file using
+the \c{-p} option:
- Install and run the demo by using the following commands:
+\snippet doc/src/snippets/code/doc_src_installation.qdoc runonphone with device file path
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 48
+If the installation fails, please make sure that there is
+no previously installed version of Qt on the phone.
- The same command can be used for other applications:
+Qt requires some dependent packages to be installed on the device,
+they are shipped in the Symbian SDK and can be installed using the
+runonphone tool as well.
+The packages can be found in the EPOCROOT at the following locations;
- \snippet doc/src/snippets/code/doc_src_installation.qdoc 49
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 50
- For more information about building and running Qt programs on the
- Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
+It is also possible to install packages onto the device using the
+\c runonphone build rule that \c qmake automatically generates for
+each Qt project. Options can be supplied to the \c runonphone tool
+that is invoked begind the scenes:
- We hope you will enjoy using Qt.
+\snippet doc/src/snippets/code/doc_src_installation.qdoc make runonphone with options
+
+If you are running \c runonphone or invoking the \c runonphone
+build rule often, it is possible to set the \c QT_RUN_ON_PHONE_OPTIONS
+environment variable with the options you normally use:
+
+\snippet doc/src/snippets/code/doc_src_installation.qdoc make runonphone with preset environment variable
+
+This makes installation of packages onto a device easier and less
+error-prone.
+
+
+\section1 Running Qt Demos
+
+We've included a subset of the Qt demos in this package for you
+to try out. An excellent starting point is the "fluidlauncher"
+demo.
+
+Install and run the demo by using the following commands:
+
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 48
+
+The same command can be used for other applications:
+
+\snippet doc/src/snippets/code/doc_src_installation.qdoc 49
+
+For more information about building and running Qt programs on the
+Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
+
+We hope you will enjoy using Qt.
*/
/*!
diff --git a/doc/src/getting-started/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc
index 942c41d..d0044f3 100644
--- a/doc/src/getting-started/known-issues.qdoc
+++ b/doc/src/getting-started/known-issues.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/getting-started/tutorials.qdoc b/doc/src/getting-started/tutorials.qdoc
index 46a5808..2c5ebaf 100644
--- a/doc/src/getting-started/tutorials.qdoc
+++ b/doc/src/getting-started/tutorials.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/HWacceleration.qdoc b/doc/src/howtos/HWacceleration.qdoc
index 1932b6d..3eb1e74 100644
--- a/doc/src/howtos/HWacceleration.qdoc
+++ b/doc/src/howtos/HWacceleration.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/accelerators.qdoc b/doc/src/howtos/accelerators.qdoc
index 2aae38a..68d2a85 100644
--- a/doc/src/howtos/accelerators.qdoc
+++ b/doc/src/howtos/accelerators.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/appicon.qdoc b/doc/src/howtos/appicon.qdoc
index 55524d8..9b9fedc 100644
--- a/doc/src/howtos/appicon.qdoc
+++ b/doc/src/howtos/appicon.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/custom-types.qdoc b/doc/src/howtos/custom-types.qdoc
index 9910f2e..086a1d7 100644
--- a/doc/src/howtos/custom-types.qdoc
+++ b/doc/src/howtos/custom-types.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/exceptionsafety.qdoc b/doc/src/howtos/exceptionsafety.qdoc
index bf85c2a..49d99de 100644
--- a/doc/src/howtos/exceptionsafety.qdoc
+++ b/doc/src/howtos/exceptionsafety.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/guibooks.qdoc b/doc/src/howtos/guibooks.qdoc
index 515f81f..d74f08f 100644
--- a/doc/src/howtos/guibooks.qdoc
+++ b/doc/src/howtos/guibooks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/openvg.qdoc b/doc/src/howtos/openvg.qdoc
index dc7a34a..de3c1e1 100644
--- a/doc/src/howtos/openvg.qdoc
+++ b/doc/src/howtos/openvg.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/qtdesigner.qdoc b/doc/src/howtos/qtdesigner.qdoc
index 7fd008f..ab7e26b 100644
--- a/doc/src/howtos/qtdesigner.qdoc
+++ b/doc/src/howtos/qtdesigner.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/restoring-geometry.qdoc b/doc/src/howtos/restoring-geometry.qdoc
index 0f82182..c6b7e37 100644
--- a/doc/src/howtos/restoring-geometry.qdoc
+++ b/doc/src/howtos/restoring-geometry.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/session.qdoc b/doc/src/howtos/session.qdoc
index b48a591..7980cde 100644
--- a/doc/src/howtos/session.qdoc
+++ b/doc/src/howtos/session.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/sharedlibrary.qdoc b/doc/src/howtos/sharedlibrary.qdoc
index 6980a41..04364eb 100644
--- a/doc/src/howtos/sharedlibrary.qdoc
+++ b/doc/src/howtos/sharedlibrary.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/timers.qdoc b/doc/src/howtos/timers.qdoc
index 585e53b..22270c1 100644
--- a/doc/src/howtos/timers.qdoc
+++ b/doc/src/howtos/timers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/howtos/unix-signal-handlers.qdoc b/doc/src/howtos/unix-signal-handlers.qdoc
index 2893439..ca34bfb 100644
--- a/doc/src/howtos/unix-signal-handlers.qdoc
+++ b/doc/src/howtos/unix-signal-handlers.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -78,7 +78,7 @@
In your Unix signal handlers, you write a byte to the \e write end
of a socket pair and return. This will cause the corresponding
QSocketNotifier to emit its activated() signal, which will in turn
- cause the appropriate Qt slott function to run.
+ cause the appropriate Qt slot function to run.
\snippet doc/src/snippets/code/doc_src_unix-signal-handlers.qdoc 3
diff --git a/doc/src/images/webkit-imageanalyzer-complete.png b/doc/src/images/webkit-imageanalyzer-complete.png
new file mode 100644
index 0000000..47c0ee1
--- /dev/null
+++ b/doc/src/images/webkit-imageanalyzer-complete.png
Binary files differ
diff --git a/doc/src/images/webkit-imageanalyzer-progress.png b/doc/src/images/webkit-imageanalyzer-progress.png
new file mode 100644
index 0000000..5bab890
--- /dev/null
+++ b/doc/src/images/webkit-imageanalyzer-progress.png
Binary files differ
diff --git a/doc/src/images/webkit-imageanalyzer-screenshot.png b/doc/src/images/webkit-imageanalyzer-screenshot.png
new file mode 100644
index 0000000..c96371a
--- /dev/null
+++ b/doc/src/images/webkit-imageanalyzer-screenshot.png
Binary files differ
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index 77856ec..57fc18a 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -45,7 +45,7 @@
<li><a href="how-to-learn-qt.html">How to learn Qt</a></li>
<li><a href="tutorials.html">Tutorials</a></li>
<li><a href="all-examples.html">Examples</a></li>
- <li><a href="qt4-7-intro.html">Whats new in Qt 4.7</a></li>
+ <li><a href="qt4-7-intro.html">What's new in Qt 4.7</a></li>
</ul>
</div>
</div>
diff --git a/doc/src/internationalization/i18n.qdoc b/doc/src/internationalization/i18n.qdoc
index 8b6e337..c58cc91 100644
--- a/doc/src/internationalization/i18n.qdoc
+++ b/doc/src/internationalization/i18n.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/internationalization/linguist-manual.qdoc b/doc/src/internationalization/linguist-manual.qdoc
index fa992af..57b98b8 100644
--- a/doc/src/internationalization/linguist-manual.qdoc
+++ b/doc/src/internationalization/linguist-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/development/designer-manual.qdoc b/doc/src/ja_JP/development/designer-manual.qdoc
index e90e056..f71da3c 100644
--- a/doc/src/ja_JP/development/designer-manual.qdoc
+++ b/doc/src/ja_JP/development/designer-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/development/qmake-manual.qdoc b/doc/src/ja_JP/development/qmake-manual.qdoc
index 217814b..699fa93 100644
--- a/doc/src/ja_JP/development/qmake-manual.qdoc
+++ b/doc/src/ja_JP/development/qmake-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/development/qtestlib.qdoc b/doc/src/ja_JP/development/qtestlib.qdoc
index b7bb066..f0ff60d 100644
--- a/doc/src/ja_JP/development/qtestlib.qdoc
+++ b/doc/src/ja_JP/development/qtestlib.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/examples/arrowpad.qdoc b/doc/src/ja_JP/examples/arrowpad.qdoc
index bbeb7fe..3cb798b 100644
--- a/doc/src/ja_JP/examples/arrowpad.qdoc
+++ b/doc/src/ja_JP/examples/arrowpad.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/examples/hellotr.qdoc b/doc/src/ja_JP/examples/hellotr.qdoc
index 8c33584..b0ed8e8 100644
--- a/doc/src/ja_JP/examples/hellotr.qdoc
+++ b/doc/src/ja_JP/examples/hellotr.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/examples/trollprint.qdoc b/doc/src/ja_JP/examples/trollprint.qdoc
index 66d9fa3..b0397a3 100644
--- a/doc/src/ja_JP/examples/trollprint.qdoc
+++ b/doc/src/ja_JP/examples/trollprint.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/getting-started/tutorials.qdoc b/doc/src/ja_JP/getting-started/tutorials.qdoc
index cc4fb13..fc461ba 100644
--- a/doc/src/ja_JP/getting-started/tutorials.qdoc
+++ b/doc/src/ja_JP/getting-started/tutorials.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/tutorials/addressbook.qdoc b/doc/src/ja_JP/tutorials/addressbook.qdoc
index 238ecb1..522aeb2 100644
--- a/doc/src/ja_JP/tutorials/addressbook.qdoc
+++ b/doc/src/ja_JP/tutorials/addressbook.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc b/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc
index 42f6687..a5c3e18 100644
--- a/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc
+++ b/doc/src/ja_JP/tutorials/widgets-tutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc
index db6ff7c..8b3d5f2 100644
--- a/doc/src/legal/3rdparty.qdoc
+++ b/doc/src/legal/3rdparty.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/commercialeditions.qdoc b/doc/src/legal/commercialeditions.qdoc
index 8a2583d..c3a5d60 100644
--- a/doc/src/legal/commercialeditions.qdoc
+++ b/doc/src/legal/commercialeditions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/editions.qdoc b/doc/src/legal/editions.qdoc
index 60a8736..7be33b3 100644
--- a/doc/src/legal/editions.qdoc
+++ b/doc/src/legal/editions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/gpl.qdoc b/doc/src/legal/gpl.qdoc
index 504b451..31a8855 100644
--- a/doc/src/legal/gpl.qdoc
+++ b/doc/src/legal/gpl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/licenses.qdoc b/doc/src/legal/licenses.qdoc
index 12aca6b..631ff40 100644
--- a/doc/src/legal/licenses.qdoc
+++ b/doc/src/legal/licenses.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/legal/opensourceedition.qdoc b/doc/src/legal/opensourceedition.qdoc
index c02fde7..602e6d3 100644
--- a/doc/src/legal/opensourceedition.qdoc
+++ b/doc/src/legal/opensourceedition.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -46,7 +46,7 @@
that are compatible with these free software licenses.
Additionally, the \l{Qt Examples}{examples} included with Qt are provided under
- the terms of the \l{BSD License}.
+ the terms of the \l{New and Modified BSD Licenses}{Modified BSD License}.
The support of open source with the Open Source Versions of Qt has enabled large
successful software projects like KDE to thrive, with thousands of developers
diff --git a/doc/src/legal/trademarks.qdoc b/doc/src/legal/trademarks.qdoc
index f6ffae1..3bf783f 100644
--- a/doc/src/legal/trademarks.qdoc
+++ b/doc/src/legal/trademarks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -33,20 +33,20 @@
\brief Information about trademarks owned by Nokia and other organisations.
Nokia, the Nokia logo, Qt, and the Qt logo are trademarks of Nokia
-  Corporation and/or its subsidiaries in Finland and other countries.
+ Corporation and/or its subsidiaries in Finland and other countries.
\list
\o Intel, Intel Inside (logos), MMX and Pentium are \reg trademarks of
Intel Corporation in the United States, other countries, or both.
- \o Java and all Java-based trademarks are trademarks of Sun Microsystems,
- Inc. in the United States, other countries, or both.
+ \o Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+ Other names may be trademarks of their respective owners.
\o Linux is a \reg trademark of Linus Torvalds in the United States, other
countries or both.
\o Mac, Mac OS and Macintosh are \reg trademarks of Apple Computer, Inc.,
registered in the U.S. and other countries.
- \o Microsoft, Windows, Windows NT, XP, Visual Studio and the Windows logo
- are \reg trademarks of Microsoft Corporation in the United States, other
- countries, or both.
+ \o Microsoft, Windows, Windows NT, XP, Windows Vista, Visual Studio and the
+ Windows logo are \reg trademarks of Microsoft Corporation in the United
+ States, other countries, or both.
\o Motif is a registered trademark of The Open Group in the United States,
other countries, or both.
\o OpenGL is a \reg trademark of Silicon Graphics, Inc. in the United States
diff --git a/doc/src/modules.qdoc b/doc/src/modules.qdoc
index d3c33d9..f781f81 100644
--- a/doc/src/modules.qdoc
+++ b/doc/src/modules.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -665,6 +665,10 @@
\brief The QtHelp module provides classes for integrating
online documentation in applications.
+ The classes and tools supplied with Qt to enable developers to include
+ online help and documentation in their applications are described in
+ more detail in \l{The Qt Help Framework} overview document.
+
To include the definitions of the module's classes, use the
following directive:
diff --git a/doc/src/network-programming/bearermanagement.qdoc b/doc/src/network-programming/bearermanagement.qdoc
index bc016df..98de5bf 100644
--- a/doc/src/network-programming/bearermanagement.qdoc
+++ b/doc/src/network-programming/bearermanagement.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/network-programming/qtnetwork.qdoc b/doc/src/network-programming/qtnetwork.qdoc
index fce12a7..6fd58fe 100644
--- a/doc/src/network-programming/qtnetwork.qdoc
+++ b/doc/src/network-programming/qtnetwork.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/network-programming/ssl.qdoc b/doc/src/network-programming/ssl.qdoc
index 3586971..85ea7ef 100644
--- a/doc/src/network-programming/ssl.qdoc
+++ b/doc/src/network-programming/ssl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/objectmodel/metaobjects.qdoc b/doc/src/objectmodel/metaobjects.qdoc
index 0597cd6..1fd3f52 100644
--- a/doc/src/objectmodel/metaobjects.qdoc
+++ b/doc/src/objectmodel/metaobjects.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/objectmodel/object.qdoc b/doc/src/objectmodel/object.qdoc
index 5bb39d6..95492e6 100644
--- a/doc/src/objectmodel/object.qdoc
+++ b/doc/src/objectmodel/object.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/objectmodel/objecttrees.qdoc b/doc/src/objectmodel/objecttrees.qdoc
index 3a4aef7..ef20694 100644
--- a/doc/src/objectmodel/objecttrees.qdoc
+++ b/doc/src/objectmodel/objecttrees.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/objectmodel/properties.qdoc b/doc/src/objectmodel/properties.qdoc
index 2cb7c04..c960366 100644
--- a/doc/src/objectmodel/properties.qdoc
+++ b/doc/src/objectmodel/properties.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/objectmodel/signalsandslots.qdoc b/doc/src/objectmodel/signalsandslots.qdoc
index c12ca78..01f42f6 100644
--- a/doc/src/objectmodel/signalsandslots.qdoc
+++ b/doc/src/objectmodel/signalsandslots.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/overviews.qdoc b/doc/src/overviews.qdoc
index 2dd44f6..b9bd3b4 100644
--- a/doc/src/overviews.qdoc
+++ b/doc/src/overviews.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -54,7 +54,7 @@
\brief The Qt components for constructing native look & feel desktop UI's.
These pages are about Qt's traditional set of GUI components for
- building both native look ^ feel and custom UI's for the desktop
+ building both native look & feel and custom UI's for the desktop
environment. Use \l{Qt Quick} for building UI's for mobile devices.
\generatelist {related}
diff --git a/doc/src/painting-and-printing/coordsys.qdoc b/doc/src/painting-and-printing/coordsys.qdoc
index 07ced35..0bae71b 100644
--- a/doc/src/painting-and-printing/coordsys.qdoc
+++ b/doc/src/painting-and-printing/coordsys.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/painting-and-printing/paintsystem.qdoc b/doc/src/painting-and-printing/paintsystem.qdoc
index deb9c8b..0aaca46 100644
--- a/doc/src/painting-and-printing/paintsystem.qdoc
+++ b/doc/src/painting-and-printing/paintsystem.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/painting-and-printing/printing.qdoc b/doc/src/painting-and-printing/printing.qdoc
index 97cd92f..6750864 100644
--- a/doc/src/painting-and-printing/printing.qdoc
+++ b/doc/src/painting-and-printing/printing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/atomic-operations.qdoc b/doc/src/platforms/atomic-operations.qdoc
index 4d3499e..6a6dde2 100644
--- a/doc/src/platforms/atomic-operations.qdoc
+++ b/doc/src/platforms/atomic-operations.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/compiler-notes.qdoc b/doc/src/platforms/compiler-notes.qdoc
index bcf7cb4..fb534df 100644
--- a/doc/src/platforms/compiler-notes.qdoc
+++ b/doc/src/platforms/compiler-notes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -31,273 +31,14 @@
\title Compiler Notes
\brief Information about the C++ compilers and tools used to build Qt.
- This page contains information about the C++ compilers and tools used
- to build Qt on various platforms.
+ This page used to contain information about the C++ compilers and tools
+ used to build Qt on various platforms. This information is now maintained
+ in the \l{Platform and Compiler Notes} for each platform.
- \tableofcontents
-
- Please refer to the \l{Platform Notes} for information on the platforms
- Qt is currently known to run on, and see the \l{Supported Platforms}
- page for information about the status of each platform.
+ Please refer to the \l{Supported Platforms} page for information about the
+ status of each platform.
If you have anything to add to this list or any of the platform or
compiler-specific pages, please submit it via the \l{Bug Report Form}
or through the \l{Public Qt Repository}.
-
- \section1 Supported Features
-
- Not all compilers used to build Qt are able to compile all modules. The following table
- shows the compiler support for five modules that are not uniformly available for all
- platforms and compilers.
-
- \table
- \header \o Compiler \o{5,1} Features
- \header \o \o Concurrent \o XmlPatterns \o WebKit(*) \o CLucene \o Phonon
- \row \o g++ 3.3 \o \o \bold{X} \o \o \bold{X} \o \bold{X}
- \row \o g++ 3.4 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
- \row
- \row \o SunCC 5.5 \o \o \o \o \bold{X} \o \bold{X}
- \row
- \row \o aCC series 3 \o \o \o \o \bold{X} \o \bold{X}
- \row \o aCC series 6 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
- \row \o xlC 6 \o \o \o \o \bold{X} \o \bold{X}
- \row \o Intel CC 10 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
- \row
- \row \o MSVC 2003 \o \bold{X} \o \bold{X} \o \o \bold{X} \o \bold{X}
- \row \o MSVC 2005 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
- \endtable
-
- * WebKit is only supported as a dynamically built library. Static linkage is not supported.
-
- \target GCC
- \section1 GCC
-
- \section2 GCC on Windows (MinGW)
-
- We have tested Qt with this compiler on Windows XP.
- The minimal version of MinGW supported is:
-
- \list
- \o GCC 3.4.2
- \o MinGW runtime 3.7
- \o win32api 3.2
- \o binutils 2.15.91
- \o mingw32-make 3.80.0-3
- \endlist
-
- \note For users of the MinGW binary package: This package is now
- based on MinGW 4.4. The installer no longer offers to download
- MinGW for you, but rather offers to use a version of MinGW that
- you already have installed on your machine. You just tell the
- installer which directory MinGW is installed in. If you don't
- already have MinGW 4.4 installed, you can download a .zip archive
- from our \l{ftp://ftp.trolltech.com/misc/MinGW-gcc440_1.zip} {ftp
- site}. This archive provides fixes to MinGW and support for
- missing API, See the _patches directory in the archive for
- details.
-
- \note A MinGW installation is only needed to build against the
- binary pacakge, not to run the pre-compiled binaries that are in
- the package.
-
- \section2 GCC 4.0.0
-
- The released package of the compiler has some bugs that lead to
- miscompilations. We recommend using GCC 4.0.1 or later, or to use
- a recent CVS snapshot of the GCC 4.0 branch. The version of GCC
- 4.0.0 that is shipped with Mac OS X 10.4 "Tiger" is known to work
- with Qt for Mac OS X.
-
- \section2 HP-UX
-
- The hpux-g++ platform is tested with GCC 3.4.4.
-
- \section2 Solaris
-
- Please use GCC 3.4.2 or later.
- Please not that WebKit is not supported for Solaris, regardless of which compiler is used.
-
- \section2 Mac OS X
-
- Please use the latest GCC 3.3 from Apple or a later version of GCC 3.
- The gcc 3.3 that is provided with Xcode 1.5 is known to generate bad code.
- Use the November 2004 GCC 3.3 updater \l{http://connect.apple.com}{available from Apple}.
-
- \section2 GCC 3.4.6 (Debian 3.4.6-5) on AMD64 (x86_64)
-
- This compiler is known to miscompile some parts of Qt when doing a
- release build. There are several workarounds:
-
- \list 1
- \o Use a debug build instead.
- \o For each miscompilation encountered, recompile the file, removing the -O2 option.
- \o Add -fno-gcse to the QMAKE_CXXFLAGS_RELEASE.
- \endlist
-
- \section1 HP ANSI C++ (aCC)
-
- The hpux-acc-32 and hpux-acc-64 platforms are tested with aCC A.03.57. The
- hpuxi-acc-32 and hpuxi-acc-64 platforms are tested with aCC A.06.10.
-
- \section1 Intel C++ Compiler
-
- Qt supports the Intel C++ compiler on both Windows and Linux.
- However, there are a few issues on Linux (see the following
- section).
-
- \section2 Intel C++ Compiler for Linux
-
- Nokia currently tests the following compilers:
-
- \list
-
- \o Intel(R) C++ Compiler for applications running on IA-32,
- Version 10.1 Build 20080602 Package ID: l_cc_p_10.1.017
-
- \o Intel(R) C++ Compiler for applications running on Intel(R) 64,
- Version 10.1 Build 20080602 Package ID: l_cc_p_10.1.017
-
- \endlist
-
- We do not currently test the IA-64 (Itanium) compiler.
-
- \section2 Known Issues with Intel C++ Compiler for Linux
-
- \list
-
- \o Precompiled header support does not work in version 10.0.025
- and older. For these compilers, you should configure Qt with
- -no-pch. Precompiled header support works properly in version
- 10.0.026 and later.
- \o Version 10.0.026 for Intel 64 is known to miscompile qmake when
- building in release mode. For now, configure Qt with
- -debug. Version 10.1.008 and later can compile qmake in release
- mode.
- \o Versions 10.1.008 to 10.1.015 for both IA-32 and Intel 64 are
- known crash with "(0): internal error: 0_47021" when compiling
- QtXmlPatterns, QtWebKit, and Designer in release mode. Version
- 10.1.017 compiles these modules correctly in release mode.
- \endlist
-
- \section2 Intel C++ Compiler (Windows, Altix)
-
- Qt 4 has been tested successfully with:
-
- \list
- \o Windows - Intel(R) C++ Compiler for 32-bit applications,
- Version 9.1.040.
- \o Altix - Intel(R) C++ Itanium(R) Compiler for Itanium(R)-based
- applications Version 8.1 Build 20050406 Package ID: l_cc_pc_8.1.030
- \endlist
-
- We currently only test the Intel compiler on 32-bit Windows versions.
-
- \section1 MIPSpro (IRIX)
-
- \bold{IRIX is an unsupported platform. See the \l{Supported Platforms} page
- and Qt's Software's online \l{Platform Support Policy} page for details.}
-
- Qt 4.4.x requires MIPSpro version 7.4.2m.
-
- Note that MIPSpro version 7.4.4m is currently not supported, since it has
- introduced a number of problems that have not yet been resolved.
- We recommend using 7.4.2m for Qt development. However, please note the
- unsupported status of this platform.
-
- \target Sun Studio
- \section1 Forte Developer / Sun Studio (Solaris)
-
- \section2 Sun Studio
-
- Qt is tested using Sun Studio 12 (Sun CC 5.9). Go to
- \l{Sun Studio Patches} page on Sun's Web site to download
- the latest patches for your Sun compiler.
-
- Please note that Qt 4.6 is stricter in its STL requirements and
- that the default STL implementation used by Sun CC does not pass
- those requirements. This does not affect binary compatibility and
- you can continue to use STL in your own code, but Qt's
- STL-compatibility functions will be disabled.
-
- Sun CC ships with a secondary STL implementation (called stlport4)
- which is standards-compliant and can be used by Qt. You can enable
- it by passing the -library=stlport4 option to the compiler. Note
- that this does not affect Qt's binary compatibility, but it may
- affect that of other libraries and programs that use STL.
-
- \section2 Sun WorkShop 5.0
-
- Sun WorkShop 5.0 is not supported with Qt 4.
-
- \section1 Visual Studio (Windows)
-
- We do most of our Windows development on Windows XP, using Microsoft
- Visual Studio .NET 2005 and Visual Studio 2008 (both the 32- and 64-bit
- versions).
-
- Qt works with the Standard Edition, the Professional Edition and Team
- System Edition of Visual Studio 2005.
-
- In order to use Qt with the Visual Studio 2005/2008 Express Edition you need
- to download and install the platform SDK. Due to limitations in the
- Express Edition it is not possible for us to install the Qt Visual
- Studio Integration. You will need to use our command line tools to
- build Qt applications with this edition.
-
- The Visual C++ Linker doesn't understand filenames with spaces (as in
- \c{C:\Program files\Qt\}) so you will have to move it to another place,
- or explicitly set the path yourself; for example:
-
- \snippet doc/src/snippets/code/doc_src_compiler-notes.qdoc 0
-
- If you are experiencing strange problems with using special flags that
- modify the alignment of structure and union members (such as \c{/Zp2})
- then you will need to recompile Qt with the flags set for the
- application as well.
-
- If you're using Visual Studio .NET (2002) Standard Edition, you should be
- using the Qt binary package provided, and not the source package.
- As the Standard Edition does not optimize compiled code, your compiled
- version of Qt would perform suboptimally with respect to speed.
-
- With Visual Studio 2005 Service Pack 1 a bug was introduced which
- causes Qt not to compile, this has been fixed with a hotfix available
- from Microsoft. See this
- \l{http://qt.nokia.com/developer/faqs/faq.2006-12-18.3281869860}{Knowledge Base entry}
- for more information.
-
- There currently is a problem when compiling Qt with Visual Studio 2010 for 64-bit.
- Its optimizer causes trouble and generates code that crashes for the release builds.
- To avoid the crashes, You need to apply the hotfix in the following article
- http://support.microsoft.com/kb/2280741.
-
- \section1 IBM xlC (AIX)
-
- The makeC++SharedLib utility must be in your PATH and be up to date to
- build shared libraries. From IBM's
- \l{http://www.redbooks.ibm.com/abstracts/sg245674.html}{C and C++ Application Development on AIX}
- Redbook:
-
- \list
- \o "The second step is to use the makeC++SharedLib command to create the
- shared object. The command has many optional arguments, but in its
- simplest form, can be used as follows:"
- \snippet doc/src/snippets/code/doc_src_compiler-notes.qdoc 1
- \o "The full path name to the command is not required; however, to avoid
- this, you will have to add the directory in which it is located to
- your PATH environment variable. The command is located in the
- /usr/vacpp/bin directory with the VisualAge C++ Professional for AIX,
- Version 5 compiler."
- \endlist
-
- \section2 VisualAge C++ for AIX, Version 6.0
-
- Make sure you have the
- \l{http://www-1.ibm.com/support/search.wss?rs=32&amp;tc=SSEP5D&amp;dc=D400}{latest upgrades}
- installed.
-
- \section2 GCCE (Symbian)
-
- GCCE cannot be used to compile Qt libaries for the Symbian platform, but GCCE is supported
- when compiling Qt applications for Symbian platform.
*/
diff --git a/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc b/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
index b9dc151..2cde4ba 100644
--- a/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
+++ b/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-HwAcc-WinCE.qdoc b/doc/src/platforms/emb-HwAcc-WinCE.qdoc
index 00f85a1..5dda1c3 100644
--- a/doc/src/platforms/emb-HwAcc-WinCE.qdoc
+++ b/doc/src/platforms/emb-HwAcc-WinCE.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-accel.qdoc b/doc/src/platforms/emb-accel.qdoc
index 8d7f029..c8854f7 100644
--- a/doc/src/platforms/emb-accel.qdoc
+++ b/doc/src/platforms/emb-accel.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-architecture.qdoc b/doc/src/platforms/emb-architecture.qdoc
index f75beee..dcaa319 100644
--- a/doc/src/platforms/emb-architecture.qdoc
+++ b/doc/src/platforms/emb-architecture.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-charinput.qdoc b/doc/src/platforms/emb-charinput.qdoc
index 5a94267..03cc340 100644
--- a/doc/src/platforms/emb-charinput.qdoc
+++ b/doc/src/platforms/emb-charinput.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-crosscompiling.qdoc b/doc/src/platforms/emb-crosscompiling.qdoc
index 13ccb65..f28ea7a 100644
--- a/doc/src/platforms/emb-crosscompiling.qdoc
+++ b/doc/src/platforms/emb-crosscompiling.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-deployment.qdoc b/doc/src/platforms/emb-deployment.qdoc
index 473cafc..9a36097 100644
--- a/doc/src/platforms/emb-deployment.qdoc
+++ b/doc/src/platforms/emb-deployment.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -58,7 +58,7 @@
directory relative to the path set using the \c -prefix parameter
when running the \c configure script; ensure that this is a
sensible path in the target device environment. See the
- \l {Installing Qt on Embedded Linux#Step 3: Building the
+ \l {Installing Qt for Embedded Linux#Step 3: Building the
Library}{installation} documentation for more details.
\section1 Environment Variables
diff --git a/doc/src/platforms/emb-differences.qdoc b/doc/src/platforms/emb-differences.qdoc
index 642738e..e9aa0eb 100644
--- a/doc/src/platforms/emb-differences.qdoc
+++ b/doc/src/platforms/emb-differences.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-directfb-EmbLinux.qdoc b/doc/src/platforms/emb-directfb-EmbLinux.qdoc
index f416819..dbe6c14 100644
--- a/doc/src/platforms/emb-directfb-EmbLinux.qdoc
+++ b/doc/src/platforms/emb-directfb-EmbLinux.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-displaymanagement.qdoc b/doc/src/platforms/emb-displaymanagement.qdoc
index 6ed2c49..bba594f 100644
--- a/doc/src/platforms/emb-displaymanagement.qdoc
+++ b/doc/src/platforms/emb-displaymanagement.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-envvars.qdoc b/doc/src/platforms/emb-envvars.qdoc
index 2421da9..1d109b4 100644
--- a/doc/src/platforms/emb-envvars.qdoc
+++ b/doc/src/platforms/emb-envvars.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-features.qdoc b/doc/src/platforms/emb-features.qdoc
index 1e7b585..a362867 100644
--- a/doc/src/platforms/emb-features.qdoc
+++ b/doc/src/platforms/emb-features.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-fonts.qdoc b/doc/src/platforms/emb-fonts.qdoc
index f7fed13..04aa4e4 100644
--- a/doc/src/platforms/emb-fonts.qdoc
+++ b/doc/src/platforms/emb-fonts.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-framebuffer-howto.qdoc b/doc/src/platforms/emb-framebuffer-howto.qdoc
index ab00b88..f8b7ff9 100644
--- a/doc/src/platforms/emb-framebuffer-howto.qdoc
+++ b/doc/src/platforms/emb-framebuffer-howto.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-hardwareacceleration.qdocinc b/doc/src/platforms/emb-hardwareacceleration.qdocinc
index fb00e09..83ecef5 100644
--- a/doc/src/platforms/emb-hardwareacceleration.qdocinc
+++ b/doc/src/platforms/emb-hardwareacceleration.qdocinc
@@ -1,140 +1,140 @@
- \section1 Hardware Acceleration
-
- When designing applications for embedded devices there is often a
- compromise between graphics effects and performance. On most
- devices, you cannot have both simply because the hardware needed
- for such operations just is not there. With a growing number of
- devices that use hardware dedicated to graphics operations there is
- less need to compromise.
-
- In addition to enabling dynamic graphics effects, there are two
- other benefits to using graphics acceleration. One is that graphics
- acceleration hardware is more power efficient than using the CPU.
- The reason for this is that the CPU might require a clock speed
- that is up to 20 times higher than the GPU, achieving the same
- results. E.g. a typical hardware accelerated mobile graphics unit
- can rasterize one or two bilinear texture fetches in one cycle,
- while a software implementation takes easily more than 20 cycles.
- Typical \e {System-on-a-chip} (SoC) graphics hardware generally have
- a much lower clock speed and memory bandwidth, and different level
- of acceleration than desktop GPUs. One example is that many GPUs
- leave out transformation and lighting from the graphics pipeline
- and only implements rasterization.
-
- Another reason to use a GPU is to offload the main CPU, either for
- power saving or to perform other operations in parallel. Often
- drawing speed with a GPU is not that much faster than a CPU but
- the clear benefit of using the GPU is to free up the CPU to perform
- other tasks which can be used to create a more responsive use
- experience.
-
- The key to writing good applications for devices is therefore to
- limit the wow factor down to what the target hardware can handle,
- and to take advantage of any graphics dedicated hardware. Qt
- provides several ways to both render advanced effects on the screen
- and speed up your application using hardware accelerated graphics.
-
- \tableofcontents
-
- \section2 Qt for Embedded Graphics pipeline
-
- Qt uses QPainter for all graphics operations. By using the same API
- regardless of platform, the code can be reused on different devices.
- QPainter use different paint engines implemented in the QPaintEngine API to
- do the actual painting.
-
- The QPaintEngine API provides paint engines for each window system and
- painting framework supported by Qt. In regards to Qt for Embedded, this
- also includes implementations for OpenGL ES versions 1.1 and 2.0, as well
- as OpenVG and DirectFB(Embedded Linux only).
-
- By using one of these paint engines, you will be able to improve the
- graphics performance of your Qt application. However, if the graphics
- operations used are not supported, this might as well be a trap, slowing
- down your application significantly. This all depends on what kind of
- graphics operations that are supported by the target devices hardware
- configuration.
-
- \image platformHWAcc.png
-
- The paint engine will direct all graphics operations supported by the
- devices hardware to the GPU, and from there they are sent to the
- framebuffer. Unsupported graphics operations falls back to the
- QRasterPaintEngine and are handled by the CPU before sent to the
- framebuffer. In the end, the operating system sends the paint updates off
- to the screen/display. The fallback operation is quite expensive in regards
- to memory consumption, and should be avoided.
-
- \section2 Hardware configuration requirements
-
- Before implementing any application using hardware acceleration, it is wise
- to get an overview of what kind of hardware accelerated graphics operations
- that are available for the target device.
-
- \note On devices with no hardware acceleration, Qt will use
- QRasterPaintEngine, which handles the acceleration using software. On
- devices supporting OpenGL ES, OpenVG or DirectFB(not supported by Windows
- CE), Qt will use the
- respective paint engines to accelerate painting. However, hardware
- configurations that only support a limited set of hardware acceleration
- features, might slow the application graphics down rather than speeding it
- up when using unsupported operations that must fall back to the raster
- engine.
-
- \section3 Different architectures
-
- Based on the architecture used in a device we can make a recommendation on
- which hardware acceleration techniques to use. There are mainly two
- different architectures on embedded devices. These are devices with a
- Unified Memory Architecture (UMA), and devices with dedicated graphics
- memory. Generally, high-end devices will have dedicated graphics memory.
- Low-end devices will just use system memory, sometimes reserving a memory
- region and sometimes not.
-
- In addition to this, we can categorize the devices into five types based on
- the different graphics operations supported by their hardware.
-
- \list 1
- \o No support for graphics acceleration.
- \o Support for blitter and alpha blending.
- \o Support for path based 2D vector graphics.
- \o Support for fixed function 3D graphics.
- \o Support for programmable 3D graphics.
- \endlist
-
- Based on these characteristics the table below recommends which paint
- engines to use with the different types of hardware configurations.
-
- \section3 Recommended use of hardware acceleration based on hardware
-
- \table
- \header
- \o Type
- \o UMA
- \o Non-UMA
- \row
- \o \bold {None}
- \o Qt Raster Engine
- \o Qt Raster Engine
- \row
- \o \bold {Blitter}
- \o DirectFB
- \o DirectFB
- \row
- \o \bold {2D Vector}
- \o OpenVG
- \o OpenVG
- \row
- \o \bold {Fixed 3D}
- \o OpenGL (ES) 1.x
- \o OpenGL (ES) 1.x
- \row
- \o \bold {Programmable 3D}
- \o OpenGL (ES) 2.x
- \o OpenGL (ES) 2.x
- \endtable
-
- \note Since the DirectFB API is quite primitive, the raster paint engine
- handles most of the operations.
-
- \note Blitter and Alpha blending is currently not supported on Windows CE.
+\section1 Hardware Acceleration
+
+When designing applications for embedded devices there is often a
+compromise between graphics effects and performance. On most
+devices, you cannot have both simply because the hardware needed
+for such operations just is not there. With a growing number of
+devices that use hardware dedicated to graphics operations there is
+less need to compromise.
+
+In addition to enabling dynamic graphics effects, there are two
+other benefits to using graphics acceleration. One is that graphics
+acceleration hardware is more power efficient than using the CPU.
+The reason for this is that the CPU might require a clock speed
+that is up to 20 times higher than the GPU, achieving the same
+results. E.g. a typical hardware accelerated mobile graphics unit
+can rasterize one or two bilinear texture fetches in one cycle,
+while a software implementation takes easily more than 20 cycles.
+Typical \e {System-on-a-chip} (SoC) graphics hardware generally have
+a much lower clock speed and memory bandwidth, and different level
+of acceleration than desktop GPUs. One example is that many GPUs
+leave out transformation and lighting from the graphics pipeline
+and only implements rasterization.
+
+Another reason to use a GPU is to offload the main CPU, either for
+power saving or to perform other operations in parallel. Often
+drawing speed with a GPU is not that much faster than a CPU but
+the clear benefit of using the GPU is to free up the CPU to perform
+other tasks which can be used to create a more responsive use
+experience.
+
+The key to writing good applications for devices is therefore to
+limit the wow factor down to what the target hardware can handle,
+and to take advantage of any graphics dedicated hardware. Qt
+provides several ways to both render advanced effects on the screen
+and speed up your application using hardware accelerated graphics.
+
+\tableofcontents
+
+\section2 Qt for Embedded Graphics pipeline
+
+Qt uses QPainter for all graphics operations. By using the same API
+regardless of platform, the code can be reused on different devices.
+QPainter use different paint engines implemented in the QPaintEngine API to
+do the actual painting.
+
+The QPaintEngine API provides paint engines for each window system and
+painting framework supported by Qt. In regards to Qt for Embedded, this
+also includes implementations for OpenGL ES versions 1.1 and 2.0, as well
+as OpenVG and DirectFB(Embedded Linux only).
+
+By using one of these paint engines, you will be able to improve the
+graphics performance of your Qt application. However, if the graphics
+operations used are not supported, this might as well be a trap, slowing
+down your application significantly. This all depends on what kind of
+graphics operations that are supported by the target devices hardware
+configuration.
+
+\image platformHWAcc.png
+
+The paint engine will direct all graphics operations supported by the
+devices hardware to the GPU, and from there they are sent to the
+framebuffer. Unsupported graphics operations falls back to the
+QRasterPaintEngine and are handled by the CPU before sent to the
+framebuffer. In the end, the operating system sends the paint updates off
+to the screen/display. The fallback operation is quite expensive in regards
+to memory consumption, and should be avoided.
+
+\section2 Hardware configuration requirements
+
+Before implementing any application using hardware acceleration, it is wise
+to get an overview of what kind of hardware accelerated graphics operations
+that are available for the target device.
+
+\note On devices with no hardware acceleration, Qt will use
+QRasterPaintEngine, which handles the acceleration using software. On
+devices supporting OpenGL ES, OpenVG or DirectFB(not supported by Windows
+CE), Qt will use the
+respective paint engines to accelerate painting. However, hardware
+configurations that only support a limited set of hardware acceleration
+features, might slow the application graphics down rather than speeding it
+up when using unsupported operations that must fall back to the raster
+engine.
+
+\section3 Different architectures
+
+Based on the architecture used in a device we can make a recommendation on
+which hardware acceleration techniques to use. There are mainly two
+different architectures on embedded devices. These are devices with a
+Unified Memory Architecture (UMA), and devices with dedicated graphics
+memory. Generally, high-end devices will have dedicated graphics memory.
+Low-end devices will just use system memory, sometimes reserving a memory
+region and sometimes not.
+
+In addition to this, we can categorize the devices into five types based on
+the different graphics operations supported by their hardware.
+
+\list 1
+ \o No support for graphics acceleration.
+ \o Support for blitter and alpha blending.
+ \o Support for path based 2D vector graphics.
+ \o Support for fixed function 3D graphics.
+ \o Support for programmable 3D graphics.
+\endlist
+
+Based on these characteristics the table below recommends which paint
+engines to use with the different types of hardware configurations.
+
+\section3 Recommended use of hardware acceleration based on hardware
+
+\table
+ \header
+ \o Type
+ \o UMA
+ \o Non-UMA
+ \row
+ \o \bold {None}
+ \o Qt Raster Engine
+ \o Qt Raster Engine
+ \row
+ \o \bold {Blitter}
+ \o DirectFB
+ \o DirectFB
+ \row
+ \o \bold {2D Vector}
+ \o OpenVG
+ \o OpenVG
+ \row
+ \o \bold {Fixed 3D}
+ \o OpenGL (ES) 1.x
+ \o OpenGL (ES) 1.x
+ \row
+ \o \bold {Programmable 3D}
+ \o OpenGL (ES) 2.x
+ \o OpenGL (ES) 2.x
+\endtable
+
+\note Since the DirectFB API is quite primitive, the raster paint engine
+handles most of the operations.
+
+\note Blitter and Alpha blending is currently not supported on Windows CE.
diff --git a/doc/src/platforms/emb-install.qdoc b/doc/src/platforms/emb-install.qdoc
index 26b6475..b5b408a 100644
--- a/doc/src/platforms/emb-install.qdoc
+++ b/doc/src/platforms/emb-install.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -28,10 +28,10 @@
/*!
\page qt-embedded-install.html
- \title Installing Qt on Embedded Linux
+ \title Installing Qt for Embedded Linux
\ingroup qt-embedded-linux
\ingroup installation
- \brief How to install Qt on Embedded Linux.
+ \brief How to install Qt for Embedded Linux.
This document describes how to install \l{Qt for Embedded Linux} in your
development environment:
@@ -152,7 +152,7 @@
\endlist
Note that the virtual framebuffer requires a Qt for X11
- installation. See \l {Installing Qt on X11 Platforms} for details.
+ installation. See \l {Installing Qt for X11 Platforms} for details.
The Linux framebuffer, on the other hand, is enabled by default on
all modern Linux distributions. For information on older versions,
diff --git a/doc/src/platforms/emb-kmap2qmap.qdoc b/doc/src/platforms/emb-kmap2qmap.qdoc
index 23c3c92..91983ef 100644
--- a/doc/src/platforms/emb-kmap2qmap.qdoc
+++ b/doc/src/platforms/emb-kmap2qmap.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-makeqpf.qdoc b/doc/src/platforms/emb-makeqpf.qdoc
index 6cf9d26..af24d7e 100644
--- a/doc/src/platforms/emb-makeqpf.qdoc
+++ b/doc/src/platforms/emb-makeqpf.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-opengl-EmbLinux.qdoc b/doc/src/platforms/emb-opengl-EmbLinux.qdoc
index 649349d..c53c3af 100644
--- a/doc/src/platforms/emb-opengl-EmbLinux.qdoc
+++ b/doc/src/platforms/emb-opengl-EmbLinux.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-openvg-EmbLinux.qdoc b/doc/src/platforms/emb-openvg-EmbLinux.qdoc
index 16dd51e..267eada 100644
--- a/doc/src/platforms/emb-openvg-EmbLinux.qdoc
+++ b/doc/src/platforms/emb-openvg-EmbLinux.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-performance.qdoc b/doc/src/platforms/emb-performance.qdoc
index e6edf59..368b06e 100644
--- a/doc/src/platforms/emb-performance.qdoc
+++ b/doc/src/platforms/emb-performance.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-pointer.qdoc b/doc/src/platforms/emb-pointer.qdoc
index b8ec167..81e532f 100644
--- a/doc/src/platforms/emb-pointer.qdoc
+++ b/doc/src/platforms/emb-pointer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -186,8 +186,11 @@
device file. Some drivers also require write access to the device file.
For instance, if you have specified the mouse driver with
\snippet doc/src/snippets/code/doc_src_emb-pointer.qdoc 11
- then examine the permissions of the device file by entering the following
- command in a console:
+ then examine the permissions of the device file by entering the
+ following command in a console:
+ \snippet doc/src/snippets/code/doc_src_emb-pointer.qdoc show permissions
+ Change the permissions of the device file, if necessary, in the following
+ way:
\snippet doc/src/snippets/code/doc_src_emb-pointer.qdoc 12
If the device file is actually a symbolic link to another file, you must
diff --git a/doc/src/platforms/emb-porting.qdoc b/doc/src/platforms/emb-porting.qdoc
index b7640ef..8b1f5f0 100644
--- a/doc/src/platforms/emb-porting.qdoc
+++ b/doc/src/platforms/emb-porting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/emb-qvfb.qdoc b/doc/src/platforms/emb-qvfb.qdoc
index 5a35bc9..418d2d2 100644
--- a/doc/src/platforms/emb-qvfb.qdoc
+++ b/doc/src/platforms/emb-qvfb.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -40,8 +40,8 @@
QVFb is an X11 application supplied with Qt for X11 that provides
a virtual framebuffer for Qt for Embedded Linux to use. To use it,
- you need to \l{Installing Qt on X11 Platforms}{configure and
- install Qt on X11 platforms} appropriately. Further requirements
+ you need to \l{Installing Qt for X11 Platforms}{configure and
+ install Qt for X11 platforms} appropriately. Further requirements
can be found in the \l{Qt for Embedded Linux Requirements}
document.
diff --git a/doc/src/platforms/emb-running.qdoc b/doc/src/platforms/emb-running.qdoc
index 20893c9..12222a6 100644
--- a/doc/src/platforms/emb-running.qdoc
+++ b/doc/src/platforms/emb-running.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -63,7 +63,7 @@
\row
\o
Provided that the environment variables are adjusted properly
- during the \l {Installing Qt on Embedded Linux}{installation process}, you
+ during the \l {Installing Qt for Embedded Linux}{installation process}, you
should see the \l {Text Edit} demo appear.
It might be that the hardware drivers must be specified explicitly
diff --git a/doc/src/platforms/emb-vnc.qdoc b/doc/src/platforms/emb-vnc.qdoc
index 47e8dcd..45b47d9 100644
--- a/doc/src/platforms/emb-vnc.qdoc
+++ b/doc/src/platforms/emb-vnc.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/mac-differences.qdoc b/doc/src/platforms/mac-differences.qdoc
index 2501656..8436043 100644
--- a/doc/src/platforms/mac-differences.qdoc
+++ b/doc/src/platforms/mac-differences.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -32,7 +32,7 @@
\ingroup platform-specific
This file outlines known issues and possible workarounds when
- using Qt on Mac OS X. Contact Qt's technical support team if you find
+ using Qt for Mac OS X. Contact Qt's technical support team if you find
additional issues which are not covered here. (See also the
document \l{qtmac-as-native.html} {Qt is Mac OS X Native}.)
diff --git a/doc/src/platforms/platform-notes-rtos.qdoc b/doc/src/platforms/platform-notes-rtos.qdoc
index 41b6ae7..8c30701 100644
--- a/doc/src/platforms/platform-notes-rtos.qdoc
+++ b/doc/src/platforms/platform-notes-rtos.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -27,8 +27,8 @@
/*!
\page platform-notes-vxworks.html
- \title Platform Notes - VxWorks
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - VxWorks
+ \contentspage Platform and Compiler Notes
\target VxWorks
\note VxWorks is a community supported platform. See the
@@ -143,8 +143,8 @@
/*!
\page platform-notes-qnx.html
- \title Platform Notes - QNX
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - QNX
+ \contentspage Platform and Compiler Notes
\target QNX
\note QNX is a community supported platform. See the
diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc
index 6f533ae..9c5f3c8 100644
--- a/doc/src/platforms/platform-notes.qdoc
+++ b/doc/src/platforms/platform-notes.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -39,35 +39,91 @@
/*!
\page platform-notes.html
\ingroup platform-specific
- \title Platform Notes
+ \title Platform and Compiler Notes
\brief Information about the platforms on which Qt can be used.
This page contains information about the platforms Qt is currently known
to run on, with links to platform-specific notes, including any known bugs
or incompatibilities.
+ Information about the combinations of platforms and compilers
+ supported by Qt can be found on the \l{Supported Platforms} page.
+
\list
- \o \l{Platform Notes - X11}
- \tableofcontents{1 Platform Notes - X11}
- \o \l{Platform Notes - Windows}
- \tableofcontents{1 Platform Notes - Windows}
- \o \l{Platform Notes - Mac OS X}
- \tableofcontents{1 Platform Notes - Mac OS X}
- \o \l{Platform Notes - Symbian}
- \tableofcontents{1 Platform Notes - Symbian}
- \o \l{Platform Notes - Embedded Linux}
- \tableofcontents{1 Platform Notes - Embedded Linux}
- \o \l{Platform Notes - Windows CE}
- \tableofcontents{1 Platform Notes - Windows CE}
- \o \l{Platform Notes - QNX}
- \tableofcontents{1 Platform Notes - QNX}
- \o \l{Platform Notes - VxWorks}
- \tableofcontents{1 Platform Notes - VxWorks}
+ \o \l{Platform and Compiler Notes - X11}
+ \tableofcontents{1 Platform and Compiler Notes - X11}
+ \o \l{Platform and Compiler Notes - Windows}
+ \tableofcontents{1 Platform and Compiler Notes - Windows}
+ \o \l{Platform and Compiler Notes - Mac OS X}
+ \tableofcontents{1 Platform and Compiler Notes - Mac OS X}
+ \o \l{Platform and Compiler Notes - Symbian}
+ \tableofcontents{1 Platform and Compiler Notes - Symbian}
+ \o \l{Platform and Compiler Notes - Embedded Linux}
+ \tableofcontents{1 Platform and Compiler Notes - Embedded Linux}
+ \o \l{Platform and Compiler Notes - Windows CE}
+ \tableofcontents{1 Platform and Compiler Notes - Windows CE}
+ \o \l{Platform and Compiler Notes - QNX}
+ \tableofcontents{1 Platform and Compiler Notes - QNX}
+ \o \l{Platform and Compiler Notes - VxWorks}
+ \tableofcontents{1 Platform and Compiler Notes - VxWorks}
\endlist
- See also the \l{Compiler Notes} for information about compiler-specific
- build issues. Information about the combinations of platforms and compilers
- supported by Qt can be found on the \l{Supported Platforms} page.
+ \section1 General Compiler Notes
+
+ \section2 Supported Features
+
+ Not all compilers used to build Qt are able to compile all modules. The following table
+ shows the compiler support for five modules that are not uniformly available for all
+ platforms and compilers.
+
+ \table
+ \header \o Compiler \o{5,1} Features
+ \header \o \o Concurrent \o XmlPatterns \o WebKit(*) \o CLucene \o Phonon
+ \row \o g++ 3.3 \o \o \bold{X} \o \o \bold{X} \o \bold{X}
+ \row \o g++ 3.4 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
+ \row
+ \row \o SunCC 5.5 \o \o \o \o \bold{X} \o \bold{X}
+ \row
+ \row \o aCC series 3 \o \o \o \o \bold{X} \o \bold{X}
+ \row \o aCC series 6 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
+ \row \o xlC 6 \o \o \o \o \bold{X} \o \bold{X}
+ \row \o Intel CC 10 \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
+ \row
+ \row \o MSVC 2003 \o \bold{X} \o \bold{X} \o \o \bold{X} \o \bold{X}
+ \row \o MSVC 2005 and up \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X} \o \bold{X}
+ \endtable
+
+ * WebKit is only supported as a dynamically built library. Static linkage is not supported.
+
+ \section2 GCC 3.4.6 (Debian 3.4.6-5) on AMD64 (x86_64)
+
+ This compiler is known to miscompile some parts of Qt when doing a
+ release build. There are several workarounds:
+
+ \list 1
+ \o Use a debug build instead.
+ \o For each miscompilation encountered, recompile the file, removing the \c{-O2} option.
+ \o Add \c{-fno-gcse} to the
+ \l{qmake Variable Reference#QMAKE_CXXFLAGS_RELEASE}{QMAKE_CXXFLAGS_RELEASE} qmake
+ variable.
+ \endlist
+
+ \section2 GCC 4.0.0
+
+ The released package of the compiler has some bugs that lead to
+ miscompilations. We recommend using GCC 4.0.1 or later, or to use
+ a recent CVS snapshot of the GCC 4.0 branch. The version of GCC
+ 4.0.0 that is shipped with Mac OS X 10.4 "Tiger" is known to work
+ with Qt for Mac OS X.
+
+ \section2 Intel C++ Compiler
+
+ Qt supports the Intel C++ compiler on both Windows and Linux.
+ However, there are a few issues on Linux; see
+ \l{Platform and Compiler Notes - X11#Intel C++ Compiler for Linux}{Intel C++ Compiler for Linux}
+ for details.
+
+ \section1 Feedback and Corrections
If you have anything to add to this list or any of the platform or
compiler-specific pages, please submit it via the \l{Bug Report Form}
@@ -76,8 +132,8 @@
/*!
\page platform-notes-x11.html
- \title Platform Notes - X11
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - X11
+ \contentspage Platform and Compiler Notes
This page contains information about the X11 platforms Qt is currently
known to run on, with links to platform-specific notes. More information
@@ -89,8 +145,7 @@
\target AIX
\section1 AIX - 5.2
- Qt has been tested on AIX 5.2, using the
- \l{Compiler Notes#IBM xlC (AIX)}{xlC} compiler.
+ Qt has been tested on AIX 5.2, using the xlC compiler.
\table
\header \o Compiler \o Notes
@@ -113,13 +168,38 @@
either \c{-no-stl} or \c{-no-largefile}.
\endtable
+ \section2 IBM xlC
+
+ The makeC++SharedLib utility must be in your PATH and be up to date to
+ build shared libraries. From IBM's
+ \l{http://www.redbooks.ibm.com/abstracts/sg245674.html}{C and C++ Application Development on AIX}
+ Redbook:
+
+ \list
+ \o "The second step is to use the makeC++SharedLib command to create the
+ shared object. The command has many optional arguments, but in its
+ simplest form, can be used as follows:"
+ \snippet doc/src/snippets/code/doc_src_compiler-notes.qdoc 1
+ \o "The full path name to the command is not required; however, to avoid
+ this, you will have to add the directory in which it is located to
+ your PATH environment variable. The command is located in the
+ /usr/vacpp/bin directory with the VisualAge C++ Professional for AIX,
+ Version 5 compiler."
+ \endlist
+
+ \section2 VisualAge C++ for AIX, Version 6.0
+
+ Make sure you have the
+ \l{http://www-1.ibm.com/support/search.wss?rs=32&amp;tc=SSEP5D&amp;dc=D400}{latest upgrades}
+ installed.
+
\target FreeBSD
\section1 FreeBSD - 6.0-RELEASE
\note FreeBSD is a community supported platform. See the
\l{Supported Platforms} page for more information.
- The system compiler on FreeBSD 4.x is gcc 2.95.4, which is not
+ The system compiler on FreeBSD 4.x is GCC 2.95.4, which is not
officially supported by Qt 4. We develop using and recommend
ports/lang/gcc34. You will need to run configure with the
\c{-platform freebsd-g++34} arguments. Optionally, you may use
@@ -132,7 +212,6 @@
Note that we do not actively test FreeBSD 4.x and 5.x. Our developers
migrated to 6.x after the Qt 4 launch. FreeBSD-CURRENT is not supported.
- \target HP-UX
\section1 HP-UX
Qt supports HP-UX on both PA-RISC and the Itanium (IA64) architectures.
@@ -140,17 +219,26 @@
\section2 PA-RISC - B.11.11 or later
You can configure Qt for aCC in 32 and 64 bit mode (hpux-acc-64 or
- hpux-acc-32), or gcc in 32 bit mode (hpux-g++). The default platform is
+ hpux-acc-32), or GCC in 32 bit mode (hpux-g++). The default platform is
hpux-acc-32. The minimum required version for aCC (HP ANSI C++) on PA-RISC
- is A.03.57. The supported gcc compiler is gcc 3.4.3.
+ is A.03.57. The supported GCC compiler is GCC 3.4.3.
\section2 Itanium - B.11.23 or later
You can configure Qt for aCC in 32 and 64 bit mode (hpuxi-acc-64 or
- hpuxi-acc-32). gcc is currently unsupported. The default platform is
+ hpuxi-acc-32). GCC is currently unsupported. The default platform is
hpuxi-acc-64. The minimum required version for aCC (HP ANSI C++) on
Itanium is A.06.12.
+ \section2 HP ANSI C++ (aCC)
+
+ The hpux-acc-32 and hpux-acc-64 platforms are tested with aCC A.03.57. The
+ hpuxi-acc-32 and hpuxi-acc-64 platforms are tested with aCC A.06.10.
+
+ \section2 GCC
+
+ The hpux-g++ platform is tested with GCC 3.4.4.
+
\section2 OpenGL Support
Qt's \l{QtOpenGL}{OpenGL} module requires GLX 1.3 or later to be installed.
@@ -161,20 +249,29 @@
\target IRIX
\section1 IRIX - 6.5.x
- \bold{IRIX is an unsupported platform - please see Qt's online
- \l{Platform Support Policy} for details.}
+ \bold{IRIX is an unsupported platform. See the \l{Supported Platforms} page
+ and Qt's Software's online \l{Platform Support Policy} page for details.}
Unpackaging and IRIX tar:
Because of long filenames some files will be cut off incorrectly with IRIX
tar. Please use GNU tar to unpack Qt packages.
+ \section2 MIPSpro
+
+ Qt 4.4.x requires MIPSpro version 7.4.2m.
+
+ Note that MIPSpro version 7.4.4m is currently not supported, since it has
+ introduced a number of problems that have not yet been resolved.
+ We recommend using 7.4.2m for Qt development. However, please note the
+ unsupported status of this platform.
+
\section1 Linux
There are no known problems with using Qt on production versions of
Linux/x86, Linux/ppc, Linux/amd64 and Linux/ia64 (including Altix(R)).
- For the gcc/g++ compiler, please also see the relevant
- \l{Compiler Notes#GCC}{compiler page}.
+ For the GCC compiler, please also see the relevant
+ \l{Platform and Compiler Notes#General Compiler Notes}{General Compiler Notes}.
\section2 Installation problems
@@ -198,6 +295,40 @@
"Failed Dependency". Use the \c{--nodeps} option to \c rpm to workaround
this problem.
+ \section2 Intel C++ Compiler for Linux
+
+ Nokia currently tests the following compilers:
+
+ \list
+
+ \o Intel(R) C++ Compiler for applications running on IA-32,
+ Version 10.1 Build 20080602 Package ID: l_cc_p_10.1.017
+
+ \o Intel(R) C++ Compiler for applications running on Intel(R) 64,
+ Version 10.1 Build 20080602 Package ID: l_cc_p_10.1.017
+
+ \endlist
+
+ We do not currently test the IA-64 (Itanium) compiler.
+
+ \section2 Known Issues with Intel C++ Compiler for Linux
+
+ \list
+
+ \o Precompiled header support does not work in version 10.0.025
+ and older. For these compilers, you should configure Qt with
+ -no-pch. Precompiled header support works properly in version
+ 10.0.026 and later.
+ \o Version 10.0.026 for Intel 64 is known to miscompile qmake when
+ building in release mode. For now, configure Qt with
+ -debug. Version 10.1.008 and later can compile qmake in release
+ mode.
+ \o Versions 10.1.008 to 10.1.015 for both IA-32 and Intel 64 are
+ known crash with "(0): internal error: 0_47021" when compiling
+ QtXmlPatterns, QtWebKit, and Designer in release mode. Version
+ 10.1.017 compiles these modules correctly in release mode.
+ \endlist
+
\target Solaris
\section1 Solaris - 9 or later
@@ -207,25 +338,50 @@
to truncate long filenames. We recommend using star instead
(http://star.berlios.de).
- \section2 CC on Solaris
+ Please note that WebKit is not supported for Solaris, regardless of
+ which compiler is used.
+
+ \section2 CC
- Be sure to check our \l{Compiler Notes#Sun Studio}{Forte Developer / Sun Studio}
- notes.
+ See the notes for \l{Forte Developer / Sun Studio}.
- \section2 GCC on Solaris
+ \section2 GCC
+
+ Please use GCC 3.4.2 or later.
- Be sure to check the installation notes for \l{GCC on Solaris}.
Do not use GCC with Sun's assembler/linker, this will result in link-time
errors in shared libraries. Use GNU binutils instead.
GCC 3.2.* is known to miscompile Qt due to an optimizer bug that will
- cause the resulting binaries to hang. Please use GCC 3.4.2 or later.
+ cause the resulting binaries to hang.
+
+ \section2 Forte Developer / Sun Studio
+
+ Qt is tested using Sun Studio 12 (Sun CC 5.9). Go to
+ \l{Sun Studio Patches} page on Sun's Web site to download
+ the latest patches for your Sun compiler.
+
+ Please note that Qt 4.6 is stricter in its STL requirements and
+ that the default STL implementation used by Sun CC does not pass
+ those requirements. This does not affect binary compatibility and
+ you can continue to use STL in your own code, but Qt's
+ STL-compatibility functions will be disabled.
+
+ Sun CC ships with a secondary STL implementation (called stlport4)
+ which is standards-compliant and can be used by Qt. You can enable
+ it by passing the -library=stlport4 option to the compiler. Note
+ that this does not affect Qt's binary compatibility, but it may
+ affect that of other libraries and programs that use STL.
+
+ \section2 Sun WorkShop 5.0
+
+ Sun WorkShop 5.0 is not supported with Qt 4.
*/
/*!
\page platform-notes-windows.html
- \title Platform Notes - Windows
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - Windows
+ \contentspage Platform and Compiler Notes
This page contains information about the Windows platforms Qt is currently
known to run on, with links to platform-specific notes. More information
@@ -255,12 +411,87 @@
and other applications that require screen grabbing while direct
rendering is enabled. Other GL-applications may not work as expected,
unless direct rendering is disabled.
+
+ \section2 GCC (MinGW)
+
+ We have tested Qt with this compiler on Windows XP.
+ The minimal version of MinGW supported is GCC 4.4.
+
+ \note For users of the MinGW binary package: This package is now
+ based on MinGW 4.4. The installer no longer offers to download
+ MinGW for you, but rather offers to use a version of MinGW that
+ you already have installed on your machine. You just tell the
+ installer which directory MinGW is installed in. If you don't
+ already have MinGW 4.4 installed, you can download a .zip archive
+ from our \l{ftp://ftp.trolltech.com/misc/MinGW-gcc440_1.zip}{FTP
+ site}. This archive provides fixes to MinGW and support for
+ missing API, See the _patches directory in the archive for
+ details.
+
+ \note A MinGW installation is only needed to build against the
+ binary pacakge, not to run the pre-compiled binaries that are in
+ the package.
+
+ \section2 Intel C++ Compiler (Windows, Altix)
+
+ Qt 4 has been tested successfully with:
+
+ \list
+ \o Windows - Intel(R) C++ Compiler for 32-bit applications,
+ Version 9.1.040.
+ \o Altix - Intel(R) C++ Itanium(R) Compiler for Itanium(R)-based
+ applications Version 8.1 Build 20050406 Package ID: l_cc_pc_8.1.030
+ \endlist
+
+ We currently only test the Intel compiler on 32-bit Windows versions.
+
+ \section2 Visual Studio (Windows)
+
+ We do most of our Windows development on Windows XP, using Microsoft
+ Visual Studio .NET 2005 and Visual Studio 2008 (both the 32- and 64-bit
+ versions).
+
+ Qt works with the Standard Edition, the Professional Edition and Team
+ System Edition of Visual Studio 2005.
+
+ In order to use Qt with the Visual Studio 2005/2008 Express Edition you need
+ to download and install the platform SDK. Due to limitations in the
+ Express Edition it is not possible for us to install the Qt Visual
+ Studio Integration. You will need to use our command line tools to
+ build Qt applications with this edition.
+
+ The Visual C++ Linker doesn't understand filenames with spaces (as in
+ \c{C:\Program files\Qt\}) so you will have to move it to another place,
+ or explicitly set the path yourself; for example:
+
+ \snippet doc/src/snippets/code/doc_src_compiler-notes.qdoc 0
+
+ If you are experiencing strange problems with using special flags that
+ modify the alignment of structure and union members (such as \c{/Zp2})
+ then you will need to recompile Qt with the flags set for the
+ application as well.
+
+ If you're using Visual Studio .NET (2002) Standard Edition, you should be
+ using the Qt binary package provided, and not the source package.
+ As the Standard Edition does not optimize compiled code, your compiled
+ version of Qt would perform suboptimally with respect to speed.
+
+ With Visual Studio 2005 Service Pack 1 a bug was introduced which
+ causes Qt not to compile, this has been fixed with a hotfix available
+ from Microsoft. See this
+ \l{http://qt.nokia.com/developer/faqs/faq.2006-12-18.3281869860}{Knowledge Base entry}
+ for more information.
+
+ There currently is a problem when compiling Qt with Visual Studio 2010 for 64-bit.
+ Its optimizer causes trouble and generates code that crashes for the release builds.
+ To avoid the crashes, You need to apply the hotfix in the following article
+ http://support.microsoft.com/kb/2280741.
*/
/*!
\page platform-notes-mac.html
- \title Platform Notes - Mac OS X
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - Mac OS X
+ \contentspage Platform and Compiler Notes
This page contains information about the Mac OS X versions Qt is currently
known to run on, with links to platform-specific notes. More information
@@ -287,11 +518,15 @@
\section2 Required GCC version
- Apple's gcc 4 that is shipped with the Xcode Tools for both Mac OS X 10.4
- and 10.5 will compile Qt. There is preliminary support for gcc 4.2 which
+ Apple's GCC 4 that is shipped with the Xcode Tools for both Mac OS X 10.4
+ and 10.5 will compile Qt. There is preliminary support for GCC 4.2 which
is included with Xcode Tools 3.1+ (configurable with
\c{-platform macx-g++42}).
+ Please use the latest GCC 3.3 from Apple or a later version of GCC 3.
+ The GCC 3.3 that is provided with Xcode 1.5 is known to generate bad code.
+ Use the November 2004 GCC 3.3 updater \l{http://connect.apple.com}{available from Apple}.
+
\section2 Binary Package
The binary package requires that you have your .qt-license file in your
@@ -300,7 +535,7 @@
this file in the email they receive.
The binary package was built on Mac OS X 10.4 with Xcode Tools 2.1
- (gcc 4.0.0) for Qt 4.1.0, Xcode Tools 2.2 (gcc 4.0.1) for Qt 4.1.1-4.1.4
+ (GCC 4.0.0) for Qt 4.1.0, Xcode Tools 2.2 (GCC 4.0.1) for Qt 4.1.1-4.1.4
and Xcode Tools 2.3 for 4.2.0. It will only link executables built
against 10.4 (or a 10.4 SDK). You should be able to run applications
linked against these frameworks on Mac OS X 10.3.9 and Mac OS X 10.4+.
@@ -374,8 +609,8 @@
/*!
\page platform-notes-windows-ce.html
- \title Platform Notes - Windows CE
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - Windows CE
+ \contentspage Platform and Compiler Notes
This page contains information about the Windows CE and Windows Mobile
platforms Qt is currently known to run on, with links to platform-specific
@@ -385,8 +620,8 @@
/*!
\page platform-notes-symbian.html
- \title Platform Notes - Symbian
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - Symbian
+ \contentspage Platform and Compiler Notes
\ingroup platform-specific
\brief Information about the state of support for the Symbian platform.
@@ -468,6 +703,13 @@
for Phonon.
\endtable
+ \section1 Compiler Notes
+
+ \section2 GCCE (Symbian)
+
+ GCCE cannot be used to compile Qt libaries for the Symbian platform, but GCCE is supported
+ when compiling Qt applications for the Symbian platform.
+
\section1 Known Issues
Known issues can be found by visiting the
@@ -497,6 +739,9 @@
\o \c AllFiles when \l{http://developer.symbian.org/wiki/index.php/Capabilities_%28Symbian_Signed%29/AllFiles_Capability}{accessing specific areas.}
\row \o QtNetwork
\o \c NetworkServices is basically always required for this module.
+ \o \c ReadUserData is required to include all the phone's SSL certificates in the system's default CA certificate list
+ (for example those added by the user or stored in the SIM card),
+ without this capability only the CA certs built into the phone are used.
\row \o QtMultiMedia
\o \c UserEnvironment if QAudioInput is used.
\endtable
@@ -580,8 +825,8 @@
/*!
\page platform-notes-embedded-linux.html
- \title Platform Notes - Embedded Linux
- \contentspage Platform Notes
+ \title Platform and Compiler Notes - Embedded Linux
+ \contentspage Platform and Compiler Notes
This page contains information about the Embedded Linux platforms Qt is
currently known to run on, with links to platform-specific notes. More
diff --git a/doc/src/platforms/qt-embedded-linux.qdoc b/doc/src/platforms/qt-embedded-linux.qdoc
index 988472d..cd20917 100644
--- a/doc/src/platforms/qt-embedded-linux.qdoc
+++ b/doc/src/platforms/qt-embedded-linux.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -67,7 +67,7 @@
\o
\list
\o \l {Qt for Embedded Linux Architecture}{Architecture Overview}
- \o \l {Installing Qt on Embedded Linux}{Installation}
+ \o \l {Installing Qt for Embedded Linux}{Installation}
\o \l {Running Qt for Embedded Linux Applications}{Running Applications}
\o \l {Qt for Embedded Linux Examples}{Examples}
\endlist
diff --git a/doc/src/platforms/qt-embedded.qdoc b/doc/src/platforms/qt-embedded.qdoc
index a3d11c6..8beb59d 100644
--- a/doc/src/platforms/qt-embedded.qdoc
+++ b/doc/src/platforms/qt-embedded.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/qtmac-as-native.qdoc b/doc/src/platforms/qtmac-as-native.qdoc
index 5bb0d10..61acebb 100644
--- a/doc/src/platforms/qtmac-as-native.qdoc
+++ b/doc/src/platforms/qtmac-as-native.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc
index 83cd89b..3a7d590 100644
--- a/doc/src/platforms/supported-platforms.qdoc
+++ b/doc/src/platforms/supported-platforms.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -44,9 +44,8 @@
\tableofcontents
- Information about the specific platforms Qt runs on can be found on the
- \l{Platform Notes} page. Information about the compilers used on each platform
- can be found on the \l{Compiler Notes} page.
+ Information about the specific platforms Qt runs on, and the compilers used
+ on each platform, can be found on the \l{Platform and Compiler Notes} page.
\section1 Tier 1 Platforms
@@ -115,14 +114,16 @@
\o gcc (\l{http://www.scratchbox.org/}{Scratchbox)}
\row \o Windows CE 5.0 (ARMv4i, x86, MIPS)
\o MSVC 2005 WinCE 5.0 Standard (x86, pocket, smart, mipsii)
- \row \o Windows CE 6.0 (ARMv4i, x86, MIPS)
- \o MSVC 2008 WinCE 6.0 Professional
+ \row \o Windows Embedded CE 6.0 (ARMv4i, x86, MIPS)
+ \o MSVC 2008 WinCE Embedded 6.0 Professional
\row \o Maemo 5(Linux, ARM, X11)
\o gcc (\l{http://www.scratchbox.org/}{Scratchbox)}
\row \o Symbian (Symbian/S60 3.1, 3.2)
\o RVCT 2.2 [build 686 or later], WINSCW 3.2.5 [build 482 or later], GCCE (for applications)
\endtable
+ \note The PPC architecture on Mac has been downgraded from tier 1 to tier 2 for 4.7.
+
\section1 Tier 3 Platforms (Not supported by Nokia)
All platforms not specifically listed above are not supported by Nokia. Nokia does
diff --git a/doc/src/platforms/symbian-exceptionsafety.qdoc b/doc/src/platforms/symbian-exceptionsafety.qdoc
index 03d223b..ffbf117 100644
--- a/doc/src/platforms/symbian-exceptionsafety.qdoc
+++ b/doc/src/platforms/symbian-exceptionsafety.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/symbian-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc
index 9bf5c72..7bc5303 100644
--- a/doc/src/platforms/symbian-introduction.qdoc
+++ b/doc/src/platforms/symbian-introduction.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -29,7 +29,7 @@
\group qtsymbian
\title Qt for the Symbian platform
\ingroup qt-embedded
- \brief Documents related to Qt on the Symbian platform
+ \brief Documents related to Qt for the Symbian platform
Qt for Symbian is a C++ framework for GUI and application development
for embedded devices running Symbian. Qt for Symbian provides all
@@ -42,14 +42,14 @@
\o
\list
\o \l {Qt for the Symbian platform Requirements}
- \o \l {Installing Qt on the Symbian platform from a Binary Package}
- \o \l {Installing Qt on the Symbian platform}
+ \o \l {Installing Qt for the Symbian platform from a Binary Package}
+ \o \l {Installing Qt for the Symbian platform}
\o \l {The Symbian platform - Introduction to Qt}{Introduction to using Qt}
\endlist
\o
\list
\o \l {Exception Safety with Symbian}
- \o \l {Platform Notes - Symbian} {Qt for the Symbian platform - state of support}
+ \o \l {Platform and Compiler Notes - Symbian} {Qt for the Symbian platform - state of support}
\o \l {qmake Platform Notes#Symbian platform} {Qt for Symbian extensions for qmake}
\o \l {Symbian Platform Security Requirements} {Symbian Platform Security Requirements}
\endlist
@@ -93,10 +93,10 @@
\section1 Installing Qt and Running Demos
- Follow the instructions found in \l{Installing Qt on the Symbian platform from a Binary Package}
+ Follow the instructions found in \l{Installing Qt for the Symbian platform from a Binary Package}
to learn how to install Qt using a binary package and how to build and run Qt demos.
- Follow the instructions found in \l{Installing Qt on the Symbian platform} to learn how to install Qt using
+ Follow the instructions found in \l{Installing Qt for the Symbian platform} to learn how to install Qt using
using source package and how to build and run the Qt demos.
\section1 Building Your Own Applications
diff --git a/doc/src/platforms/wince-customization.qdoc b/doc/src/platforms/wince-customization.qdoc
index 5509d44..b3b9170 100644
--- a/doc/src/platforms/wince-customization.qdoc
+++ b/doc/src/platforms/wince-customization.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -33,7 +33,7 @@
When working with a custom SDK for Windows CE, Qt provides an easy way
to add support for it to your development environment. The following is
- a tutorial that covers how to create a specification for Qt on Windows
+ a tutorial that covers how to create a specification for Qt for Windows
CE platforms.
\tableofcontents
diff --git a/doc/src/platforms/wince-introduction.qdoc b/doc/src/platforms/wince-introduction.qdoc
index b3de5fe..2e9da59 100644
--- a/doc/src/platforms/wince-introduction.qdoc
+++ b/doc/src/platforms/wince-introduction.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -29,7 +29,7 @@
\group qtce
\title Qt for Windows CE
\ingroup qt-embedded
- \brief Documents related to Qt on Windows CE
+ \brief Documents related to Qt for Windows CE
Qt for Windows CE is a C++ framework for GUI and application development
for embedded devices running Windows CE. It runs on a variety of processors,
@@ -41,7 +41,7 @@
\o
\list
\o \l {Qt for Windows CE Requirements}
- \o \l {Installing Qt on Windows CE}
+ \o \l {Installing Qt for Windows CE}
\o \l {Windows CE - Introduction to using Qt}{Introduction to using Qt}
\endlist
\o
@@ -81,7 +81,7 @@
\section1 Installing Qt
- Follow the instructions found in \l{Installing Qt on Windows CE}.
+ Follow the instructions found in \l{Installing Qt for Windows CE}.
\section1 Building your own applications
diff --git a/doc/src/platforms/wince-opengl.qdoc b/doc/src/platforms/wince-opengl.qdoc
index f9921f5..a33e9f6 100644
--- a/doc/src/platforms/wince-opengl.qdoc
+++ b/doc/src/platforms/wince-opengl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/wince-openvg.qdoc b/doc/src/platforms/wince-openvg.qdoc
index aebd5ef..c15b1bd 100644
--- a/doc/src/platforms/wince-openvg.qdoc
+++ b/doc/src/platforms/wince-openvg.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/wince-signing.qdoc b/doc/src/platforms/wince-signing.qdoc
index d1fa6da..49e11a0 100644
--- a/doc/src/platforms/wince-signing.qdoc
+++ b/doc/src/platforms/wince-signing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/platforms/winsystem.qdoc b/doc/src/platforms/winsystem.qdoc
index 71c93a5..64e35c5 100644
--- a/doc/src/platforms/winsystem.qdoc
+++ b/doc/src/platforms/winsystem.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -44,8 +44,8 @@
\tableofcontents
For information about which platforms are supported by Qt, see the
- \l{Platform Notes}. For information on distributing Qt applications, see
- \l{Deploying Qt Applications}.
+ \l{Platform and Compiler Notes}. For information on distributing Qt
+ applications, see \l{Deploying Qt Applications}.
\target x11
\section1 Qt for X11
diff --git a/doc/src/platforms/x11overlays.qdoc b/doc/src/platforms/x11overlays.qdoc
index 949a500..7a35cd2 100644
--- a/doc/src/platforms/x11overlays.qdoc
+++ b/doc/src/platforms/x11overlays.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting-qsa.qdoc b/doc/src/porting/porting-qsa.qdoc
index 153f015..93a83f4 100644
--- a/doc/src/porting/porting-qsa.qdoc
+++ b/doc/src/porting/porting-qsa.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting4-canvas.qdoc b/doc/src/porting/porting4-canvas.qdoc
index 4031917..d9e58ba 100644
--- a/doc/src/porting/porting4-canvas.qdoc
+++ b/doc/src/porting/porting4-canvas.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting4-designer.qdoc b/doc/src/porting/porting4-designer.qdoc
index aa42b68..0de6cf0 100644
--- a/doc/src/porting/porting4-designer.qdoc
+++ b/doc/src/porting/porting4-designer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting4-dnd.qdoc b/doc/src/porting/porting4-dnd.qdoc
index 1828ebc..66403d0 100644
--- a/doc/src/porting/porting4-dnd.qdoc
+++ b/doc/src/porting/porting4-dnd.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting4-overview.qdoc b/doc/src/porting/porting4-overview.qdoc
index 39a7cb9..f949460 100644
--- a/doc/src/porting/porting4-overview.qdoc
+++ b/doc/src/porting/porting4-overview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/porting4.qdoc b/doc/src/porting/porting4.qdoc
index 69bf877..ab0762a 100644
--- a/doc/src/porting/porting4.qdoc
+++ b/doc/src/porting/porting4.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt3to4.qdoc b/doc/src/porting/qt3to4.qdoc
index e833b57..26eeee4 100644
--- a/doc/src/porting/qt3to4.qdoc
+++ b/doc/src/porting/qt3to4.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-accessibility.qdoc b/doc/src/porting/qt4-accessibility.qdoc
index 0abcfed..634dda4 100644
--- a/doc/src/porting/qt4-accessibility.qdoc
+++ b/doc/src/porting/qt4-accessibility.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-arthur.qdoc b/doc/src/porting/qt4-arthur.qdoc
index f657c83..1d6819d 100644
--- a/doc/src/porting/qt4-arthur.qdoc
+++ b/doc/src/porting/qt4-arthur.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-designer.qdoc b/doc/src/porting/qt4-designer.qdoc
index 36881df..ea5147a 100644
--- a/doc/src/porting/qt4-designer.qdoc
+++ b/doc/src/porting/qt4-designer.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -36,18 +36,14 @@
\QD has been completely re-written based on our experience with
the previous versions of the product for Qt 3. One of the main new
- ideas behind this new version is to release the application as a
+ ideas is to release the application as a
collection of interchangeable components that include the property
editor, the widget box, and other useful tools for creating
graphical user interfaces with Qt. These components can either be
used together in the \QD application, or independently integrated
into other systems. As a result, certain features such as the
project editor and code editor have been removed from the version
- included with this release.
-
- The current version of \QD is near feature complete and can be used for
- many tasks. However, it is still under continuous development. This
- document will explain what is already in place.
+ included with release 4.
See also the \l{Qt Designer Manual}.
@@ -128,7 +124,7 @@
\row
\i \bold{Widget Editing Mode}
- The new \QD allows widgets to be dropped into existing layouts on
+ \QD now allows widgets to be dropped into existing layouts on
the form. Previously, it was necessary to break layouts in order
to add new widgets to them.
@@ -189,7 +185,7 @@
\row
\i \bold{The Resource Editor}
- The new \QD fully supports The Qt Resource System, and provide the
+ \QD now fully supports The Qt Resource System, and provides the
Resource Editor to help designers and developers manage the
resources that are needed by their applications.
@@ -210,8 +206,8 @@
\i \inlineimage designer-action-editor.png
\i \bold{The Action Editor}
- With the release of Qt 4.1, \QD introduces the Action Editor
- simplifying the management of actions when creating main window
+ With the release of Qt 4.1, \QD the Action Editor was introduced
+ to simplify the management of actions when creating main window
applications.
When creating a main window, you can add a menu bar and toolbars
@@ -261,7 +257,7 @@
\section1 Run-Time Support for Forms
- With the Qt 4.1 release, the new QtUiTools module is introduced to
+ With the Qt 4.1 release, the new QtUiTools module was introduced to
provide classes handling forms created with \QD.
Currently the module only contains the QUiLoader class.
diff --git a/doc/src/porting/qt4-interview.qdoc b/doc/src/porting/qt4-interview.qdoc
index f2dab2f..973740a 100644
--- a/doc/src/porting/qt4-interview.qdoc
+++ b/doc/src/porting/qt4-interview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-mainwindow.qdoc b/doc/src/porting/qt4-mainwindow.qdoc
index b160d63..73c9b2b 100644
--- a/doc/src/porting/qt4-mainwindow.qdoc
+++ b/doc/src/porting/qt4-mainwindow.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-network.qdoc b/doc/src/porting/qt4-network.qdoc
index f622b5a..52afb6a 100644
--- a/doc/src/porting/qt4-network.qdoc
+++ b/doc/src/porting/qt4-network.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-scribe.qdoc b/doc/src/porting/qt4-scribe.qdoc
index 0a9596e..0ab1edf 100644
--- a/doc/src/porting/qt4-scribe.qdoc
+++ b/doc/src/porting/qt4-scribe.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-sql.qdoc b/doc/src/porting/qt4-sql.qdoc
index 36ca4ef..b2de58f 100644
--- a/doc/src/porting/qt4-sql.qdoc
+++ b/doc/src/porting/qt4-sql.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-styles.qdoc b/doc/src/porting/qt4-styles.qdoc
index d52a9ce..4eb06c9 100644
--- a/doc/src/porting/qt4-styles.qdoc
+++ b/doc/src/porting/qt4-styles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-threads.qdoc b/doc/src/porting/qt4-threads.qdoc
index b389c6c..3dd3594 100644
--- a/doc/src/porting/qt4-threads.qdoc
+++ b/doc/src/porting/qt4-threads.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/porting/qt4-tulip.qdoc b/doc/src/porting/qt4-tulip.qdoc
index 333af84..48d2a9e 100644
--- a/doc/src/porting/qt4-tulip.qdoc
+++ b/doc/src/porting/qt4-tulip.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/qt-resources.qdoc b/doc/src/qt-resources.qdoc
index 9a6637f..70a8c79 100644
--- a/doc/src/qt-resources.qdoc
+++ b/doc/src/qt-resources.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/qt-webpages.qdoc b/doc/src/qt-webpages.qdoc
index 5d9b41b..05817df 100644
--- a/doc/src/qt-webpages.qdoc
+++ b/doc/src/qt-webpages.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -46,8 +46,8 @@
*/
/*!
- \externalpage http://qt.nokia.com/products/add-on-products/add-on-products/
- \title Third-Party Tools
+ \externalpage http://qt.nokia.com/services-partners/partners/partner-directory
+ \title Partner Directory
*/
/*!
diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc
index 919bb88..2384051 100644
--- a/doc/src/qt4-intro.qdoc
+++ b/doc/src/qt4-intro.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -157,7 +157,7 @@
\l{QtUiTools}{dynamic user interface building}.
\o New \l{Proxy Models}{proxy models} to enable view-specific sorting and
filtering of data displayed using item views.
- \o Support for \l{Installing Qt on Mac OS X}{universal binaries} on Mac OS X.
+ \o Support for \l{Installing Qt for Mac OS X}{universal binaries} on Mac OS X.
\o Additional features for developers using \l{QtOpenGL}{OpenGL}, such as
support for pixel and sample buffers.
\o A flexible \l{QSyntaxHighlighter}{syntax highlighting class} based on the
diff --git a/doc/src/scripting/ecmascript.qdoc b/doc/src/scripting/ecmascript.qdoc
index 508bf3b..b08c3ae 100644
--- a/doc/src/scripting/ecmascript.qdoc
+++ b/doc/src/scripting/ecmascript.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/scripting/qtscriptdebugger-manual.qdoc b/doc/src/scripting/qtscriptdebugger-manual.qdoc
index 0b1f0f4..a19d8d4 100644
--- a/doc/src/scripting/qtscriptdebugger-manual.qdoc
+++ b/doc/src/scripting/qtscriptdebugger-manual.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/scripting/qtscriptextensions.qdoc b/doc/src/scripting/qtscriptextensions.qdoc
index 8aa8b4f..5825c0a 100644
--- a/doc/src/scripting/qtscriptextensions.qdoc
+++ b/doc/src/scripting/qtscriptextensions.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/scripting/scripting.qdoc b/doc/src/scripting/scripting.qdoc
index 70a17cf..a5f3d76 100644
--- a/doc/src/scripting/scripting.qdoc
+++ b/doc/src/scripting/scripting.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/snippets/code/doc_src_emb-pointer.qdoc b/doc/src/snippets/code/doc_src_emb-pointer.qdoc
index d333c90..b051a98 100644
--- a/doc/src/snippets/code/doc_src_emb-pointer.qdoc
+++ b/doc/src/snippets/code/doc_src_emb-pointer.qdoc
@@ -104,6 +104,10 @@ QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mouse0
//! [11]
+//! [show permissions]
+ls -l /dev/input/mouse0
+//! [show permissions]
+
//! [12]
chmod a+rw /dev/input/mouse0
//! [12]
diff --git a/doc/src/snippets/code/doc_src_fdl.qdoc b/doc/src/snippets/code/doc_src_fdl.qdoc
index 3c15dfe..b55e663 100644
--- a/doc/src/snippets/code/doc_src_fdl.qdoc
+++ b/doc/src/snippets/code/doc_src_fdl.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc
index 0593567..bd23462 100644
--- a/doc/src/snippets/code/doc_src_installation.qdoc
+++ b/doc/src/snippets/code/doc_src_installation.qdoc
@@ -250,12 +250,12 @@ export PATH
//! [38]
cd /home/user/qt/%VERSION%
-./configure -platform linux-g++ -xplatform symbian/linux-armcc
+./configure -platform linux-g++ -xplatform symbian-armcc
//! [38]
//! [39]
cd /home/user/qt/%VERSION%
-./configure -platform linux-g++ -xplatform symbian/linux-gcce -no-webkit
+./configure -platform linux-g++ -xplatform symbian-gcce -no-webkit
//! [39]
//! [40]
@@ -301,11 +301,24 @@ make
runonphone -s lib/Qt.sis
//! [47]
+//! [runonphone with device file path]
+runonphone -s lib/Qt.sis -p /dev/ttyUSB1
+//! [runonphone with device file path]
+
//! [48]
cd demos/embedded/fluidlauncher
runonphone -s fluidlauncher.sis fluidlauncher.exe
//! [48]
+//! [make runonphone with options]
+make runonphone "QT_RUN_ON_PHONE_OPTIONS=-p /dev/ttyUSB1"
+//! [make runonphone with options]
+
+//! [make runonphone with preset environment variable]
+export QT_RUN_ON_PHONE_OPTIONS="-p /dev/ttyUSB1"
+make runonphone
+//! [make runonphone with preset environment variable]
+
//! [49]
cd myapp
qmake
diff --git a/doc/src/snippets/code/doc_src_linguist-manual.qdoc b/doc/src/snippets/code/doc_src_linguist-manual.qdoc
index db99120..294afe0 100644
--- a/doc/src/snippets/code/doc_src_linguist-manual.qdoc
+++ b/doc/src/snippets/code/doc_src_linguist-manual.qdoc
@@ -92,8 +92,15 @@ Options:
Usage:
lrelease [options] project-file
lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt's Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the 'compiled' QM format used by QTranslator objects.
+
Options:
-help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
-compress
Compress the QM files
-nounfinished
@@ -101,6 +108,9 @@ Options:
-removeidentical
If the translated text is the same as
the source text, do not include the message
+ -markuntranslated <prefix>
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
-silent
Do not explain what is being done
-version
diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
index 4f74e9c..ab67a3d 100644
--- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc
+++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
@@ -193,15 +193,15 @@ DEFINES += USE_MY_STUFF QT_DLL
//! [28]
-myFiles.sources = path\*.png
+myFiles.files = path\*.png
DEPLOYMENT += myFiles
//! [28]
//! [29]
-myFiles.sources = path\file1.ext1 path2\file2.ext1 path3\*
+myFiles.files = path\file1.ext1 path2\file2.ext1 path3\*
myFiles.path = \some\path\on\device
-someother.sources = C:\additional\files\*
+someother.files = C:\additional\files\*
someother.path = \myFiles\path2
DEPLOYMENT += myFiles someother
//! [29]
@@ -849,12 +849,12 @@ CONFIG(debug, debug|release) {
//! [127]
//! [128]
-customplugin.sources = customimageplugin.dll
-customplugin.sources += c:\myplugins\othercustomimageplugin.dll
+customplugin.files = customimageplugin.dll
+customplugin.files += c:\myplugins\othercustomimageplugin.dll
customplugin.path = imageformats
-dynamiclibrary.sources = mylib.dll helper.exe
+dynamiclibrary.files = mylib.dll helper.exe
dynamiclibrary.path = \sys\bin
-globalplugin.sources = someglobalimageplugin.dll
+globalplugin.files = someglobalimageplugin.dll
globalplugin.path = \resource\qt\plugins\imageformats
DEPLOYMENT += customplugin dynamiclibrary globalplugin
//! [128]
@@ -923,7 +923,7 @@ MMP_RULES += myIfdefBlock
//! [139]
//! [140]
-somelib.sources = somelib.dll
+somelib.files = somelib.dll
somelib.path = \sys\bin
somelib.pkg_prerules = "(0x12345678), 2, 2, 0, {\"Some Package\"}" \
"(0x87654321), 1, *, * ~ 2, 2, 0, {\"Some Other Package\"}"
@@ -1021,7 +1021,7 @@ DEPLOYMENT -= default_bin_deployment default_resource_deployment default_reg_dep
//! [155]
default_bin_deployment.flags += FILERUN RUNINSTALL
-dep_note.sources = install_note.txt
+dep_note.files = install_note.txt
dep_note.flags = FILETEXT TEXTEXIT
DEPLOYMENT += dep_note
//! [155]
diff --git a/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp b/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
index 59e6ae0..07ff2a0 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
@@ -86,3 +86,38 @@ beginMoveRows(parent, 2, 2, parent, 0);
//! [9]
beginMoveRows(parent, 2, 2, parent, 4);
//! [9]
+
+
+//! [10]
+class CustomDataProxy : public QSortFilterProxyModel
+{
+ Q_OBJECT
+public:
+ CustomDataProxy(QObject *parent)
+ : QSortFilterProxyModel(parent)
+ {
+ }
+
+ ...
+
+ QVariant data(const QModelIndex &index, int role)
+ {
+ if (role != Qt::BackgroundRole)
+ return QSortFilterProxyModel::data(index, role);
+
+ if (m_customData.contains(index.row()))
+ return m_customData.value(index.row());
+ return QSortFilterProxyModel::data(index, role);
+ }
+
+private slots:
+ void resetInternalData()
+ {
+ m_customData.clear();
+ }
+
+private:
+ QHash<int, QVariant> m_customData;
+};
+//! [10]
+
diff --git a/doc/src/snippets/code/src_qtestlib_qtestcase.cpp b/doc/src/snippets/code/src_qtestlib_qtestcase.cpp
index c9bda61..adb0c34 100644
--- a/doc/src/snippets/code/src_qtestlib_qtestcase.cpp
+++ b/doc/src/snippets/code/src_qtestlib_qtestcase.cpp
@@ -48,7 +48,7 @@ QVERIFY(1 + 1 == 2);
//! [1]
-QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occured.");
+QVERIFY2(1 + 1 == 2, "A breach in basic arithmetic occurred.");
//! [1]
@@ -230,5 +230,21 @@ widget.show();
QTest::qWaitForWindowShown(&widget);
//! [24]
+//! [25]
+QWidget widget;
+
+QTest::touchEvent(&widget)
+ .press(0, QPoint(10, 10));
+QTest::touchEvent(&widget)
+ .stationary(0)
+ .press(1, QPoint(40, 10));
+QTest::touchEvent(&widget)
+ .move(0, QPoint(12, 12))
+ .move(1, QPoint(45, 5));
+QTest::touchEvent(&widget)
+ .release(0)
+ .release(1);
+//! [25]
+
}
diff --git a/doc/src/snippets/declarative/borderimage/borderimage-defaults.qml b/doc/src/snippets/declarative/borderimage/borderimage-defaults.qml
new file mode 100644
index 0000000..1888f4e
--- /dev/null
+++ b/doc/src/snippets/declarative/borderimage/borderimage-defaults.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: page
+ color: "white"
+ width: 180; height: 180
+
+//! [tiled border image]
+BorderImage {
+ width: 180; height: 180
+ border { left: 30; top: 30; right: 30; bottom: 30 }
+ source: "pics/borderframe.png"
+}
+//! [tiled border image]
+}
diff --git a/doc/src/snippets/declarative/flipable/flipable.qml b/doc/src/snippets/declarative/flipable/flipable.qml
index cd5da4b..8d48bd9 100644
--- a/doc/src/snippets/declarative/flipable/flipable.qml
+++ b/doc/src/snippets/declarative/flipable/flipable.qml
@@ -46,26 +46,27 @@ Flipable {
width: 240
height: 240
- property int angle: 0
property bool flipped: false
- front: Image { source: "front.png" }
- back: Image { source: "back.png" }
+ front: Image { source: "front.png"; anchors.centerIn: parent }
+ back: Image { source: "back.png"; anchors.centerIn: parent }
transform: Rotation {
- origin.x: flipable.width/2; origin.y: flipable.height/2
- axis.x: 0; axis.y: 1; axis.z: 0 // rotate around y-axis
- angle: flipable.angle
+ id: rotation
+ origin.x: flipable.width/2
+ origin.y: flipable.height/2
+ axis.x: 0; axis.y: 1; axis.z: 0 // set axis.y to 1 to rotate around y-axis
+ angle: 0 // the default angle
}
states: State {
name: "back"
- PropertyChanges { target: flipable; angle: 180 }
+ PropertyChanges { target: rotation; angle: 180 }
when: flipable.flipped
}
transitions: Transition {
- NumberAnimation { properties: "angle"; duration: 1000 }
+ NumberAnimation { target: rotation; property: "angle"; duration: 4000 }
}
MouseArea {
diff --git a/doc/src/snippets/declarative/keys/keys-handler.qml b/doc/src/snippets/declarative/keys/keys-handler.qml
new file mode 100644
index 0000000..be0eedb
--- /dev/null
+++ b/doc/src/snippets/declarative/keys/keys-handler.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Item {
+ width: 400; height: 400
+
+//! [key item]
+Item {
+ anchors.fill: parent
+ focus: true
+ Keys.onLeftPressed: console.log("move left")
+}
+//! [key item]
+
+Text {
+ anchors.fill: parent
+ text: "Press a cursor key"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
+}
diff --git a/doc/src/snippets/declarative/keys/keys-pressed.qml b/doc/src/snippets/declarative/keys/keys-pressed.qml
new file mode 100644
index 0000000..90a4e37
--- /dev/null
+++ b/doc/src/snippets/declarative/keys/keys-pressed.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Item {
+ width: 400; height: 400
+
+//! [key item]
+Item {
+ anchors.fill: parent
+ focus: true
+ Keys.onPressed: {
+ if (event.key == Qt.Key_Left) {
+ console.log("move left");
+ event.accepted = true;
+ }
+ }
+}
+//! [key item]
+
+Text {
+ anchors.fill: parent
+ text: "Press a cursor key"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+}
+}
diff --git a/doc/src/snippets/declarative/loader/sizeitem.qml b/doc/src/snippets/declarative/loader/sizeitem.qml
new file mode 100644
index 0000000..6ace8d6
--- /dev/null
+++ b/doc/src/snippets/declarative/loader/sizeitem.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+//![0]
+import QtQuick 1.0
+
+Item {
+ width: 200; height: 200
+
+ Loader {
+ // position the Loader in the center of the parent
+ anchors.centerIn: parent
+ sourceComponent: rect
+ }
+
+ Component {
+ id: rect
+ Rectangle {
+ width: 50
+ height: 50
+ color: "red"
+ }
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/loader/sizeloader.qml b/doc/src/snippets/declarative/loader/sizeloader.qml
new file mode 100644
index 0000000..eac7d57
--- /dev/null
+++ b/doc/src/snippets/declarative/loader/sizeloader.qml
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+//![0]
+import QtQuick 1.0
+
+Item {
+ width: 200; height: 200
+
+ Loader {
+ // Explicitly set the size of the Loader to the parent item's size
+ anchors.fill: parent
+ sourceComponent: rect
+ }
+
+ Component {
+ id: rect
+ Rectangle {
+ width: 50
+ height: 50
+ color: "red"
+ }
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/context-advanced/MyItem.qml b/doc/src/snippets/declarative/qtbinding/context-advanced/MyItem.qml
new file mode 100644
index 0000000..607651a
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context-advanced/MyItem.qml
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Text { text: applicationData.getCurrentDateTime() }
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/context-advanced/applicationdata.h b/doc/src/snippets/declarative/qtbinding/context-advanced/applicationdata.h
new file mode 100644
index 0000000..930e381
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context-advanced/applicationdata.h
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QObject>
+#include <QDateTime>
+
+//![0]
+class ApplicationData : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE QDateTime getCurrentDateTime() const {
+ return QDateTime::currentDateTime();
+ }
+};
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/context-advanced/connections.qml b/doc/src/snippets/declarative/qtbinding/context-advanced/connections.qml
new file mode 100644
index 0000000..749bea3
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context-advanced/connections.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import QtQuick 1.0
+
+//![0]
+Text {
+ text: applicationData.getCurrentDateTime()
+
+ Connections {
+ target: applicationData
+ onDataChanged: console.log("The application data changed!")
+ }
+}
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/context-advanced/context-advanced.pro b/doc/src/snippets/declarative/qtbinding/context-advanced/context-advanced.pro
new file mode 100644
index 0000000..188a9fb
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context-advanced/context-advanced.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += applicationdata.h
diff --git a/doc/src/snippets/declarative/qtbinding/context-advanced/main.cpp b/doc/src/snippets/declarative/qtbinding/context-advanced/main.cpp
new file mode 100644
index 0000000..b92215b
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context-advanced/main.cpp
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "applicationdata.h"
+
+//![0]
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+
+ QDeclarativeView view;
+
+ ApplicationData data;
+ view.rootContext()->setContextProperty("applicationData", &data);
+
+ view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+ view.show();
+
+ return app.exec();
+}
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/context/MyItem.qml b/doc/src/snippets/declarative/qtbinding/context/MyItem.qml
new file mode 100644
index 0000000..faa42dc
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context/MyItem.qml
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Text { text: currentDateTime }
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/contextproperties/contextproperties.pro b/doc/src/snippets/declarative/qtbinding/context/context.pro
index 68eeaf2..68eeaf2 100644
--- a/doc/src/snippets/declarative/qtbinding/contextproperties/contextproperties.pro
+++ b/doc/src/snippets/declarative/qtbinding/context/context.pro
diff --git a/doc/src/snippets/declarative/qtbinding/context/main.cpp b/doc/src/snippets/declarative/qtbinding/context/main.cpp
new file mode 100644
index 0000000..bbe9956
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/context/main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+//![0]
+QDeclarativeView view;
+view.rootContext()->setContextProperty("currentDateTime", QDateTime::currentDateTime());
+view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+view.show();
+//![0]
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp b/doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp
deleted file mode 100644
index 6887e8f..0000000
--- a/doc/src/snippets/declarative/qtbinding/contextproperties/main.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QDeclarativeComponent>
-#include <QDeclarativeEngine>
-
-//![0]
-#include <QApplication>
-#include <QDeclarativeView>
-#include <QDeclarativeContext>
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QDeclarativeView view;
- QDeclarativeContext *context = view.rootContext();
- context->setContextProperty("backgroundColor",
- QColor(Qt::yellow));
-
- view.setSource(QUrl::fromLocalFile("main.qml"));
- view.show();
-
- return app.exec();
-}
-//![0]
-
-static void alternative()
-{
- // Alternatively, if we don't actually want to display main.qml:
-//![1]
- QDeclarativeEngine engine;
- QDeclarativeContext *windowContext = new QDeclarativeContext(engine.rootContext());
- windowContext->setContextProperty("backgroundColor", QColor(Qt::yellow));
-
- QDeclarativeComponent component(&engine, "main.qml");
- QObject *window = component.create(windowContext);
-//![1]
-}
-
-
diff --git a/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml b/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml
deleted file mode 100644
index 425346d..0000000
--- a/doc/src/snippets/declarative/qtbinding/contextproperties/main.qml
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![0]
-import QtQuick 1.0
-
-Rectangle {
- width: 300
- height: 300
-
- color: backgroundColor
-
- Text {
- anchors.centerIn: parent
- text: "Hello Yellow World!"
- }
-}
-//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.h b/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.h
deleted file mode 100644
index 7e84bd4..0000000
--- a/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QObject>
-#include <QColor>
-
-//![0]
-class CustomPalette : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QColor background READ background WRITE setBackground NOTIFY backgroundChanged)
- Q_PROPERTY(QColor text READ text WRITE setText NOTIFY textChanged)
-
-public:
- CustomPalette() : m_background(Qt::white), m_text(Qt::black) {}
-
- QColor background() const { return m_background; }
- void setBackground(const QColor &c) {
- if (c != m_background) {
- m_background = c;
- emit backgroundChanged();
- }
- }
-
- QColor text() const { return m_text; }
- void setText(const QColor &c) {
- if (c != m_text) {
- m_text = c;
- emit textChanged();
- }
- }
-
-signals:
- void textChanged();
- void backgroundChanged();
-
-private:
- QColor m_background;
- QColor m_text;
-};
-
-//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.pro b/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.pro
deleted file mode 100644
index e6af0d0..0000000
--- a/doc/src/snippets/declarative/qtbinding/custompalette/custompalette.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-QT += declarative
-HEADERS += custompalette.h
-SOURCES += main.cpp
diff --git a/doc/src/snippets/declarative/qtbinding/custompalette/main.cpp b/doc/src/snippets/declarative/qtbinding/custompalette/main.cpp
deleted file mode 100644
index 7481b75..0000000
--- a/doc/src/snippets/declarative/qtbinding/custompalette/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QDeclarativeView>
-#include <QDeclarativeContext>
-
-#include "custompalette.h"
-
-//![0]
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QDeclarativeView view;
- view.rootContext()->setContextProperty("palette", new CustomPalette);
-
- view.setSource(QUrl::fromLocalFile("main.qml"));
- view.show();
-
- return app.exec();
-}
-//![0]
-
diff --git a/doc/src/snippets/declarative/qtbinding/custompalette/main.qml b/doc/src/snippets/declarative/qtbinding/custompalette/main.qml
deleted file mode 100644
index a20d9e0..0000000
--- a/doc/src/snippets/declarative/qtbinding/custompalette/main.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![0]
-import QtQuick 1.0
-
-Rectangle {
- width: 240
- height: 320
- color: palette.background
-
- Text {
- anchors.centerIn: parent
- color: palette.text
- text: "Click me to change color!"
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- palette.text = "blue";
- }
- }
-}
-//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/enums/enums.pro b/doc/src/snippets/declarative/qtbinding/enums/enums.pro
new file mode 100644
index 0000000..82bc123
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/enums/enums.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += imageviewer.h
diff --git a/doc/src/snippets/declarative/qtbinding/enums/imageviewer.h b/doc/src/snippets/declarative/qtbinding/enums/imageviewer.h
new file mode 100644
index 0000000..8aaddee
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/enums/imageviewer.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+//![start]
+class ImageViewer : public QDeclarativeItem
+{
+ Q_OBJECT
+ Q_ENUMS(Status)
+ Q_PROPERTY(Status status READ status NOTIFY statusChanged)
+public:
+ enum Status {
+ Ready,
+ Loading,
+ Error
+ };
+
+ Status status() const;
+//![start]
+
+ ImageViewer(QDeclarativeItem *parent = 0);
+
+public slots:
+ void emitSignals();
+
+//![end]
+signals:
+ void statusChanged();
+};
+//![end]
diff --git a/doc/src/snippets/declarative/qtbinding/enums/main.cpp b/doc/src/snippets/declarative/qtbinding/enums/main.cpp
new file mode 100644
index 0000000..9243f4b
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/enums/main.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "imageviewer.h"
+
+ImageViewer::ImageViewer(QDeclarativeItem *parent)
+ : QDeclarativeItem(parent)
+{
+ QTimer::singleShot(0, this, SLOT(emitSignals()));
+}
+
+ImageViewer::Status ImageViewer::status() const
+{
+ return Ready;
+}
+
+void ImageViewer::emitSignals()
+{
+ emit statusChanged();
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ qmlRegisterType<ImageViewer>("MyLibrary", 1, 0, "ImageViewer");
+
+ QDeclarativeView view;
+ view.setSource(QUrl::fromLocalFile("standalone.qml"));
+ view.show();
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/enums/standalone.qml b/doc/src/snippets/declarative/qtbinding/enums/standalone.qml
new file mode 100644
index 0000000..ad6c14c
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/enums/standalone.qml
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import MyLibrary 1.0
+
+//![0]
+ImageViewer {
+ onStatusChanged: {
+ if (status == ImageViewer.Ready)
+ console.log("Image viewer is ready!")
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/functions-cpp/MyItem.qml b/doc/src/snippets/declarative/qtbinding/functions-cpp/MyItem.qml
new file mode 100644
index 0000000..8d8cd56
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-cpp/MyItem.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Item {
+ width: 100; height: 100
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ myObject.cppMethod("Hello from QML")
+ myObject.cppSlot(12345)
+ }
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/functions-cpp/functions-qml.pro b/doc/src/snippets/declarative/qtbinding/functions-cpp/functions-qml.pro
new file mode 100644
index 0000000..01066c1
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-cpp/functions-qml.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += myclass.h
diff --git a/doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp b/doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp
new file mode 100644
index 0000000..91d6aec
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-cpp/main.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "myclass.h"
+
+//![0]
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+
+ QDeclarativeView view;
+ MyClass myClass;
+ view.rootContext()->setContextProperty("myObject", &myClass);
+
+ view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+ view.show();
+
+ return app.exec();
+}
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/functions-cpp/myclass.h b/doc/src/snippets/declarative/qtbinding/functions-cpp/myclass.h
new file mode 100644
index 0000000..76c628e
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-cpp/myclass.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QObject>
+#include <QDebug>
+
+//![0]
+class MyClass : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE void cppMethod(const QString &msg) {
+ qDebug() << "Called the C++ method with" << msg;
+ }
+
+public slots:
+ void cppSlot(int number) {
+ qDebug() << "Called the C++ slot with" << number;
+ }
+};
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/functions-qml/MyItem.qml b/doc/src/snippets/declarative/qtbinding/functions-qml/MyItem.qml
new file mode 100644
index 0000000..6161d6e
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-qml/MyItem.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Item {
+ function myQmlFunction(msg) {
+ console.log("Got message:", msg)
+ return "some return value"
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/functions-qml/functions-qml.pro b/doc/src/snippets/declarative/qtbinding/functions-qml/functions-qml.pro
new file mode 100644
index 0000000..68eeaf2
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-qml/functions-qml.pro
@@ -0,0 +1,2 @@
+QT += declarative
+SOURCES += main.cpp
diff --git a/doc/src/snippets/declarative/qtbinding/functions-qml/main.cpp b/doc/src/snippets/declarative/qtbinding/functions-qml/main.cpp
new file mode 100644
index 0000000..3e9e51e
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/functions-qml/main.cpp
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+//![0]
+// main.cpp
+QDeclarativeEngine engine;
+QDeclarativeComponent component(&engine, "MyItem.qml");
+QObject *object = component.create();
+
+QVariant returnedValue;
+QVariant msg = "Hello from C++";
+QMetaObject::invokeMethod(object, "myQmlFunction",
+ Q_RETURN_ARG(QVariant, returnedValue),
+ Q_ARG(QVariant, msg));
+
+qDebug() << "QML function returned:" << returnedValue.toString();
+delete object;
+//![0]
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/loading/MyItem.qml b/doc/src/snippets/declarative/qtbinding/loading/MyItem.qml
new file mode 100644
index 0000000..40138f6
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/loading/MyItem.qml
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![start]
+import QtQuick 1.0
+
+Item {
+ width: 100; height: 100
+//![start]
+
+//![child]
+ Rectangle {
+ anchors.fill: parent
+ objectName: "rect"
+ }
+//![child]
+
+//![end]
+}
+//![end]
diff --git a/doc/src/snippets/declarative/qtbinding/loading/loading.pro b/doc/src/snippets/declarative/qtbinding/loading/loading.pro
new file mode 100644
index 0000000..68eeaf2
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/loading/loading.pro
@@ -0,0 +1,2 @@
+QT += declarative
+SOURCES += main.cpp
diff --git a/doc/src/snippets/declarative/qtbinding/loading/main.cpp b/doc/src/snippets/declarative/qtbinding/loading/main.cpp
new file mode 100644
index 0000000..bd400b0
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/loading/main.cpp
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+static void withComponent()
+{
+//![QDeclarativeComponent-a]
+// Using QDeclarativeComponent
+QDeclarativeEngine engine;
+QDeclarativeComponent component(&engine,
+ QUrl::fromLocalFile("MyItem.qml"));
+QObject *object = component.create();
+//![QDeclarativeComponent-a]
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+//![QDeclarativeView]
+// Using QDeclarativeView
+QDeclarativeView view;
+view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+view.show();
+QObject *object = view.rootObject();
+//![QDeclarativeView]
+
+//![properties]
+object->setProperty("width", 500);
+QDeclarativeProperty(object, "width").write(500);
+//![properties]
+
+//![cast]
+QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(object);
+item->setWidth(500);
+//![cast]
+
+//![findChild]
+QObject *rect = object->findChild<QObject*>("rect");
+if (rect)
+ rect->setProperty("color", "red");
+//![findChild]
+
+//![QDeclarativeComponent-b]
+delete object;
+//![QDeclarativeComponent-b]
+
+withComponent();
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h b/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h
new file mode 100644
index 0000000..fd9db5e
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/newelements/imageviewer.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+//![0]
+class ImageViewer : public QDeclarativeItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QUrl image READ image WRITE setImage NOTIFY imageChanged)
+
+public:
+ void setImage(const QUrl &url);
+ QUrl image() const;
+
+signals:
+ void imageChanged();
+};
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/newelements/main.cpp b/doc/src/snippets/declarative/qtbinding/newelements/main.cpp
new file mode 100644
index 0000000..57994ca
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/newelements/main.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "imageviewer.h"
+
+void ImageViewer::setImage(const QUrl &url) {}
+QUrl ImageViewer::image() const { return QUrl(); }
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ //![register]
+ qmlRegisterType<ImageViewer>("MyLibrary", 1, 0, "ImageViewer");
+ //![register]
+
+ QDeclarativeView view;
+ view.setSource(QUrl::fromLocalFile("standalone.qml"));
+ view.show();
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/newelements/newelements.pro b/doc/src/snippets/declarative/qtbinding/newelements/newelements.pro
new file mode 100644
index 0000000..82bc123
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/newelements/newelements.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += imageviewer.h
diff --git a/doc/src/snippets/declarative/qtbinding/newelements/standalone.qml b/doc/src/snippets/declarative/qtbinding/newelements/standalone.qml
new file mode 100644
index 0000000..7345f21
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/newelements/standalone.qml
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+import MyLibrary 1.0
+
+ImageViewer { image: "smile.png" }
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/properties-cpp/MyItem.qml b/doc/src/snippets/declarative/qtbinding/properties-cpp/MyItem.qml
new file mode 100644
index 0000000..9db4b93
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-cpp/MyItem.qml
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Rectangle {
+ width: 100; height: 100
+ color: applicationData.backgroundColor
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: applicationData.backgroundColor = "red"
+ }
+}
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/properties-cpp/applicationdata.h b/doc/src/snippets/declarative/qtbinding/properties-cpp/applicationdata.h
new file mode 100644
index 0000000..763a451
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-cpp/applicationdata.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QObject>
+#include <QColor>
+
+//![0]
+class ApplicationData : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor backgroundColor
+ READ backgroundColor
+ WRITE setBackgroundColor
+ NOTIFY backgroundColorChanged)
+
+public:
+ void setBackgroundColor(const QColor &c) {
+ if (c != m_color) {
+ m_color = c;
+ emit backgroundColorChanged();
+ }
+ }
+
+ QColor backgroundColor() const {
+ return m_color;
+ }
+
+signals:
+ void backgroundColorChanged();
+
+private:
+ QColor m_color;
+};
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/properties-cpp/main.cpp b/doc/src/snippets/declarative/qtbinding/properties-cpp/main.cpp
new file mode 100644
index 0000000..36b508d
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-cpp/main.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "applicationdata.h"
+
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+
+ QDeclarativeView view;
+
+ ApplicationData data;
+ view.rootContext()->setContextProperty("applicationData", &data);
+
+ view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+ view.show();
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/properties-cpp/properties-cpp.pro b/doc/src/snippets/declarative/qtbinding/properties-cpp/properties-cpp.pro
new file mode 100644
index 0000000..188a9fb
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-cpp/properties-cpp.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += applicationdata.h
diff --git a/doc/src/snippets/declarative/qtbinding/properties-qml/MyItem.qml b/doc/src/snippets/declarative/qtbinding/properties-qml/MyItem.qml
new file mode 100644
index 0000000..a43ded8
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-qml/MyItem.qml
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Item {
+ property int someNumber: 100
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/properties-qml/main.cpp b/doc/src/snippets/declarative/qtbinding/properties-qml/main.cpp
new file mode 100644
index 0000000..d8daff8
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-qml/main.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+//![0]
+QDeclarativeEngine engine;
+QDeclarativeComponent component(&engine, "MyItem.qml");
+QObject *object = component.create();
+
+qDebug() << "Property value:" << QDeclarativeProperty::read(object, "someNumber").toInt();
+QDeclarativeProperty::write(object, "someNumber", 5000);
+
+qDebug() << "Property value:" << object->property("someNumber").toInt();
+object->setProperty("someNumber", 100);
+//![0]
+
+ return app.exec();
+}
+
diff --git a/doc/src/snippets/declarative/qtbinding/properties-qml/properties-qml.pro b/doc/src/snippets/declarative/qtbinding/properties-qml/properties-qml.pro
new file mode 100644
index 0000000..68eeaf2
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/properties-qml/properties-qml.pro
@@ -0,0 +1,2 @@
+QT += declarative
+SOURCES += main.cpp
diff --git a/doc/src/snippets/declarative/qtbinding/resources/main.qml b/doc/src/snippets/declarative/qtbinding/resources/main.qml
index 644d963..43029cf 100644
--- a/doc/src/snippets/declarative/qtbinding/resources/main.qml
+++ b/doc/src/snippets/declarative/qtbinding/resources/main.qml
@@ -39,9 +39,8 @@
****************************************************************************/
//![0]
+// main.qml
import QtQuick 1.0
-Image {
- source: "images/background.png"
-}
+Image { source: "images/background.png" }
//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml b/doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml
new file mode 100644
index 0000000..d900830
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Item {
+ Connections {
+ target: imageViewer
+ onImageChanged: console.log("Image has changed!")
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h b/doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h
new file mode 100644
index 0000000..7288d11
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-cpp/imageviewer.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+//![start]
+class ImageViewer : public QDeclarativeItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QUrl image READ image WRITE setImage NOTIFY imageChanged)
+public:
+//![start]
+ ImageViewer(QDeclarativeItem *item = 0);
+
+ void setImage(const QUrl &url) {}
+ QUrl image() const { return QUrl(); }
+
+public slots:
+ void emitSignals();
+
+//![end]
+signals:
+ void imageChanged();
+ void loadingError(const QString &errorMsg);
+};
+//![end]
+
diff --git a/doc/src/snippets/declarative/qtbinding/signals-cpp/main.cpp b/doc/src/snippets/declarative/qtbinding/signals-cpp/main.cpp
new file mode 100644
index 0000000..e5dd33c
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-cpp/main.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+#include "imageviewer.h"
+
+
+ImageViewer::ImageViewer(QDeclarativeItem *item)
+ : QDeclarativeItem(item)
+{
+ QTimer::singleShot(0, this, SLOT(emitSignals()));
+}
+
+void ImageViewer::emitSignals()
+{
+ emit imageChanged();
+ emit loadingError("some error message");
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ qmlRegisterType<ImageViewer>("MyLibrary", 1, 0, "ImageViewer");
+
+ QDeclarativeView standalone;
+ standalone.setSource(QUrl::fromLocalFile("standalone.qml"));
+ standalone.show();
+
+//![connections]
+ImageViewer viewer;
+
+QDeclarativeView view;
+view.rootContext()->setContextProperty("imageViewer", &viewer);
+
+view.setSource(QUrl::fromLocalFile("MyItem.qml"));
+view.show();
+//![connections]
+
+ return app.exec();
+}
+
+
diff --git a/doc/src/snippets/declarative/qtbinding/signals-cpp/signals-cpp.pro b/doc/src/snippets/declarative/qtbinding/signals-cpp/signals-cpp.pro
new file mode 100644
index 0000000..9aa8702
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-cpp/signals-cpp.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += "imageviewer.h"
diff --git a/doc/src/snippets/declarative/qtbinding/signals-cpp/standalone.qml b/doc/src/snippets/declarative/qtbinding/signals-cpp/standalone.qml
new file mode 100644
index 0000000..4027b19
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-cpp/standalone.qml
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+import MyLibrary 1.0
+
+//![0]
+ImageViewer {
+ onImageChanged: console.log("Image changed!")
+ onLoadingError: console.log("Image failed to load:", errorMsg)
+}
+//![0]
+
diff --git a/doc/src/snippets/declarative/qtbinding/signals-qml/MyItem.qml b/doc/src/snippets/declarative/qtbinding/signals-qml/MyItem.qml
new file mode 100644
index 0000000..e4b6ced
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-qml/MyItem.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+//![0]
+// MyItem.qml
+import QtQuick 1.0
+
+Item {
+ id: item
+ width: 100; height: 100
+
+ signal qmlSignal(string msg)
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: item.qmlSignal("Hello from QML")
+ }
+}
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/signals-qml/main.cpp b/doc/src/snippets/declarative/qtbinding/signals-qml/main.cpp
new file mode 100644
index 0000000..f1d03c4
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-qml/main.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+#include <QtDeclarative>
+
+//![0]
+int main(int argc, char *argv[]) {
+ QApplication app(argc, argv);
+
+ QDeclarativeView view(QUrl::fromLocalFile("MyItem.qml"));
+ QObject *item = view.rootObject();
+
+ MyClass myClass;
+ QObject::connect(item, SIGNAL(qmlSignal(QString)),
+ &myClass, SLOT(cppSlot(QString)));
+
+ view.show();
+ return app.exec();
+}
+//![0]
+
+#include "moc_main.cpp"
diff --git a/doc/src/snippets/declarative/qtbinding/signals-qml/myclass.h b/doc/src/snippets/declarative/qtbinding/signals-qml/myclass.h
new file mode 100644
index 0000000..c326a54
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-qml/myclass.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QObject>
+#include <QDebug>
+//![0]
+class MyClass : public QObject
+{
+ Q_OBJECT
+public slots:
+ void cppSlot(const QString &msg) {
+ qDebug() << "Called the C++ slot with message:" << msg;
+ }
+};
+//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/signals-qml/signals-qml.pro b/doc/src/snippets/declarative/qtbinding/signals-qml/signals-qml.pro
new file mode 100644
index 0000000..01066c1
--- /dev/null
+++ b/doc/src/snippets/declarative/qtbinding/signals-qml/signals-qml.pro
@@ -0,0 +1,3 @@
+QT += declarative
+SOURCES += main.cpp
+HEADERS += myclass.h
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/main.cpp b/doc/src/snippets/declarative/qtbinding/stopwatch/main.cpp
deleted file mode 100644
index 12481da..0000000
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/main.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "stopwatch.h"
-
-#include <QDeclarativeView>
-#include <QDeclarativeContext>
-#include <QApplication>
-
-//![0]
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QDeclarativeView view;
- view.rootContext()->setContextProperty("stopwatch",
- new Stopwatch);
-
- view.setSource(QUrl::fromLocalFile("main.qml"));
- view.show();
-
- return app.exec();
-}
-//![0]
-
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml b/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml
deleted file mode 100644
index f894f71..0000000
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/main.qml
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//![0]
-import QtQuick 1.0
-
-Rectangle {
- width: 300
- height: 300
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (stopwatch.isRunning())
- stopwatch.stop()
- else
- stopwatch.start();
- }
- }
-}
-//![0]
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.cpp b/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.cpp
deleted file mode 100644
index 124422f..0000000
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "stopwatch.h"
-
-Stopwatch::Stopwatch()
- : m_running(false)
-{
-}
-
-bool Stopwatch::isRunning() const
-{
- return m_running;
-}
-
-void Stopwatch::start()
-{
- m_running = true;
-}
-
-void Stopwatch::stop()
-{
- m_running = false;
-}
-
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.h b/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.h
deleted file mode 100644
index fd65916..0000000
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
-** the names of its contributors may be used to endorse or promote
-** products derived from this software without specific prior written
-** permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QObject>
-
-//![0]
-class Stopwatch : public QObject
-{
- Q_OBJECT
-public:
- Stopwatch();
-
- Q_INVOKABLE bool isRunning() const;
-
-public slots:
- void start();
- void stop();
-
-private:
- bool m_running;
-};
-
-//![0]
-
diff --git a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.pro b/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.pro
deleted file mode 100644
index d803e6a..0000000
--- a/doc/src/snippets/declarative/qtbinding/stopwatch/stopwatch.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-QT += declarative
-HEADERS += stopwatch.h
-SOURCES += main.cpp stopwatch.cpp
diff --git a/doc/src/snippets/sqldatabase/sqldatabase.cpp b/doc/src/snippets/sqldatabase/sqldatabase.cpp
index abe2a67..a027a84 100644
--- a/doc/src/snippets/sqldatabase/sqldatabase.cpp
+++ b/doc/src/snippets/sqldatabase/sqldatabase.cpp
@@ -280,7 +280,7 @@ QVariant MyModel::data(const QModelIndex &item, int role) const
void QSqlTableModel_snippets()
{
//! [24]
- QSqlTableModel *model = new QSqlTableModel;
+ QSqlTableModel *model = new QSqlTableModel(parentObject, database);
model->setTable("employee");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
diff --git a/doc/src/sql-programming/qsqldatatype-table.qdoc b/doc/src/sql-programming/qsqldatatype-table.qdoc
index 45ee944..3ec2fea 100644
--- a/doc/src/sql-programming/qsqldatatype-table.qdoc
+++ b/doc/src/sql-programming/qsqldatatype-table.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/sql-programming/sql-driver.qdoc b/doc/src/sql-programming/sql-driver.qdoc
index 350777a..9c99ad2 100644
--- a/doc/src/sql-programming/sql-driver.qdoc
+++ b/doc/src/sql-programming/sql-driver.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -153,7 +153,7 @@
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 3
- After installing Qt, as described in the \l{Installing Qt on X11
+ After installing Qt, as described in the \l{Installing Qt for X11
Platforms} document, you also need to install the plugin in the
standard location:
@@ -478,7 +478,7 @@
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 13
- After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document,
+ After installing Qt, as described in the \l{Installing Qt for X11 Platforms} document,
you also need to install the plugin in the standard location:
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 14
@@ -565,7 +565,7 @@
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 18
- After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document,
+ After installing Qt, as described in the \l{Installing Qt for X11 Platforms} document,
you also need to install the plugin in the standard location:
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 19
@@ -638,7 +638,7 @@
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 21
- After installing Qt, as described in the \l{Installing Qt on X11 Platforms} document,
+ After installing Qt, as described in the \l{Installing Qt for X11 Platforms} document,
you also need to install the plugin in the standard location:
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 22
diff --git a/doc/src/sql-programming/sql-programming.qdoc b/doc/src/sql-programming/sql-programming.qdoc
index 35b286c..3624d1e 100644
--- a/doc/src/sql-programming/sql-programming.qdoc
+++ b/doc/src/sql-programming/sql-programming.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/template/scripts/functions.js b/doc/src/template/scripts/functions.js
index 47539d2..62bc535 100755
--- a/doc/src/template/scripts/functions.js
+++ b/doc/src/template/scripts/functions.js
@@ -105,17 +105,17 @@ function processNokiaData(response){
/* start a new list element */
full_li_element = '<li';
/* if the pageType element reads APIPage, add class name api */
- if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage') {
+ if (propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage') {
full_li_element += ' class="api"';
apiCount++;
}
/* if the pageType element reads Article, add class name article */
- else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article') {
+ else if (propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article') {
full_li_element += ' class="article"';
articleCount++;
}
/* if the pageType element reads Example, add class name example */
- else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example') {
+ else if (propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example') {
full_li_element += ' class="example"';
exampleCount++;
}
diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css
index c1e3f61..fbb0752 100644
--- a/doc/src/template/style/narrow.css
+++ b/doc/src/template/style/narrow.css
@@ -223,6 +223,7 @@
float: right;
margin: 15px 40px 0 0;
font-size: 11px;
+ position: relative;
}
.narrow #narrowmenu {
diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css
index c07385c..16bc9ed 100755
--- a/doc/src/template/style/style.css
+++ b/doc/src/template/style/style.css
@@ -101,7 +101,7 @@
}
a
{
- color: #00732f;
+ color: #00732F;
text-decoration: none;
}
hr
@@ -650,7 +650,7 @@
margin-top: 5px;
_margin: 0 0 0 -20px;
padding: 10px;
- width: 220px;
+ width: 30%;
_width: 196px;
height: 250px;
overflow: auto;
@@ -660,12 +660,31 @@
-webkit-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
-moz-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ font-size: 11px;
+ }
+
+ #resultdialog a
+ {
+ color: #00732f;
}
#resultdialog.active {
display: block;
}
+ .narrow #resultdialog {
+ width: 60%;
+ _width: 360px;
+ }
+
+ .narrow #resultdialog.active {
+ right: 10px;
+ *left: auto;
+ _left: auto;
+ _right: -20px;
+ }
+
+
#resultdialog #resultclose {
float: right;
}
@@ -778,6 +797,7 @@
margin-right: 15px;
font-weight: bold;
color: #B0ADAB;
+ font: bold 10px/1.2 Verdana;
}
.toolbuttons #print
@@ -891,7 +911,6 @@
}
.wrap .content h2
{
- border-bottom:1px solid #DDDDDD;
font:600 16px/1.2 Arial;
margin-top:15px;
width:100%;
@@ -925,6 +944,15 @@
color: #4c0033;
text-decoration: underline;
}
+ descr p a
+ {
+ text-decoration: underline;
+ }
+
+ .descr p a:visited
+ {
+ text-decoration: underline;
+ }
.feedback
{
float: none;
@@ -980,9 +1008,9 @@
/*display:inline-block;*/
margin-left:10px;
min-width:250px;
- line-height: 1.2;
+ line-height: 1.5;
min-width:100%;
-
+ min-height:15px;
}
.flowList dd a{
@@ -1269,6 +1297,10 @@
background-color: #E6E7E8;
margin: 0;
}
+ .small
+ {
+ font: normal 9px/1 Verdana;
+ }
/* end footer elements */
@@ -1443,7 +1475,7 @@
}
- .creator .header, .footer, .wrapper
+ .creator .header, .creator .footer, .creator .wrapper
{
max-width: 1500px;
margin: 0px;
@@ -1648,6 +1680,58 @@
}
/* end of creator spec*/
+ .item {
+ float: left;
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+ }
+
+
+ .item .primary {
+ margin-right: 220px;
+ position: relative;
+ }
+
+ .item hr {
+ margin-left: -220px;
+ }
+
+ .item .secondary {
+ float: right;
+ width: 200px;
+ position: relative;
+ }
+
+ .item .cols {
+ clear: both;
+ display: block;
+ }
+
+ .item .cols .col {
+ float: left;
+ margin-left: 1.5%;
+ }
+
+ .item .cols .col.first {
+ margin-left: 0;
+ }
+
+ .item .cols.two .col {
+ width: 45%;
+ }
+
+ .item .box {
+ margin: 0 0 10px 0;
+ }
+
+ .item .box h3 {
+ margin: 0 0 10px 0;
+ }
+
+ .cols.unclear {
+ clear:none;
+ }
}
/* end of screen media */
diff --git a/doc/src/tutorials/addressbook-fr.qdoc b/doc/src/tutorials/addressbook-fr.qdoc
index d40d939..fe27488 100644
--- a/doc/src/tutorials/addressbook-fr.qdoc
+++ b/doc/src/tutorials/addressbook-fr.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/tutorials/addressbook.qdoc b/doc/src/tutorials/addressbook.qdoc
index d39a804..1c71f97 100644
--- a/doc/src/tutorials/addressbook.qdoc
+++ b/doc/src/tutorials/addressbook.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/tutorials/modelview.qdoc b/doc/src/tutorials/modelview.qdoc
index e47fe83..a355e43 100644
--- a/doc/src/tutorials/modelview.qdoc
+++ b/doc/src/tutorials/modelview.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/tutorials/widgets-tutorial.qdoc b/doc/src/tutorials/widgets-tutorial.qdoc
index a708311..df911a5 100644
--- a/doc/src/tutorials/widgets-tutorial.qdoc
+++ b/doc/src/tutorials/widgets-tutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/focus.qdoc b/doc/src/widgets-and-layouts/focus.qdoc
index f1ff2f8..9948782 100644
--- a/doc/src/widgets-and-layouts/focus.qdoc
+++ b/doc/src/widgets-and-layouts/focus.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-cde.qdoc b/doc/src/widgets-and-layouts/gallery-cde.qdoc
index e52f77c..c783399 100644
--- a/doc/src/widgets-and-layouts/gallery-cde.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-cde.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc
index dfc498d..d03adc8 100644
--- a/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-gtk.qdoc b/doc/src/widgets-and-layouts/gallery-gtk.qdoc
index 503c5c5..b3a6372 100644
--- a/doc/src/widgets-and-layouts/gallery-gtk.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-gtk.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-macintosh.qdoc b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc
index 1319ac1..30a78ca 100644
--- a/doc/src/widgets-and-layouts/gallery-macintosh.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-motif.qdoc b/doc/src/widgets-and-layouts/gallery-motif.qdoc
index 455b824..861c22a 100644
--- a/doc/src/widgets-and-layouts/gallery-motif.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-motif.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-plastique.qdoc b/doc/src/widgets-and-layouts/gallery-plastique.qdoc
index cd8e382..0ea62ee 100644
--- a/doc/src/widgets-and-layouts/gallery-plastique.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-plastique.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-windows.qdoc b/doc/src/widgets-and-layouts/gallery-windows.qdoc
index ff4aa99..d3464a0 100644
--- a/doc/src/widgets-and-layouts/gallery-windows.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-windows.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc
index c719409..00afd52 100644
--- a/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc
index 2399114..60c8ff0 100644
--- a/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc
+++ b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/gallery.qdoc b/doc/src/widgets-and-layouts/gallery.qdoc
index 11132fd..201817b 100644
--- a/doc/src/widgets-and-layouts/gallery.qdoc
+++ b/doc/src/widgets-and-layouts/gallery.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/layout.qdoc b/doc/src/widgets-and-layouts/layout.qdoc
index 4db991a..10077f9 100644
--- a/doc/src/widgets-and-layouts/layout.qdoc
+++ b/doc/src/widgets-and-layouts/layout.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/styles.qdoc b/doc/src/widgets-and-layouts/styles.qdoc
index 180260b..cd0b86d 100644
--- a/doc/src/widgets-and-layouts/styles.qdoc
+++ b/doc/src/widgets-and-layouts/styles.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/stylesheet.qdoc b/doc/src/widgets-and-layouts/stylesheet.qdoc
index cc36fa2..6343e6a 100644
--- a/doc/src/widgets-and-layouts/stylesheet.qdoc
+++ b/doc/src/widgets-and-layouts/stylesheet.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/widgets-and-layouts/widgets.qdoc b/doc/src/widgets-and-layouts/widgets.qdoc
index fbce744..6d1d5ee 100644
--- a/doc/src/widgets-and-layouts/widgets.qdoc
+++ b/doc/src/widgets-and-layouts/widgets.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/windows-and-dialogs/dialogs.qdoc b/doc/src/windows-and-dialogs/dialogs.qdoc
index bcf9c0e..fef728f 100644
--- a/doc/src/windows-and-dialogs/dialogs.qdoc
+++ b/doc/src/windows-and-dialogs/dialogs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/windows-and-dialogs/mainwindow.qdoc b/doc/src/windows-and-dialogs/mainwindow.qdoc
index 9d50495..9d3ac30 100644
--- a/doc/src/windows-and-dialogs/mainwindow.qdoc
+++ b/doc/src/windows-and-dialogs/mainwindow.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/xml-processing/xml-patterns.qdoc b/doc/src/xml-processing/xml-patterns.qdoc
index 9f1917d..006b876 100644
--- a/doc/src/xml-processing/xml-patterns.qdoc
+++ b/doc/src/xml-processing/xml-patterns.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/xml-processing/xml-processing.qdoc b/doc/src/xml-processing/xml-processing.qdoc
index dcdd8d1..85f3c7b 100644
--- a/doc/src/xml-processing/xml-processing.qdoc
+++ b/doc/src/xml-processing/xml-processing.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/xml-processing/xquery-introduction.qdoc b/doc/src/xml-processing/xquery-introduction.qdoc
index b5356f7..5f9743a 100644
--- a/doc/src/xml-processing/xquery-introduction.qdoc
+++ b/doc/src/xml-processing/xquery-introduction.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/zh_CN/bughowto.qdoc b/doc/src/zh_CN/bughowto.qdoc
index 05c8403..13f5c70 100644
--- a/doc/src/zh_CN/bughowto.qdoc
+++ b/doc/src/zh_CN/bughowto.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/zh_CN/getting-started/how-to-learn-qt.qdoc b/doc/src/zh_CN/getting-started/how-to-learn-qt.qdoc
index b43b53e..d942ee6 100644
--- a/doc/src/zh_CN/getting-started/how-to-learn-qt.qdoc
+++ b/doc/src/zh_CN/getting-started/how-to-learn-qt.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/zh_CN/getting-started/tutorials.qdoc b/doc/src/zh_CN/getting-started/tutorials.qdoc
index d674175..b9ff7dd 100644
--- a/doc/src/zh_CN/getting-started/tutorials.qdoc
+++ b/doc/src/zh_CN/getting-started/tutorials.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/zh_CN/tutorials/addressbook.qdoc b/doc/src/zh_CN/tutorials/addressbook.qdoc
index c1c9717..cbd02d7 100644
--- a/doc/src/zh_CN/tutorials/addressbook.qdoc
+++ b/doc/src/zh_CN/tutorials/addressbook.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/doc/src/zh_CN/tutorials/widgets-tutorial.qdoc b/doc/src/zh_CN/tutorials/widgets-tutorial.qdoc
index ba4433e..66e6c10 100644
--- a/doc/src/zh_CN/tutorials/widgets-tutorial.qdoc
+++ b/doc/src/zh_CN/tutorials/widgets-tutorial.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/examples/declarative/animation/behaviors/wigglytext.qml b/examples/declarative/animation/behaviors/wigglytext.qml
new file mode 100644
index 0000000..6cd93ab
--- /dev/null
+++ b/examples/declarative/animation/behaviors/wigglytext.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: container
+
+ property string text: "Drag this text..."
+ property bool animated: true
+
+ width: 640; height: 480; color: "#474747"; focus: true
+
+ Keys.onPressed: {
+ if (event.key == Qt.Key_Delete || event.key == Qt.Key_Backspace)
+ container.remove()
+ else if (event.text != "") {
+ container.append(event.text)
+ }
+ }
+
+ function append(text) {
+ container.animated = false
+ var lastLetter = container.children[container.children.length - 1]
+ var newLetter = letterComponent.createObject(container)
+ newLetter.text = text
+ newLetter.follow = lastLetter
+ container.animated = true
+ }
+
+ function remove() {
+ if (container.children.length)
+ container.children[container.children.length - 1].destroy()
+ }
+
+ function doLayout() {
+ var follow = null
+ for (var i = 0; i < container.text.length; ++i) {
+ var newLetter = letterComponent.createObject(container)
+ newLetter.text = container.text[i]
+ newLetter.follow = follow
+ follow = newLetter
+ }
+ }
+
+ Component {
+ id: letterComponent
+ Text {
+ id: letter
+ property variant follow
+
+ x: follow ? follow.x + follow.width : container.width / 3
+ y: follow ? follow.y : container.height / 2
+
+ font.pixelSize: 40; font.bold: true
+ color: "#999999"; styleColor: "#222222"; style: Text.Raised
+
+ MouseArea {
+ anchors.fill: parent
+ drag.target: letter; drag.axis: Drag.XandYAxis
+ onPressed: letter.color = "#dddddd"
+ onReleased: letter.color = "#999999"
+ }
+
+ Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+ Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+ }
+ }
+
+ Component.onCompleted: doLayout()
+}
diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider.pro b/examples/declarative/cppextensions/imageprovider/imageprovider.pro
index 9797a3f..f700f0b 100644
--- a/examples/declarative/cppextensions/imageprovider/imageprovider.pro
+++ b/examples/declarative/cppextensions/imageprovider/imageprovider.pro
@@ -22,7 +22,7 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCALLOWDLLDATA = 1
- importFiles.sources = ImageProviderCore/qmlimageproviderplugin.dll ImageProviderCore/qmldir
+ importFiles.files = ImageProviderCore/qmlimageproviderplugin.dll ImageProviderCore/qmldir
importFiles.path = ImageProviderCore
DEPLOYMENT += importFiles
}
diff --git a/examples/declarative/cppextensions/plugins/README b/examples/declarative/cppextensions/plugins/README
index fe519f8..95e0eea 100644
--- a/examples/declarative/cppextensions/plugins/README
+++ b/examples/declarative/cppextensions/plugins/README
@@ -5,5 +5,5 @@ by a C++ plugin (providing the "Time" type), and by QML files (providing the
To run:
make install
- qml -I . plugins.qml
+ qmlviewer -I . plugins.qml
diff --git a/examples/declarative/cppextensions/qwidgets/qwidgets.pro b/examples/declarative/cppextensions/qwidgets/qwidgets.pro
index 3353a8d..d92e072 100644
--- a/examples/declarative/cppextensions/qwidgets/qwidgets.pro
+++ b/examples/declarative/cppextensions/qwidgets/qwidgets.pro
@@ -17,7 +17,7 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCALLOWDLLDATA = 1
- importFiles.sources = QWidgets/qmlqwidgetsplugin.dll QWidgets/qmldir
+ importFiles.files = QWidgets/qmlqwidgetsplugin.dll QWidgets/qmldir
importFiles.path = QWidgets
DEPLOYMENT += importFiles
diff --git a/examples/declarative/i18n/i18n.qml b/examples/declarative/i18n/i18n.qml
index 8dac88d..219deda 100644
--- a/examples/declarative/i18n/i18n.qml
+++ b/examples/declarative/i18n/i18n.qml
@@ -65,7 +65,8 @@ Rectangle {
anchors.fill: parent; spacing: 20
Text {
- text: "If a translation is available for the system language (eg. French) then the string below will translated (eg. 'Bonjour'). Otherwise it will show 'Hello'."
+ text: "If a translation is available for the system language (eg. French) then the
+ string below will translated (eg. 'Bonjour'). Otherwise it will show 'Hello'."
width: parent.width; wrapMode: Text.WordWrap
}
diff --git a/examples/declarative/modelviews/listview/highlightranges.qml b/examples/declarative/modelviews/listview/highlightranges.qml
index 2716ee5..58d37a3 100644
--- a/examples/declarative/modelviews/listview/highlightranges.qml
+++ b/examples/declarative/modelviews/listview/highlightranges.qml
@@ -42,15 +42,14 @@ import QtQuick 1.0
import "content"
Rectangle {
+ id: root
+ property int current: 0
width: 600; height: 300
// This example shows the same model in three different ListView items,
// with different highlight ranges. The highlight ranges are set by the
// preferredHighlightBegin and preferredHighlightEnd properties in ListView.
//
- // The second and third ListViews set their currentIndex to be the
- // same as the first. The first ListView is given keyboard focus.
- //
// The first ListView does not set a highlight range, so its currentItem
// can move freely within the visible area. If it moves outside the
// visible area, the view is automatically scrolled to keep the current
@@ -66,9 +65,10 @@ Rectangle {
// forces the current item to change when the view is flicked,
// since the highlight is unable to move.
//
- // Note that the first ListView sets its currentIndex to be equal to
- // the third ListView's currentIndex. By flicking the third ListView with
- // the mouse, the current index of the first ListView will be changed.
+ // All ListViews bind their currentIndex to the root.current property.
+ // The first ListView sets root.current whenever its currentIndex changes
+ // due to keyboard interaction.
+ // Flicking the third ListView with the mouse also changes root.current.
ListView {
id: list1
@@ -77,7 +77,8 @@ Rectangle {
delegate: petDelegate
highlight: Rectangle { color: "lightsteelblue" }
- currentIndex: list3.currentIndex
+ currentIndex: root.current
+ onCurrentIndexChanged: root.current = currentIndex
focus: true
}
@@ -89,7 +90,7 @@ Rectangle {
delegate: petDelegate
highlight: Rectangle { color: "yellow" }
- currentIndex: list1.currentIndex
+ currentIndex: root.current
preferredHighlightBegin: 80; preferredHighlightEnd: 220
highlightRangeMode: ListView.ApplyRange
}
@@ -102,7 +103,8 @@ Rectangle {
delegate: petDelegate
highlight: Rectangle { color: "yellow" }
- currentIndex: list1.currentIndex
+ currentIndex: root.current
+ onCurrentIndexChanged: root.current = currentIndex
preferredHighlightBegin: 125; preferredHighlightEnd: 125
highlightRangeMode: ListView.StrictlyEnforceRange
}
diff --git a/examples/declarative/positioners/positioners.qmlproject.user b/examples/declarative/positioners/positioners.qmlproject.user
deleted file mode 100644
index 593479d..0000000
--- a/examples/declarative/positioners/positioners.qmlproject.user
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE QtCreatorProject>
-<qtcreator>
- <data>
- <variable>ProjectExplorer.Project.ActiveTarget</variable>
- <value type="int">0</value>
- </data>
- <data>
- <variable>ProjectExplorer.Project.EditorSettings</variable>
- <valuemap type="QVariantMap">
- <value key="EditorConfiguration.Codec" type="QByteArray">UTF-8</value>
- </valuemap>
- </data>
- <data>
- <variable>ProjectExplorer.Project.Target.0</variable>
- <valuemap type="QVariantMap">
- <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">QML Runtime</value>
- <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QmlProjectManager.QmlTarget</value>
- <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">-1</value>
- <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value>
- <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">0</value>
- <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap">
- <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">QML Runtime</value>
- <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QmlProjectManager.QmlRunConfiguration</value>
- <value key="QmlProjectManager.QmlRunConfiguration.DebugServerAddress" type="QString">127.0.0.1</value>
- <value key="QmlProjectManager.QmlRunConfiguration.DebugServerPort" type="int">3768</value>
- <value key="QmlProjectManager.QmlRunConfiguration.MainScript" type="QString">positioners.qml</value>
- <value key="QmlProjectManager.QmlRunConfiguration.QDeclarativeViewer" type="QString"></value>
- <value key="QmlProjectManager.QmlRunConfiguration.QDeclarativeViewerArguments" type="QString"></value>
- </valuemap>
- <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value>
- </valuemap>
- </data>
- <data>
- <variable>ProjectExplorer.Project.TargetCount</variable>
- <value type="int">1</value>
- </data>
- <data>
- <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
- <value type="int">4</value>
- </data>
-</qtcreator>
diff --git a/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
index 4c1ad51..c60f2df 100644
--- a/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
+++ b/examples/declarative/toys/tic-tac-toe/tic-tac-toe.qml
@@ -55,22 +55,6 @@ Rectangle {
source: "content/pics/board.png"
}
- Text {
- id: messageDisplay
- anchors.centerIn: parent
- color: "blue"
- style: Text.Outline; styleColor: "white"
- font.pixelSize: 50; font.bold: true
- visible: false
-
- Timer {
- running: messageDisplay.visible
- onTriggered: {
- messageDisplay.visible = false;
- Logic.restartGame();
- }
- }
- }
Column {
id: display
@@ -118,4 +102,22 @@ Rectangle {
}
}
}
+
+
+ Text {
+ id: messageDisplay
+ anchors.centerIn: parent
+ color: "blue"
+ style: Text.Outline; styleColor: "white"
+ font.pixelSize: 50; font.bold: true
+ visible: false
+
+ Timer {
+ running: messageDisplay.visible
+ onTriggered: {
+ messageDisplay.visible = false;
+ Logic.restartGame();
+ }
+ }
+ }
}
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
index 79ff0c1..ccc3f9d 100755
--- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
@@ -145,7 +145,7 @@ function shuffleDown() {
obj = board[index(column, row)];
if (obj == null)
continue;
- obj.x = (fallDist - column) * gameCanvas.blockSize;
+ obj.x = (column - fallDist) * gameCanvas.blockSize;
board[index(column - fallDist, row)] = obj;
board[index(column, row)] = null;
}
diff --git a/examples/desktop/systray/systray.pro b/examples/desktop/systray/systray.pro
index 9b25916..710452b 100644
--- a/examples/desktop/systray/systray.pro
+++ b/examples/desktop/systray/systray.pro
@@ -14,10 +14,10 @@ symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince* {
CONFIG(debug, release|debug) {
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qsvgd4.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qsvgd4.dll
}
CONFIG(release, release|debug) {
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qsvg4.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qsvg4.dll
}
addPlugins.path = imageformats
DEPLOYMENT += addPlugins
diff --git a/examples/draganddrop/puzzle/puzzle.pro b/examples/draganddrop/puzzle/puzzle.pro
index ec88f7a..c0400d8 100644
--- a/examples/draganddrop/puzzle/puzzle.pro
+++ b/examples/draganddrop/puzzle/puzzle.pro
@@ -18,12 +18,12 @@ INSTALLS += target sources
symbian:{
TARGET.UID3 = 0xA000CF65
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFile.sources = example.jpg
+ addFile.files = example.jpg
addFile.path = .
DEPLOYMENT += addFile
}
wince*: {
- addFile.sources = example.jpg
+ addFile.files = example.jpg
addFile.path = .
DEPLOYMENT += addFile
}
diff --git a/examples/multimedia/audiodevices/audiodevices.h b/examples/multimedia/audiodevices/audiodevices.h
index 3b8f074..4a0f74c 100644
--- a/examples/multimedia/audiodevices/audiodevices.h
+++ b/examples/multimedia/audiodevices/audiodevices.h
@@ -38,6 +38,8 @@
**
****************************************************************************/
+#ifndef AUDIODEVICES_H
+#define AUDIODEVICES_H
#include <QObject>
#include <QMainWindow>
@@ -77,3 +79,5 @@ private slots:
};
+#endif
+
diff --git a/examples/multimedia/audioinput/audioinput.h b/examples/multimedia/audioinput/audioinput.h
index 2f4b206..c198304 100644
--- a/examples/multimedia/audioinput/audioinput.h
+++ b/examples/multimedia/audioinput/audioinput.h
@@ -38,6 +38,9 @@
**
****************************************************************************/
+#ifndef AUDIOINPUT_H
+#define AUDIOINPUT_H
+
#include <QPixmap>
#include <QWidget>
#include <QObject>
@@ -132,3 +135,5 @@ private:
static const QString ResumeLabel;
};
+#endif
+
diff --git a/examples/multimedia/audiooutput/audiooutput.h b/examples/multimedia/audiooutput/audiooutput.h
index 004ca49..2f4aa64 100644
--- a/examples/multimedia/audiooutput/audiooutput.h
+++ b/examples/multimedia/audiooutput/audiooutput.h
@@ -38,6 +38,9 @@
**
****************************************************************************/
+#ifndef AUDIOOUTPUT_H
+#define AUDIOOUTPUT_H
+
#include <math.h>
#include <QObject>
@@ -115,3 +118,5 @@ private slots:
void deviceChanged(int index);
};
+#endif
+
diff --git a/examples/network/bearermonitor/bearermonitor.cpp b/examples/network/bearermonitor/bearermonitor.cpp
index 2c976ff..75ffb01 100644
--- a/examples/network/bearermonitor/bearermonitor.cpp
+++ b/examples/network/bearermonitor/bearermonitor.cpp
@@ -41,8 +41,8 @@
#include "bearermonitor.h"
#include "sessionwidget.h"
-#include <QDebug>
-#include <QMessageBox>
+#include <QtCore/QDebug>
+
#ifdef Q_OS_WIN
#include <winsock2.h>
#undef interface
@@ -56,20 +56,18 @@ BearerMonitor::BearerMonitor(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#ifdef MAEMO_UI
newSessionButton->hide();
deleteSessionButton->hide();
#else
delete tabWidget->currentWidget();
sessionGroup->hide();
#endif
-#if defined (Q_OS_SYMBIAN) || defined(Q_OS_WINCE) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE) || defined(MAEMO_UI)
setWindowState(Qt::WindowMaximized);
#endif
updateConfigurations();
-#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
onlineStateChanged(!manager.allConfigurations(QNetworkConfiguration::Active).isEmpty());
-#endif
QNetworkConfiguration defaultConfiguration = manager.defaultConfiguration();
for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem *item = treeWidget->topLevelItem(i);
@@ -104,7 +102,7 @@ BearerMonitor::BearerMonitor(QWidget *parent)
connect(newSessionButton, SIGNAL(clicked()),
this, SLOT(createNewSession()));
-#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
+#ifndef MAEMO_UI
connect(deleteSessionButton, SIGNAL(clicked()),
this, SLOT(deleteSession()));
#endif
@@ -257,15 +255,9 @@ void BearerMonitor::updateConfigurations()
void BearerMonitor::onlineStateChanged(bool isOnline)
{
if (isOnline)
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
- QMessageBox::information(this, "Connection state changed", "Online", QMessageBox::Close);
- else
- QMessageBox::information(this, "Connection state changed", "Offline", QMessageBox::Close);
-#else
onlineState->setText(tr("Online"));
else
onlineState->setText(tr("Offline"));
-#endif
}
#ifdef Q_OS_WIN
@@ -393,7 +385,7 @@ void BearerMonitor::createSessionFor(QTreeWidgetItem *item)
tabWidget->addTab(session, conf.name());
-#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
+#ifndef MAEMO_UI
sessionGroup->show();
#endif
@@ -408,7 +400,7 @@ void BearerMonitor::createNewSession()
createSessionFor(item);
}
-#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
+#ifndef MAEMO_UI
void BearerMonitor::deleteSession()
{
SessionWidget *session = qobject_cast<SessionWidget *>(tabWidget->currentWidget());
diff --git a/examples/network/bearermonitor/bearermonitor.h b/examples/network/bearermonitor/bearermonitor.h
index 45e7275..df1c78b 100644
--- a/examples/network/bearermonitor/bearermonitor.h
+++ b/examples/network/bearermonitor/bearermonitor.h
@@ -45,7 +45,7 @@
#include <qnetworksession.h>
#if defined (Q_OS_SYMBIAN) || defined(Q_OS_WINCE)
#include "ui_bearermonitor_240_320.h"
-#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#elif defined(MAEMO_UI)
#include "ui_bearermonitor_maemo.h"
#else
#include "ui_bearermonitor_640_480.h"
@@ -81,7 +81,7 @@ private slots:
void createSessionFor(QTreeWidgetItem *item);
void createNewSession();
-#if !defined(Q_WS_MAEMO_5) && !defined(Q_WS_MAEMO_6)
+#ifndef MAEMO_UI
void deleteSession();
#endif
void performScan();
diff --git a/examples/network/bearermonitor/bearermonitor.pro b/examples/network/bearermonitor/bearermonitor.pro
index 42100bc..bd9bd68 100644
--- a/examples/network/bearermonitor/bearermonitor.pro
+++ b/examples/network/bearermonitor/bearermonitor.pro
@@ -8,7 +8,8 @@ SOURCES = main.cpp \
bearermonitor.cpp \
sessionwidget.cpp
-maemo5|maemo6 {
+maemo5|maemo6|linux-g++-maemo {
+ DEFINES += MAEMO_UI
FORMS = bearermonitor_maemo.ui \
sessionwidget_maemo.ui
} else {
@@ -17,8 +18,8 @@ maemo5|maemo6 {
sessionwidget.ui
}
-win32:!wince*:LIBS += -lWs2_32
-wince*:LIBS += -lWs2
+win32:!wince*:LIBS += -lws2_32
+wince*:LIBS += -lws2
CONFIG += console
diff --git a/examples/network/bearermonitor/bearermonitor_maemo.ui b/examples/network/bearermonitor/bearermonitor_maemo.ui
index a7940c6..9c72bfd 100644
--- a/examples/network/bearermonitor/bearermonitor_maemo.ui
+++ b/examples/network/bearermonitor/bearermonitor_maemo.ui
@@ -7,300 +7,359 @@
<x>0</x>
<y>0</y>
<width>612</width>
- <height>495</height>
+ <height>555</height>
</rect>
</property>
<property name="windowTitle">
<string>BearerMonitor</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
<item>
- <widget class="QTabWidget" name="tabWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <widget class="QGroupBox" name="systemState">
+ <property name="title">
+ <string>System State</string>
</property>
- <property name="currentIndex">
- <number>0</number>
+ <property name="flat">
+ <bool>true</bool>
</property>
- <property name="usesScrollButtons">
- <bool>false</bool>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="onlineStateLabel">
+ <property name="text">
+ <string>Online State:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="onlineState">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="configurations">
+ <property name="title">
+ <string>Configurations &amp;&amp; Sessions</string>
</property>
- <widget class="QWidget" name="tab">
- <attribute name="title">
- <string>Configurations</string>
- </attribute>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QTreeWidget" name="treeWidget">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <attribute name="headerVisible">
- <bool>false</bool>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <property name="usesScrollButtons">
+ <bool>false</bool>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>Configurations</string>
</attribute>
- <column>
- <property name="text">
- <string>1</string>
- </property>
- </column>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="configurationNameLayout">
- <item>
- <widget class="QLabel" name="configurationNameLabel">
- <property name="text">
- <string>Name:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationName">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationStateLayout">
- <item>
- <widget class="QLabel" name="configurationStateLabel">
- <property name="text">
- <string>State:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationState">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationTypeLayout">
- <item>
- <widget class="QLabel" name="configurationTypeLabel">
- <property name="text">
- <string>Type:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationType">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Invalid</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationPurposeLayout">
- <item>
- <widget class="QLabel" name="configurationPurposeLabel">
- <property name="text">
- <string>Purpose:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationPurpose">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Unknown</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationIdentifierLayout">
- <item>
- <widget class="QLabel" name="configurationIdentifierLabel">
- <property name="text">
- <string>Identifier:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationIdentifier">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationRoamingLayout">
- <item>
- <widget class="QLabel" name="configurationRoamingLabel">
- <property name="text">
- <string>Roaming:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationRoaming">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="configurationChildrenLayout">
- <item>
- <widget class="QLabel" name="configurationChildrenLabel">
- <property name="text">
- <string>Children:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="configurationChildren">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QTreeWidget" name="treeWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <column>
<property name="text">
- <string/>
+ <string>1</string>
</property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QGroupBox" name="nlaGroup">
- <property name="title">
- <string>Network Location Awareness</string>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
+ </column>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="configurationNameLayout">
+ <item>
+ <widget class="QLabel" name="configurationNameLabel">
+ <property name="text">
+ <string>Name:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationName">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationStateLayout">
+ <item>
+ <widget class="QLabel" name="configurationStateLabel">
+ <property name="text">
+ <string>State:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationState">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationTypeLayout">
+ <item>
+ <widget class="QLabel" name="configurationTypeLabel">
+ <property name="text">
+ <string>Type:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationType">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Invalid</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationPurposeLayout">
+ <item>
+ <widget class="QLabel" name="configurationPurposeLabel">
+ <property name="text">
+ <string>Purpose:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationPurpose">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Unknown</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationIdentifierLayout">
+ <item>
+ <widget class="QLabel" name="configurationIdentifierLabel">
+ <property name="text">
+ <string>Identifier:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationIdentifier">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationRoamingLayout">
+ <item>
+ <widget class="QLabel" name="configurationRoamingLabel">
+ <property name="text">
+ <string>Roaming:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationRoaming">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="configurationChildrenLayout">
+ <item>
+ <widget class="QLabel" name="configurationChildrenLabel">
+ <property name="text">
+ <string>Children:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="configurationChildren">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="nlaGroup">
+ <property name="title">
+ <string>Network Location Awareness</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="registerButton">
+ <property name="text">
+ <string>Register</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="unregisterButton">
+ <property name="text">
+ <string>Unregister</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item>
- <widget class="QPushButton" name="registerButton">
+ <widget class="QPushButton" name="newSessionButton">
<property name="text">
- <string>Register</string>
+ <string>New Session</string>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="unregisterButton">
+ <widget class="QPushButton" name="deleteSessionButton">
<property name="text">
- <string>Unregister</string>
+ <string>Delete Session</string>
</property>
</widget>
</item>
+ <item>
+ <widget class="QPushButton" name="scanButton">
+ <property name="text">
+ <string>Scan</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="maximum">
+ <number>0</number>
+ </property>
+ <property name="value">
+ <number>23280</number>
+ </property>
+ <property name="textVisible">
+ <bool>false</bool>
+ </property>
+ <property name="invertedAppearance">
+ <bool>false</bool>
+ </property>
+ <property name="format">
+ <string>%p%</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="newSessionButton">
- <property name="text">
- <string>New Session</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="deleteSessionButton">
- <property name="text">
- <string>Delete Session</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="scanButton">
- <property name="text">
- <string>Scan</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="value">
- <number>23280</number>
- </property>
- <property name="textVisible">
- <bool>false</bool>
- </property>
- <property name="invertedAppearance">
- <bool>false</bool>
- </property>
- <property name="format">
- <string>%p%</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
</widget>
</item>
</layout>
diff --git a/examples/network/bearermonitor/main.cpp b/examples/network/bearermonitor/main.cpp
index 1a22c13..11399e4 100644
--- a/examples/network/bearermonitor/main.cpp
+++ b/examples/network/bearermonitor/main.cpp
@@ -38,7 +38,8 @@
**
****************************************************************************/
-#include <QApplication>
+#include <QtGui/QApplication>
+#include <QtGui/QMainWindow>
#include "bearermonitor.h"
@@ -46,8 +47,12 @@ int main(int argc, char *argv[])
{
QApplication app(argc, argv);
+ QMainWindow mainWindow;
+
BearerMonitor monitor;
- monitor.show();
+
+ mainWindow.setCentralWidget(&monitor);
+ mainWindow.show();
return app.exec();
}
diff --git a/examples/network/bearermonitor/sessionwidget.cpp b/examples/network/bearermonitor/sessionwidget.cpp
index 5ec9d53..51de0f2 100644
--- a/examples/network/bearermonitor/sessionwidget.cpp
+++ b/examples/network/bearermonitor/sessionwidget.cpp
@@ -74,7 +74,7 @@ SessionWidget::SessionWidget(const QNetworkConfiguration &config, QWidget *paren
this, SLOT(closeSession()));
connect(stopSessionButton, SIGNAL(clicked()),
this, SLOT(stopSession()));
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#ifdef MAEMO_UI
connect(deleteSessionButton, SIGNAL(clicked()),
this, SLOT(deleteSession()));
#endif
@@ -94,7 +94,7 @@ void SessionWidget::timerEvent(QTimerEvent *e)
}
}
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#ifdef MAEMO_UI
void SessionWidget::deleteSession()
{
delete this;
diff --git a/examples/network/bearermonitor/sessionwidget.h b/examples/network/bearermonitor/sessionwidget.h
index c92db44..846a1af 100644
--- a/examples/network/bearermonitor/sessionwidget.h
+++ b/examples/network/bearermonitor/sessionwidget.h
@@ -42,7 +42,8 @@
#define SESSIONWIDGET_H
#include <qnetworksession.h>
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+
+#ifdef MAEMO_UI
#include "ui_sessionwidget_maemo.h"
#else
#include "ui_sessionwidget.h"
@@ -71,7 +72,7 @@ private Q_SLOTS:
void stopSession();
void updateSession();
void updateSessionError(QNetworkSession::SessionError error);
-#if defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
+#ifdef MAEMO_UI
void deleteSession();
#endif
diff --git a/examples/painting/svgviewer/svgviewer.pro b/examples/painting/svgviewer/svgviewer.pro
index 4809b91..6417849 100644
--- a/examples/painting/svgviewer/svgviewer.pro
+++ b/examples/painting/svgviewer/svgviewer.pro
@@ -17,7 +17,7 @@ sources.path = $$[QT_INSTALL_EXAMPLES]/painting/svgviewer
INSTALLS += target sources
wince*: {
- addFiles.sources = files\\*.svg
+ addFiles.files = files\\*.svg
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
@@ -25,7 +25,7 @@ wince*: {
symbian: {
TARGET.UID3 = 0xA000A64E
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFiles.sources = files\\*.svg
+ addFiles.files = files\\*.svg
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
index 0574b2d..67aa1ff 100644
--- a/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
+++ b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
@@ -13,7 +13,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources = main.cpp mainwindow.cpp
+ addFiles.files = main.cpp mainwindow.cpp
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/examples/richtext/textobject/textobject.pro b/examples/richtext/textobject/textobject.pro
index 4fa9cb0..222b0fe 100644
--- a/examples/richtext/textobject/textobject.pro
+++ b/examples/richtext/textobject/textobject.pro
@@ -12,7 +12,7 @@ sources.files = $$SOURCES $$HEADERS *.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/richtext/textobject
INSTALLS += target sources
-filesToDeploy.sources = files/*.svg
+filesToDeploy.files = files/*.svg
filesToDeploy.path = files
DEPLOYMENT += filesToDeploy
diff --git a/examples/script/context2d/context2d.pro b/examples/script/context2d/context2d.pro
index 54f5c31..6a0e397 100644
--- a/examples/script/context2d/context2d.pro
+++ b/examples/script/context2d/context2d.pro
@@ -27,6 +27,6 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCHEAPSIZE = 0x200000 0xA00000
contextScripts.path = .
- contextScripts.sources = scripts
+ contextScripts.files = scripts
DEPLOYMENT += contextScripts
}
diff --git a/examples/symbianpkgrules.pri b/examples/symbianpkgrules.pri
index a1b6634..0f615c7 100644
--- a/examples/symbianpkgrules.pri
+++ b/examples/symbianpkgrules.pri
@@ -13,4 +13,7 @@ vendorinfo = \
examples_deployment.pkg_prerules += vendorinfo
DEPLOYMENT += examples_deployment
-isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
+isEmpty(ICON):contains(TEMPLATE, ".*app"):contains(QT, gui):contains(CONFIG, qt):!contains(CONFIG, "no_icon") {
+ ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
+}
+
diff --git a/examples/tools/undoframework/mainwindow.cpp b/examples/tools/undoframework/mainwindow.cpp
index b4b7ee5..90b4d3f 100644
--- a/examples/tools/undoframework/mainwindow.cpp
+++ b/examples/tools/undoframework/mainwindow.cpp
@@ -48,7 +48,7 @@
//! [0]
MainWindow::MainWindow()
{
- undoStack = new QUndoStack();
+ undoStack = new QUndoStack(this);
createActions();
createMenus();
diff --git a/examples/tutorials/gettingStarted/gsQml/filedialog/cppPlugins.pro b/examples/tutorials/gettingStarted/gsQml/filedialog/filedialog.pro
index d85787d..d85787d 100644
--- a/examples/tutorials/gettingStarted/gsQml/filedialog/cppPlugins.pro
+++ b/examples/tutorials/gettingStarted/gsQml/filedialog/filedialog.pro
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part0/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part0/Button.qml
new file mode 100644
index 0000000..ffd4be4
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part0/Button.qml
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//! [document]
+import QtQuick 1.0
+
+Rectangle {
+ id: simplebutton
+ color: "grey"
+ width: 150; height: 75
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: "button label"
+ }
+}
+//! [document]
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part1/Button.qml
new file mode 100644
index 0000000..bb70cfd
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/Button.qml
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: button
+
+ property string label: "button label"
+
+ //these properties act as constants, useable outside this QML file
+ property int buttonHeight: 75
+ property int buttonWidth: 150
+
+ //the color highlight when the mouse hovers on the rectangle
+ property color onHoverColor: "gold"
+ property color borderColor: "white"
+
+ //buttonColor is set to the button's main color
+ property color buttonColor: "lightblue"
+
+ //set appearance properties
+ radius: 10
+ smooth: true
+ border{color: "white"; width: 3}
+ width: buttonWidth; height: buttonHeight
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: label
+ }
+
+ //buttonClick() is callable and a signal handler, onButtonClick is automatically created
+ signal buttonClick()
+ onButtonClick: {
+ console.log(buttonLabel.text + " clicked" )
+ }
+
+ //define the clickable area to be the whole rectangle
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent //stretch the area to the parent's dimension
+ onClicked: buttonClick()
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = onHoverColor
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = borderColor
+ }
+
+ //change the color of the button when pressed
+ color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/EditMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part1/EditMenu.qml
new file mode 100644
index 0000000..460f5e9
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/EditMenu.qml
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: editMenu
+ height: 480; width:1000
+ color: "powderblue"
+ property string menuName:"Edit"
+
+ Rectangle{
+ id:actionContainer
+ color:"transparent"
+ anchors.centerIn: parent
+
+ width: parent.width; height: parent.height / 5
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Cut"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Paste"
+ }
+ Button{
+ id: exitButton
+ label: "Select All"
+ buttonColor: "darkgrey"
+ }
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/FileMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part1/FileMenu.qml
new file mode 100644
index 0000000..65de4f1
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/FileMenu.qml
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: fileMenu
+
+ //the menuName is accessible from outside this QML file
+ property string menuName: "File"
+
+ //generous amount of screen space that will allow the buttons to fit
+ height: 480; width:1000
+
+ color: "#6C646A"
+
+ //a sub-rectangle allows the flexibility of setting the row area
+ Rectangle{
+ id:actionContainer
+
+ //make this rectangle invisible
+ color:"transparent"
+ anchors.centerIn: parent
+
+ //the height is a good proportion that creates more space at the top of the row of buttons
+ width: parent.width; height: parent.height / 5
+
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Load"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Save"
+ }
+ Button{
+ id: exitButton
+ label: "Exit"
+ buttonColor: "darkgrey"
+
+ //exit the application if the exitButton is clicked
+ onButtonClick:{
+ Qt.quit()
+ }
+ }
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/SimpleButton.qml b/examples/tutorials/gettingStarted/gsQml/parts/part1/SimpleButton.qml
new file mode 100644
index 0000000..5bb50f8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/SimpleButton.qml
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: simplebutton
+
+ //the rectangle's fill color
+ color: "grey"
+
+ //dimensions of the button
+ width: 150; height: 75
+
+ //A text element contains functionalities for creating texts
+ Text {
+ id: buttonLabel
+
+ //center the text inside the parent
+ anchors.centerIn: parent
+
+ //text property binds to the label displayed on the button
+ text: "button label"
+ }
+
+ //define the clickable area to be the whole rectangle
+ MouseArea {
+ id: buttonMouseArea
+ anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors
+
+ //onClicked handles valid mouse button clicks
+ onClicked: console.log(buttonLabel.text + " clicked" )
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_button.png b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_button.png
new file mode 100644
index 0000000..aab64bc
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_button.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_editmenu.png b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_editmenu.png
new file mode 100644
index 0000000..d3ff66f
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_editmenu.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_filemenu.png b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_filemenu.png
new file mode 100644
index 0000000..f2e2b0d
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_filemenu.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_simplebutton.png b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_simplebutton.png
new file mode 100644
index 0000000..21ce509
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/pics/qml-texteditor1_simplebutton.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part1/qml-texteditor.qmlproject b/examples/tutorials/gettingStarted/gsQml/parts/part1/qml-texteditor.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part1/qml-texteditor.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part2/Button.qml
new file mode 100644
index 0000000..39ac591
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/Button.qml
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: button
+
+ property string label: "button label"
+
+ //these properties act as constants, useable outside this QML file
+ property int buttonHeight: 75
+ property int buttonWidth: 150
+
+ //the color highlight when the mouse hovers on the rectangle
+ property color onHoverColor: "gold"
+ property color borderColor: "white"
+
+ //buttonColor is set to the button's main color
+ property color buttonColor: "lightblue"
+
+ //set appearance properties
+ radius:10
+ smooth: true
+ border{color: "white"; width: 3}
+ width: buttonWidth; height: buttonHeight
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: label
+ }
+
+ //buttonClick() is callable and a signal handler, onButtonClick is automatically created
+ signal buttonClick()
+ onButtonClick: {
+ console.log(buttonLabel.text + " clicked" )
+ }
+
+ //define the clickable area to be the whole rectangle
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent //stretch the area to the parent's dimension
+ onClicked: buttonClick()
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = onHoverColor
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = borderColor
+
+ }
+
+ //change the color of the button when pressed
+ color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/EditMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part2/EditMenu.qml
new file mode 100644
index 0000000..fdd06d5
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/EditMenu.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: editMenu
+ height: 480; width:1000
+ color: "powderblue"
+ property string menuName:"Edit"
+
+ Rectangle{
+ id:actionContainer
+ color:"transparent"
+ anchors.centerIn: parent
+
+ width: parent.width; height: parent.height / 5
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Cut"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Paste"
+ }
+ Button{
+ id: exitButton
+ label: "Select All"
+ buttonColor: "darkgrey"
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/FileMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part2/FileMenu.qml
new file mode 100644
index 0000000..bd6669b
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/FileMenu.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: fileMenu
+
+ //the menuName is accessible from outside this QML file
+ property string menuName: "File"
+
+ //generous amount of screen space that will allow the buttons to fit
+ height: 480; width:1000
+
+ color: "#6C646A"
+
+ //a sub-rectangle allows the flexibility of setting the row area
+ Rectangle{
+ id:actionContainer
+
+ //make this rectangle invisible
+ color:"transparent"
+ anchors.centerIn: parent
+
+ //the height is a good proportion that creates more space at the top of the row of buttons
+ width: parent.width; height: parent.height / 5
+
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Load"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Save"
+ }
+ Button{
+ id: exitButton
+ label: "Exit"
+ buttonColor: "darkgrey"
+
+ //exit the application if the exitButton is clicked
+ onButtonClick:{
+ Qt.quit()
+ }
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/MenuBar.qml b/examples/tutorials/gettingStarted/gsQml/parts/part2/MenuBar.qml
new file mode 100644
index 0000000..8065804
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/MenuBar.qml
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: menuBar
+ width: 1000
+ height:300
+
+ property color fileColor: "thistle"
+ property color editColor: "powderblue"
+
+ //container for the header and the buttons
+ Rectangle{
+
+ id: labelList
+ height:parent.height/10
+ width: parent.width
+ color: "steelblue"
+
+ //default z is 0, items with higher z values are shown on top of items with lower z values
+ z: 1
+
+ //row displays its children in a vertical row
+ Row{
+ anchors.centerIn: parent
+ spacing:40
+ Button{
+ height: 20
+ width: 50
+ label: "File"
+ id: fileButton
+ buttonColor : menuListView.currentIndex == 0? fileColor : Qt.darker(fileColor, 1.5)
+ scale: menuListView.currentIndex == 0? 1.25: 1
+ radius: 1
+
+ //on a button click, change the list's currently selected item to FileMenu
+ onButtonClick: {
+ menuListView.currentIndex = 0
+ }
+ }
+ Button{
+ height: 20
+ width: 50
+ id: editButton
+ buttonColor : menuListView.currentIndex == 1? editColor : Qt.darker(editColor, 1.5)
+ scale: menuListView.currentIndex == 1? 1.25: 1
+ label: "Edit"
+ radius: 1
+
+ //on a button click, change the list's currently selected item to EditMenu
+ onButtonClick: {
+ menuListView.currentIndex = 1
+ }
+
+
+ }
+
+
+ }
+ }
+
+ //a list of visual items already have delegates handling their display
+ VisualItemModel{
+ id: menuListModel
+
+ FileMenu{
+ width: menuListView.width
+ height: menuBar.height
+ color: fileColor
+ }
+ EditMenu{
+ color: editColor
+ width: menuListView.width
+ height: menuBar.height
+
+ }
+ }
+
+ //list view will display a model according to a delegate
+ ListView{
+ id: menuListView
+ anchors.fill:parent
+ anchors.bottom: parent.bottom
+ width:parent.width
+ height: parent.height
+
+ //the model contains the data
+ model: menuListModel
+
+ //control the movement of the menu switching
+ snapMode: ListView.SnapOneItem
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickDeceleration: 5000
+ highlightFollowsCurrentItem: true
+ highlightMoveDuration:240
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ }
+
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/pics/qml-texteditor2_menubar.png b/examples/tutorials/gettingStarted/gsQml/parts/part2/pics/qml-texteditor2_menubar.png
new file mode 100644
index 0000000..da959a3
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/pics/qml-texteditor2_menubar.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part2/qml-texteditor2.qmlproject b/examples/tutorials/gettingStarted/gsQml/parts/part2/qml-texteditor2.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part2/qml-texteditor2.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/Button.qml
new file mode 100644
index 0000000..39ac591
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/Button.qml
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: button
+
+ property string label: "button label"
+
+ //these properties act as constants, useable outside this QML file
+ property int buttonHeight: 75
+ property int buttonWidth: 150
+
+ //the color highlight when the mouse hovers on the rectangle
+ property color onHoverColor: "gold"
+ property color borderColor: "white"
+
+ //buttonColor is set to the button's main color
+ property color buttonColor: "lightblue"
+
+ //set appearance properties
+ radius:10
+ smooth: true
+ border{color: "white"; width: 3}
+ width: buttonWidth; height: buttonHeight
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: label
+ }
+
+ //buttonClick() is callable and a signal handler, onButtonClick is automatically created
+ signal buttonClick()
+ onButtonClick: {
+ console.log(buttonLabel.text + " clicked" )
+ }
+
+ //define the clickable area to be the whole rectangle
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent //stretch the area to the parent's dimension
+ onClicked: buttonClick()
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = onHoverColor
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = borderColor
+
+ }
+
+ //change the color of the button when pressed
+ color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/EditMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/EditMenu.qml
new file mode 100644
index 0000000..fdd06d5
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/EditMenu.qml
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: editMenu
+ height: 480; width:1000
+ color: "powderblue"
+ property string menuName:"Edit"
+
+ Rectangle{
+ id:actionContainer
+ color:"transparent"
+ anchors.centerIn: parent
+
+ width: parent.width; height: parent.height / 5
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Cut"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Paste"
+ }
+ Button{
+ id: exitButton
+ label: "Select All"
+ buttonColor: "darkgrey"
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/FileMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/FileMenu.qml
new file mode 100644
index 0000000..bd6669b
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/FileMenu.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: fileMenu
+
+ //the menuName is accessible from outside this QML file
+ property string menuName: "File"
+
+ //generous amount of screen space that will allow the buttons to fit
+ height: 480; width:1000
+
+ color: "#6C646A"
+
+ //a sub-rectangle allows the flexibility of setting the row area
+ Rectangle{
+ id:actionContainer
+
+ //make this rectangle invisible
+ color:"transparent"
+ anchors.centerIn: parent
+
+ //the height is a good proportion that creates more space at the top of the row of buttons
+ width: parent.width; height: parent.height / 5
+
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Load"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Save"
+ }
+ Button{
+ id: exitButton
+ label: "Exit"
+ buttonColor: "darkgrey"
+
+ //exit the application if the exitButton is clicked
+ onButtonClick:{
+ Qt.quit()
+ }
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/MenuBar.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/MenuBar.qml
new file mode 100644
index 0000000..8065804
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/MenuBar.qml
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: menuBar
+ width: 1000
+ height:300
+
+ property color fileColor: "thistle"
+ property color editColor: "powderblue"
+
+ //container for the header and the buttons
+ Rectangle{
+
+ id: labelList
+ height:parent.height/10
+ width: parent.width
+ color: "steelblue"
+
+ //default z is 0, items with higher z values are shown on top of items with lower z values
+ z: 1
+
+ //row displays its children in a vertical row
+ Row{
+ anchors.centerIn: parent
+ spacing:40
+ Button{
+ height: 20
+ width: 50
+ label: "File"
+ id: fileButton
+ buttonColor : menuListView.currentIndex == 0? fileColor : Qt.darker(fileColor, 1.5)
+ scale: menuListView.currentIndex == 0? 1.25: 1
+ radius: 1
+
+ //on a button click, change the list's currently selected item to FileMenu
+ onButtonClick: {
+ menuListView.currentIndex = 0
+ }
+ }
+ Button{
+ height: 20
+ width: 50
+ id: editButton
+ buttonColor : menuListView.currentIndex == 1? editColor : Qt.darker(editColor, 1.5)
+ scale: menuListView.currentIndex == 1? 1.25: 1
+ label: "Edit"
+ radius: 1
+
+ //on a button click, change the list's currently selected item to EditMenu
+ onButtonClick: {
+ menuListView.currentIndex = 1
+ }
+
+
+ }
+
+
+ }
+ }
+
+ //a list of visual items already have delegates handling their display
+ VisualItemModel{
+ id: menuListModel
+
+ FileMenu{
+ width: menuListView.width
+ height: menuBar.height
+ color: fileColor
+ }
+ EditMenu{
+ color: editColor
+ width: menuListView.width
+ height: menuBar.height
+
+ }
+ }
+
+ //list view will display a model according to a delegate
+ ListView{
+ id: menuListView
+ anchors.fill:parent
+ anchors.bottom: parent.bottom
+ width:parent.width
+ height: parent.height
+
+ //the model contains the data
+ model: menuListModel
+
+ //control the movement of the menu switching
+ snapMode: ListView.SnapOneItem
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickDeceleration: 5000
+ highlightFollowsCurrentItem: true
+ highlightMoveDuration:240
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ }
+
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/TextArea.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/TextArea.qml
new file mode 100644
index 0000000..b0bf664
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/TextArea.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id:textArea
+
+ width :400
+ height:400
+ color: "white"
+
+ Flickable{
+ id: flickArea
+
+ width: parent.width
+ height: parent.height
+ anchors.fill:parent
+
+ function ensureVisible(r){
+ if (contentX >= r.x)
+ contentX = r.x;
+ else if (contentX+width <= r.x+r.width)
+ contentX = r.x+r.width-width;
+ if (contentY >= r.y)
+ contentY = r.y;
+ else if (contentY+height <= r.y+r.height)
+ contentY = r.y+r.height-height;
+ }
+
+ TextEdit{
+ id: textEditor
+ anchors.fill:parent
+ width:parent.width; height:parent.height
+ color:"midnightblue"
+ focus: true
+
+ wrapMode: TextEdit.Wrap
+
+ onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle)
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/TextEditor.qml b/examples/tutorials/gettingStarted/gsQml/parts/part3/TextEditor.qml
new file mode 100644
index 0000000..7f0e650
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/TextEditor.qml
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ id: screen
+ width: 1000; height: 1000
+ border.color:"black"
+ //the screen is partitioned into the MenuBar and TextArea. 1/3 of the screen is assigned to the MenuBar
+ property int partition: height/3
+
+ MenuBar{
+ id:menuBar
+ height: partition
+ width:parent.width
+ z: 1
+ }
+
+
+ TextArea{
+ id:textArea
+ anchors.bottom:parent.bottom
+ y: partition
+ color: "azure"
+ height: partition*2
+ width:parent.width
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/images/arrow.png b/examples/tutorials/gettingStarted/gsQml/parts/part3/images/arrow.png
new file mode 100644
index 0000000..14978c2
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/images/arrow.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/pics/qml-texteditor3_texteditor.png b/examples/tutorials/gettingStarted/gsQml/parts/part3/pics/qml-texteditor3_texteditor.png
new file mode 100644
index 0000000..d0623b5
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/pics/qml-texteditor3_texteditor.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part3/qml-texteditor3.qmlproject b/examples/tutorials/gettingStarted/gsQml/parts/part3/qml-texteditor3.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part3/qml-texteditor3.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/Button.qml
new file mode 100644
index 0000000..36833f5
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/Button.qml
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: button
+
+ //these properties act as constants, useable outside this QML file
+ property int buttonHeight: 75
+ property int buttonWidth: 150
+
+ //attaches to the Text element's text content
+ property string label
+ property color textColor: buttonLabel.color
+
+ //the color highlight when the mouse hovers on the rectangle
+ property color onHoverColor: "gold"
+ property color borderColor: "white"
+
+ //buttonColor is set to the button's main color
+ property color buttonColor: "lightblue"
+
+ //set appearance properties
+ radius:10
+ smooth: true
+ border.color: "white"
+ border.width: 3
+ width: buttonWidth; height: buttonHeight
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: label //"button label" //bind the text to the parent's text
+ }
+
+ //buttonClick() is callable and a signal handler, onButtonClick is automatically created
+ signal buttonClick()
+ onButtonClick: {
+ console.log(buttonLabel.text + " clicked" )
+ }
+
+ //define the clickable area to be the whole rectangle
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent //stretch the area to the parent's dimension
+ onClicked: buttonClick()
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = onHoverColor
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = borderColor
+
+ }
+
+ //change the color of the button when pressed
+ color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
+ //animate the color whenever the color property changes
+ Behavior on color { ColorAnimation{ duration: 55} }
+
+ //scale the button when pressed
+ scale: buttonMouseArea.pressed ? 1.1 : 1.00
+ //Animate the scale property change
+ Behavior on scale { NumberAnimation{ duration: 55} }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/EditMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/EditMenu.qml
new file mode 100644
index 0000000..f0a0e36
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/EditMenu.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: editMenu
+ height: 480; width:1000
+ color: "powderblue"
+ property string menuName:"Edit"
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#6A6F70" }
+ GradientStop { position: 1.0; color: Qt.darker("#6A6D67") }
+ }
+
+ Rectangle{
+ id:actionContainer
+ color:"transparent"
+ anchors.centerIn: parent
+
+ width: parent.width; height: parent.height / 5
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Cut"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Paste"
+ }
+ Button{
+ id: exitButton
+ label: "Select All"
+ buttonColor: "darkgrey"
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/FileMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/FileMenu.qml
new file mode 100644
index 0000000..d257d6a
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/FileMenu.qml
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: fileMenu
+
+ //the menuName is accessible from outside this QML file
+ property string menuName: "File"
+
+ //generous amount of screen space that will allow the buttons to fit
+ height: 480; width:1000
+
+ color: "#6C646A"
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#6C646A" }
+ GradientStop { position: 1.0; color: Qt.darker("#6A6D6A") }
+ }
+
+ //a sub-rectangle allows the flexibility of setting the row area
+ Rectangle{
+ id:actionContainer
+
+ //make this rectangle invisible
+ color:"transparent"
+ anchors.centerIn: parent
+
+ //the height is a good proportion that creates more space at the top of the row of buttons
+ width: parent.width; height: parent.height / 5
+
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/6
+ Button{
+ id: loadButton
+ buttonColor: "lightgrey"
+ label: "Load"
+ }
+
+ Button{
+ buttonColor: "grey"
+ id: saveButton
+ label: "Save"
+ }
+ Button{
+ id: exitButton
+ label: "Exit"
+ buttonColor: "darkgrey"
+
+ //exit the application if the exitButton is clicked
+ onButtonClick:{
+ Qt.quit()
+ }
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/MenuBar.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/MenuBar.qml
new file mode 100644
index 0000000..5b0dbf8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/MenuBar.qml
@@ -0,0 +1,146 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: menuBar
+ width: 1000
+ height:300
+
+ property color fileColor: "plum"
+ property color editColor: "powderblue"
+
+ //container for the header and the buttons
+ Rectangle{
+
+ id: labelList
+ height:parent.height/10
+ width: parent.width
+ color: "beige"
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#8C8F8C" }
+ GradientStop { position: 0.17; color: "#6A6D6A" }
+ GradientStop { position: 0.98;color: "#3F3F3F" }
+ GradientStop { position: 1.0; color: "#0e1B20" }
+ }
+
+ //default z is 0, items with higher z values are shown on top of items with lower z values
+ z: 1
+
+ //row displays its children in a vertical row
+ Row{
+ anchors.centerIn: parent
+ spacing:40
+ Button{
+ height: 20
+ width: 50
+ label: "File"
+ id: fileButton
+ buttonColor : menuListView.currentIndex == 0? fileColor : Qt.darker(fileColor, 1.5)
+ scale: menuListView.currentIndex == 0? 1.25: 1
+ radius: 1
+
+ //on a button click, change the list's currently selected item to FileMenu
+ onButtonClick: {
+ menuListView.currentIndex = 0
+ }
+ }
+ Button{
+ height: 20
+ width: 50
+ id: editButton
+ buttonColor : menuListView.currentIndex == 1? editColor : Qt.darker(editColor, 1.5)
+ scale: menuListView.currentIndex == 1? 1.25: 1
+ label: "Edit"
+ radius: 1
+
+ //on a button click, change the list's currently selected item to EditMenu
+ onButtonClick: {
+ menuListView.currentIndex = 1
+ }
+
+
+ }
+
+
+ }
+ }
+
+ //a list of visual items already have delegates handling their display
+ VisualItemModel{
+ id: menuListModel
+
+ FileMenu{
+ width: menuListView.width
+ height: menuBar.height
+ color: fileColor
+ }
+ EditMenu{
+ color: editColor
+ width: menuListView.width
+ height: menuBar.height
+
+ }
+ }
+
+ //list view will display a model according to a delegate
+ ListView{
+ id: menuListView
+ anchors.fill:parent
+ anchors.bottom: parent.bottom
+ width:parent.width
+ height: parent.height
+
+ //the model contains the data
+ model: menuListModel
+
+ //control the movement of the menu switching
+ snapMode: ListView.SnapOneItem
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickDeceleration: 5000
+ highlightFollowsCurrentItem: true
+ highlightMoveDuration:240
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ }
+
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/SimpleButton.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/SimpleButton.qml
new file mode 100644
index 0000000..d360faa
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/SimpleButton.qml
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: simplebutton
+ color: "grey"
+ width: 150; height: 75
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: "button label"
+ }
+
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent
+ onClicked: console.log(buttonLabel.text + " clicked" )
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/TextArea.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/TextArea.qml
new file mode 100644
index 0000000..4eedf34
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/TextArea.qml
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id:textArea
+
+ width :400
+ height:400
+ property color fontColor: "white"
+
+ Flickable{
+ id: flickArea
+
+ width: parent.width
+ height: parent.height
+ anchors.fill:parent
+
+ function ensureVisible(r){
+ if (contentX >= r.x)
+ contentX = r.x;
+ else if (contentX+width <= r.x+r.width)
+ contentX = r.x+r.width-width;
+ if (contentY >= r.y)
+ contentY = r.y;
+ else if (contentY+height <= r.y+r.height)
+ contentY = r.y+r.height-height;
+ }
+
+ TextEdit{
+ id: textEditor
+ anchors.fill:parent
+ width:parent.width; height:parent.height
+ color:fontColor
+ focus: true
+
+ wrapMode: TextEdit.Wrap
+
+ onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle)
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/TextEditor.qml b/examples/tutorials/gettingStarted/gsQml/parts/part4/TextEditor.qml
new file mode 100644
index 0000000..d218bba
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/TextEditor.qml
@@ -0,0 +1,146 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: screen
+ width: 1000; height: 1000
+ property int partition: height/3
+ state: "DRAWER_CLOSED"
+
+
+ //Item 1: MenuBar on the top portion of the screen
+ MenuBar{
+ id:menuBar
+ height: partition
+ //anchors.top:parent.top
+ width:parent.width
+ z:1
+ }
+
+
+ //Item 2: The editable text area
+ TextArea{
+ id:textArea
+ y:drawer.height
+ border.color: Qt.darker(color, 1.4)
+ border.width: 2
+ color: "#3F3F3F"
+ fontColor: "#DCDCCC"
+ height: partition*2
+ width:parent.width
+ }
+
+ //Item 3: The drawer handle
+ Rectangle{
+ id:drawer
+ height:15
+ width: parent.width
+ border.color : "#6A6D6A"
+ border.width: 1
+
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#8C8F8C" }
+ GradientStop { position: 0.17; color: "#6A6D6A" }
+ GradientStop { position: 0.77; color: "#3F3F3F" }
+ GradientStop { position: 1.0; color: "#6A6D6A" }
+ }
+
+ Image{
+ id: arrowIcon
+ source: "images/arrow.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Behavior{NumberAnimation{property: "rotation";easing.type: Easing.OutExpo }}
+ }
+
+ MouseArea{
+ id: drawerMouseArea
+ anchors.fill:parent
+ onClicked:{
+ if (screen.state == "DRAWER_CLOSED"){
+ screen.state = "DRAWER_OPEN"
+ console.log("drawer OPEN")
+ }
+ else if (screen.state == "DRAWER_OPEN"){
+ screen.state = "DRAWER_CLOSED"
+ console.log("drawer closed")
+ }
+ }
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = Qt.lighter("#6A6D6A")
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = "#6A6D6A"
+ }
+
+ }
+ states:[
+ State{
+ name: "DRAWER_OPEN"
+ PropertyChanges { target: menuBar; y:0}
+ PropertyChanges { target: textArea; y: partition + drawer.height}
+ PropertyChanges { target: drawer; y: partition}
+ PropertyChanges { target: arrowIcon; rotation: 180}
+ },
+ State{
+ name: "DRAWER_CLOSED"
+ PropertyChanges { target: menuBar; y:-partition}
+ PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height}
+ PropertyChanges { target: drawer; y: 0}
+ PropertyChanges { target: arrowIcon; rotation: 0}
+ }
+
+ ]
+ transitions: [
+ Transition{
+ to: "*"
+ NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type:Easing.OutExpo }
+ NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutExpo }
+ NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutExpo }
+ }
+
+ ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/images/arrow.png b/examples/tutorials/gettingStarted/gsQml/parts/part4/images/arrow.png
new file mode 100644
index 0000000..14978c2
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/images/arrow.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/pics/qml-texteditor4_texteditor.png b/examples/tutorials/gettingStarted/gsQml/parts/part4/pics/qml-texteditor4_texteditor.png
new file mode 100644
index 0000000..a195fb8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/pics/qml-texteditor4_texteditor.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part4/qml-texteditor4.qmlproject b/examples/tutorials/gettingStarted/gsQml/parts/part4/qml-texteditor4.qmlproject
new file mode 100644
index 0000000..d4909f8
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part4/qml-texteditor4.qmlproject
@@ -0,0 +1,16 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/TextEditor.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/TextEditor.qml
new file mode 100644
index 0000000..4adcf05
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/TextEditor.qml
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+import "core"
+
+Rectangle {
+ id: screen
+ width: 1000; height: 1000
+ property int partition: height/3
+ state: "DRAWER_CLOSED"
+
+ //Item 1: MenuBar on the top portion of the screen
+ MenuBar{
+ id:menuBar
+ height: screen.partition; width: screen.width
+ z:1
+ }
+ //Item 2: The editable text area
+ TextArea{
+ id:textArea
+ y:drawer.height
+ color: "#3F3F3F"
+ fontColor: "#DCDCCC"
+ height: partition*2; width:parent.width
+ }
+ //Item 3: The drawer handle
+ Rectangle{
+ id:drawer
+ height:15; width: parent.width
+ border.color : "#6A6D6A"
+ border.width: 1
+ z:1
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#8C8F8C" }
+ GradientStop { position: 0.17; color: "#6A6D6A" }
+ GradientStop { position: 0.77; color: "#3F3F3F" }
+ GradientStop { position: 1.0; color: "#6A6D6A" }
+ }
+ Image{
+ id: arrowIcon
+ source: "images/arrow.png"
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Behavior{NumberAnimation{property: "rotation";easing.type: Easing.OutExpo }}
+ }
+
+ MouseArea{
+ id: drawerMouseArea
+ anchors.fill:parent
+ hoverEnabled: true
+ onEntered: parent.border.color = Qt.lighter("#6A6D6A")
+ onExited: parent.border.color = "#6A6D6A"
+ onClicked:{
+ if (screen.state == "DRAWER_CLOSED"){
+ screen.state = "DRAWER_OPEN"
+ }
+ else if (screen.state == "DRAWER_OPEN"){
+ screen.state = "DRAWER_CLOSED"
+ }
+ }
+ }
+ }
+
+ states:[
+ State{
+ name: "DRAWER_OPEN"
+ PropertyChanges { target: menuBar; y: 0}
+ PropertyChanges { target: textArea; y: partition + drawer.height}
+ PropertyChanges { target: drawer; y: partition}
+ PropertyChanges { target: arrowIcon; rotation: 180}
+ },
+ State{
+ name: "DRAWER_CLOSED"
+ PropertyChanges { target: menuBar; y:-height; }
+ PropertyChanges { target: textArea; y: drawer.height; height: screen.height - drawer.height}
+ PropertyChanges { target: drawer; y: 0}
+ PropertyChanges { target: arrowIcon; rotation: 0}
+ }
+ ]
+
+ transitions: [
+ Transition{
+ to: "*"
+ NumberAnimation { target: textArea; properties: "y, height"; duration: 100; easing.type:Easing.OutExpo }
+ NumberAnimation { target: menuBar; properties: "y"; duration: 100;easing.type: Easing.OutExpo }
+ NumberAnimation { target: drawer; properties: "y"; duration: 100;easing.type: Easing.OutExpo }
+ }
+ ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/Button.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/Button.qml
new file mode 100644
index 0000000..c0c1f77
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/Button.qml
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+
+ //identifier of the item
+ id: button
+
+ //these properties act as constants, useable outside this QML file
+ property int buttonHeight: 75
+ property int buttonWidth: 150
+
+ //attaches to the Text element's text content
+ property string label
+ property color textColor: buttonLabel.color
+
+ //the color highlight when the mouse hovers on the rectangle
+ property color onHoverColor: "lightsteelblue"
+ property color borderColor: "transparent"
+
+ //buttonColor is set to the button's main color
+ property color buttonColor: "lightblue"
+
+ property real labelSize: 14
+ //set appearance properties
+ radius:6
+ smooth: true
+ border.width: 2
+ border.color: borderColor
+ width: buttonWidth; height: buttonHeight
+
+ Text{
+ id: buttonLabel
+ anchors.centerIn: parent
+ text: label //bind the text to the parent's text
+ color: "#DCDCCC"
+ font.pointSize: labelSize
+ }
+
+ //buttonClick() is callable and a signal handler, onButtonClick is automatically created
+ signal buttonClick()
+
+ //define the clickable area to be the whole rectangle
+ MouseArea{
+ id: buttonMouseArea
+ anchors.fill: parent //stretch the area to the parent's dimension
+ onClicked: buttonClick()
+
+ //if true, then onEntered and onExited called if mouse hovers in the mouse area
+ //if false, a button must be clicked to detect the mouse hover
+ hoverEnabled: true
+
+ //display a border if the mouse hovers on the button mouse area
+ onEntered: parent.border.color = onHoverColor
+ //remove the border if the mouse exits the button mouse area
+ onExited: parent.border.color = borderColor
+
+ }
+
+ //change the color of the button when pressed
+ color: buttonMouseArea.pressed ? Qt.darker(buttonColor, 1.5) : buttonColor
+ //animate the color whenever the color property changes
+ Behavior on color { ColorAnimation{ duration: 55} }
+
+ //scale the button when pressed
+ scale: buttonMouseArea.pressed ? 1.1 : 1.00
+ //Animate the scale property change
+ Behavior on scale { NumberAnimation{ duration: 55} }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/EditMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/EditMenu.qml
new file mode 100644
index 0000000..4338d25
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/EditMenu.qml
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: editMenu
+ height: 480; width:1000
+ color: "powderblue"
+ property color buttonBorderColor: "#7A8182"
+ property color buttonFillColor: "#61BDCACD"
+ property string menuName:"Edit"
+
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#6A7570" }
+ GradientStop { position: 1.0; color: Qt.darker("#6A7570") }
+ }
+
+ Rectangle{
+ id:actionContainer
+ color:"transparent"
+ anchors.centerIn: parent
+ width: parent.width; height: parent.height / 5
+ Row{
+ anchors.centerIn: parent
+ spacing: parent.width/9
+ Button{
+ id: loadButton
+ buttonColor: buttonFillColor
+ label: "Copy"
+ labelSize:16
+ borderColor:buttonBorderColor
+ height: actionContainer.height
+ width: actionContainer.width/6
+ onButtonClick:textArea.copy()
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+ }
+
+ Button{
+ id: saveButton
+ height: actionContainer.height
+ width: actionContainer.width/6
+ buttonColor: buttonFillColor
+ label: "Paste"
+ borderColor:buttonBorderColor
+ labelSize:16
+ onButtonClick:textArea.paste()
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+ }
+ Button{
+ id: exitButton
+ label: "Select All"
+ height: actionContainer.height
+ width: actionContainer.width/6
+ labelSize:16
+ buttonColor: buttonFillColor
+ borderColor:buttonBorderColor
+ onButtonClick:textArea.selectAll()
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+ }
+ }
+ }
+
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileDialog.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileDialog.qml
new file mode 100644
index 0000000..af9d82c
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileDialog.qml
@@ -0,0 +1,170 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id:dialog
+ height: 200 * partition; width: 200
+ color: "transparent"
+
+ signal selectChanged()
+ signal notifyRefresh()
+ onNotifyRefresh:dirView.model = directory.files
+
+ property string selectedFile
+ property int selectedIndex: 0
+
+ Rectangle{
+ id: dirBox
+ radius: 10
+ anchors.centerIn:parent
+ height: parent.height -15; width: parent.width -30
+
+ Rectangle{
+ id:header
+ height:parent.height*0.1
+ width: parent.width
+ radius:3
+ z:1
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#8C8F8C" }
+ GradientStop { position: 0.17; color: "#6A6D6A" }
+ GradientStop { position: 0.98;color: "#3F3F3F" }
+ GradientStop { position: 1.0; color: "#0e1B20" }
+ }
+ Text{
+ height: header.height
+ anchors.centerIn: header
+ text: "files:"
+ color: "lightblue"
+ font.weight: Font.Light
+ font.italic: true
+ }
+ }
+ GridView{
+ id:dirView
+ width:parent.width
+ height:parent.height*.9
+ anchors.top: header.bottom
+ cellWidth: 100
+ cellHeight: 75
+// highlight: Rectangle { width:cellWidth; height: cellHeight; color: "lightsteelblue" ;radius: 13}
+ model: directory.files
+ delegate: dirDelegate
+ clip: true
+ highlightMoveDuration:40
+ }
+
+ Component{
+ id:dirDelegate
+
+ Rectangle{
+ id:file
+ color: "transparent"
+ width: GridView.view.cellWidth; height: GridView.view.cellHeight
+
+ Text{
+ id:fileName
+ width: parent.width
+ anchors.centerIn:parent
+ text: name
+ color: "#BDCACD"
+ font.weight: GridView.view.currentIndex == index ? Font.DemiBold : Font.Normal
+ font.pointSize: GridView.view.currentIndex == index ? 12 : 10
+ elide: Text.ElideMiddle
+ horizontalAlignment: Text.AlignHCenter
+ }
+ Rectangle{
+ id:selection
+ width:parent.width; height:parent.height
+ anchors.centerIn: parent
+ radius: 10
+ smooth: true
+ scale: GridView.view.currentIndex == index ? 1 : 0.5
+ opacity: GridView.view.currentIndex == index ? 1 : 0
+ Text{
+ id:overlay
+ width: parent.width
+ anchors.centerIn:parent
+ text: name
+ color: "#696167"
+ font.weight: Font.DemiBold
+ font.pointSize: 12
+ smooth:true
+ elide: Text.ElideMiddle
+ horizontalAlignment: Text.AlignHCenter
+ }
+ Behavior on opacity{ NumberAnimation{ duration: 45} }
+ Behavior on scale { NumberAnimation{ duration: 45} }
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter("lightsteelblue",1.25) }
+ GradientStop { position: 0.67; color: Qt.darker("lightsteelblue",1.3) }
+ }
+ border.color:"lightsteelblue"
+ border.width:1
+ }
+ MouseArea{
+ id:fileMouseArea
+ anchors.fill:parent
+ hoverEnabled: true
+
+ onClicked:{
+ GridView.view.currentIndex = index
+ selectedFile = directory.files[index].name
+ selectChanged()
+ }
+ onEntered:{
+ fileName.color = "lightsteelblue"
+ fileName.font.weight = Font.DemiBold
+ }
+ onExited: {
+ fileName.font.weight = Font.Normal
+ fileName.color = "#BDCACD"
+ }
+ }
+ }
+ }
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#A5333333" }
+ GradientStop { position: 1.0; color: "#03333333" }
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileMenu.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileMenu.qml
new file mode 100644
index 0000000..1d671e4
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/FileMenu.qml
@@ -0,0 +1,232 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: fileMenu
+ height: 480; width:1000
+ property color buttonBorderColor: "#7F8487"
+ property color buttonFillColor: "#8FBDCACD"
+ property string fileContent:directory.fileContent
+
+ //the menuName is accessible from outside this QML file
+ property string menuName: "File"
+
+ //used to divide the screen into parts.
+ property real partition: 1/3
+
+ color: "#6C646A"
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#6C646A" }
+ GradientStop { position: 1.0; color: Qt.darker("#6A6D6A") }
+ }
+
+ Directory{
+ id:directory
+ filename: textInput.text
+ onDirectoryChanged:fileDialog.notifyRefresh()
+ }
+
+ Rectangle{
+ id:actionContainer
+
+ //make this rectangle invisible
+ color:"transparent"
+ anchors.left: parent.left
+
+ //the height is a good proportion that creates more space at the top of the column of buttons
+ width: fileMenu.width * partition; height: fileMenu.height
+
+ Column{
+ anchors.centerIn: parent
+ spacing: parent.height/32
+ Button{
+ id: saveButton
+ label: "Save"
+ borderColor: buttonBorderColor
+ buttonColor: buttonFillColor
+ width: actionContainer.width/ 1.3
+ height:actionContainer.height / 8
+ labelSize:24
+ onButtonClick:{
+ directory.fileContent = textArea.textContent
+ directory.filename = textInput.text
+ directory.saveFile()
+ }
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+
+ }
+ Button{
+ id: loadButton
+ width: actionContainer.width/ 1.3
+ height:actionContainer.height/ 8
+ buttonColor: buttonFillColor
+ borderColor: buttonBorderColor
+ label: "Load"
+ labelSize:24
+ onButtonClick:{
+ directory.filename = textInput.text
+ directory.loadFile()
+ textArea.textContent = directory.fileContent
+ }
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+ }
+ Button{
+ id: newButton
+ width: actionContainer.width/ 1.3
+ height:actionContainer.height/ 8
+ buttonColor: buttonFillColor
+ borderColor: buttonBorderColor
+ label: "New"
+ labelSize:24
+ onButtonClick:{
+ textArea.textContent = ""
+ textInput.text = ""
+ }
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+
+ }
+ Rectangle{
+ id: space
+ width: actionContainer.width/ 1.3
+ height:actionContainer.height / 16
+ color:"transparent"
+ }
+ Button{
+ id: exitButton
+ width: actionContainer.width/ 1.3
+ height:actionContainer.height/ 8
+ label: "Exit"
+ labelSize:24
+ buttonColor: buttonFillColor
+ borderColor: buttonBorderColor
+ onButtonClick:Qt.quit()
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.lighter(buttonFillColor,1.25) }
+ GradientStop { position: 0.67; color: Qt.darker(buttonFillColor,1.3) }
+ }
+ }
+ }
+ }
+
+ Rectangle{
+ id:dialogContainer
+
+ width: 2*fileMenu.width * partition; height: fileMenu.height
+ anchors.right:parent.right
+ color:"transparent"
+
+ Column {
+ anchors.centerIn: parent
+ spacing: parent.height /640
+ FileDialog{
+ id:fileDialog
+ height: 2*dialogContainer.height * partition; width: dialogContainer.width
+ onSelectChanged: textInput.text = selectedFile
+ }
+
+ Rectangle{
+ id:lowerPartition
+ height: dialogContainer.height * partition; width: dialogContainer.width
+ color: "transparent"
+
+ Rectangle{
+ id: nameField
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: "#806F6F6F" }
+ GradientStop { position: 1.0; color: "#136F6F6F" }
+ }
+
+ radius: 10
+ anchors {centerIn:parent; leftMargin: 15; rightMargin: 15; topMargin: 15}
+ height: parent.height-15; width: parent.width -20
+ border {color:"#4A4A4A"; width:1}
+
+ TextInput{
+ id: textInput
+ z:2
+ anchors {bottom: parent.bottom; topMargin: 10; horizontalCenter:parent.horizontalCenter}
+ width: parent.width - 10
+ height: parent.height -10
+ font.pointSize: 40
+ color:"lightsteelblue"
+ focus:true
+ }
+ Text{
+ id: textInstruction
+ anchors.centerIn:parent
+ text: "Select file name and press save or load"
+ font {pointSize: 11; weight:Font.Light; italic: true}
+ color: "lightblue"
+ z:2
+ opacity: (textInput.text == "") ? 1: 0
+ }
+ Text{
+ id:fieldLabel
+ anchors {top: parent.top; left: parent.left}
+ text: " file name: "
+ font {pointSize: 11; weight: Font.Light; italic: true}
+ color: "lightblue"
+ z:2
+ }
+ MouseArea{
+ anchors.centerIn:parent
+ width: nameField.width; height: nameField.height
+ onClicked:{
+ textInput.text = ""
+ textInput.focus = true
+ textInput.forceFocus()
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/MenuBar.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/MenuBar.qml
new file mode 100644
index 0000000..657e5dc
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/MenuBar.qml
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: menuBar
+ width: 1000; height:300
+ color:"transparent"
+ property color fileColor: "plum"
+ property color editColor: "powderblue"
+
+ property real partition: 1/10
+
+ Column{
+ anchors.fill: parent
+ //container for the header and the buttons
+ z: 1
+ Rectangle{
+ id: labelList
+ height:menuBar.height*partition
+ width: menuBar.width
+ color: "beige"
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#8C8F8C" }
+ GradientStop { position: 0.17; color: "#6A6D6A" }
+ GradientStop { position: 0.98;color: "#3F3F3F" }
+ GradientStop { position: 1.0; color: "#0e1B20" }
+ }
+ Text{
+ height: parent.height
+ anchors {right: labelRow.left ; verticalCenter: parent.bottom}
+ text: "menu: "
+ color: "lightblue"
+ font {weight: Font.Light; italic: true}
+ smooth: true
+ }
+
+ //row displays its children in a vertical row
+ Row{
+ id: labelRow
+ anchors.centerIn: parent
+ spacing:40
+ Button{
+ id: fileButton
+ height: 20; width: 50
+ label: "File"
+ buttonColor : menuListView.currentIndex == 0? fileColor : Qt.darker(fileColor, 1.5)
+ scale: menuListView.currentIndex == 0? 1.25: 1
+ labelSize: menuListView.currentIndex == 0? 16:12
+ radius: 1
+ smooth:true
+ //on a button click, change the list's currently selected item to FileMenu
+ onButtonClick: menuListView.currentIndex = 0
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: fileColor }
+ GradientStop { position: 1.0; color: "#136F6F6F" }
+ }
+ }
+ Button{
+ id: editButton
+ height: 20; width: 50
+ buttonColor : menuListView.currentIndex == 1? Qt.darker(editColor, 1.5) : Qt.darker(editColor, 1.9)
+ scale: menuListView.currentIndex == 1? 1.25: 1
+ label: "Edit"
+ radius: 1
+ labelSize: menuListView.currentIndex == 1? 16:12
+ smooth:true
+ //on a button click, change the list's currently selected item to EditMenu
+ onButtonClick: menuListView.currentIndex = 1
+ gradient: Gradient{
+ GradientStop { position: 0.0; color: editColor }
+ GradientStop { position: 1.0; color: "#136F6F6F" }
+ }
+ }
+ }
+ }
+
+ //list view will display a model according to a delegate
+ ListView{
+ id: menuListView
+ width:menuBar.width; height: 9*menuBar.height*partition
+
+ //the model contains the data
+ model: menuListModel
+
+ //control the movement of the menu switching
+ snapMode: ListView.SnapOneItem
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickDeceleration: 5000
+ highlightFollowsCurrentItem: true
+ highlightMoveDuration:240
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ }
+ }
+ //a list of visual items already have delegates handling their display
+ VisualItemModel{
+ id: menuListModel
+
+ FileMenu{
+ id:fileMenu
+ width: menuListView.width; height: menuListView.height
+ color: fileColor
+ }
+ EditMenu{
+ color: editColor
+ width: menuListView.width; height: menuListView.height
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/TextArea.qml b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/TextArea.qml
new file mode 100644
index 0000000..d58c159
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/TextArea.qml
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id:textArea
+
+ function paste(){ textEdit.paste()}
+ function copy() { textEdit.copy() }
+ function selectAll() { textEdit.selectAll() }
+
+ width :400; height:400
+
+ property color fontColor: "white"
+ property alias textContent: textEdit.text
+ Flickable{
+ id: flickArea
+ width: parent.width; height: parent.height
+ anchors.fill:parent
+
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.HorizontalFlick
+ interactive: true
+ //Will move the text Edit area to make the area visible when scrolled with keyboard strokes
+ function ensureVisible(r){
+ if (contentX >= r.x)
+ contentX = r.x;
+ else if (contentX+width <= r.x+r.width)
+ contentX = r.x+r.width-width;
+ if (contentY >= r.y)
+ contentY = r.y;
+ else if (contentY+height <= r.y+r.height)
+ contentY = r.y+r.height-height;
+ }
+
+ TextEdit{
+ id: textEdit
+ anchors.fill:parent
+ width:parent.width; height:parent.height
+ color:fontColor
+ focus: true
+ wrapMode: TextEdit.Wrap
+ font.pointSize:10
+ onCursorRectangleChanged: flickArea.ensureVisible(cursorRectangle)
+ selectByMouse: true
+ }
+ }
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/core/qmldir b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/qmldir
new file mode 100644
index 0000000..3f22778
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/core/qmldir
@@ -0,0 +1,13 @@
+
+Button ./Button.qml
+FileDialog ./FileDialog.qml
+TextArea ./TextArea.qml
+TextEditor ./TextEditor.qml
+EditMenu ./EditMenu.qml
+MenuBar ./MenuBar.qml
+
+plugin FileDialog ../plugins
+
+
+
+
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.cpp b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.cpp
new file mode 100644
index 0000000..7ea44ce
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.cpp
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "dialogPlugin.h"
+#include "directory.h"
+#include "file.h"
+#include <QtDeclarative/qdeclarative.h>
+
+void DialogPlugin::registerTypes(const char *uri){
+
+ //register the class Directory into QML as a "Directory" element version 1.0
+ qmlRegisterType<Directory>(uri, 1, 0, "Directory");
+ qmlRegisterType<File>(uri,1,0,"File");
+
+ //qRegisterMetaType<QDeclarativeListProperty<QString> > ("QDeclarativeListProperty<QString>");
+
+}
+
+//FileDialog is the plugin name (same as the TARGET in the project file) and DialogPlugin is the plugin classs
+Q_EXPORT_PLUGIN2(FileDialog, DialogPlugin); \ No newline at end of file
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.h b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.h
new file mode 100644
index 0000000..188e070
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/dialogPlugin.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DIALOGPLUGIN_H
+#define DIALOGPLUGIN_H
+
+#include <QtDeclarative/QDeclarativeExtensionPlugin>
+
+class DialogPlugin : public QDeclarativeExtensionPlugin
+{
+ Q_OBJECT
+
+ public:
+ //registerTypes is inherited from QDeclarativeExtensionPlugin
+ void registerTypes(const char *uri);
+
+};
+
+#endif
+
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.cpp b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.cpp
new file mode 100644
index 0000000..cddfa03
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.cpp
@@ -0,0 +1,219 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "directory.h"
+#include <QDebug>
+
+/*
+Directory constructor
+
+Initialize the saves directory and creates the file list
+*/
+Directory::Directory(QObject *parent) : QObject(parent)
+{
+
+
+ m_dir.cd( QDir::currentPath());
+
+ //go to the saved directory. if not found, create save directory
+ m_saveDir = "saves";
+ if (m_dir.cd(m_saveDir) == 0){
+ m_dir.mkdir(m_saveDir);
+ m_dir.cd(m_saveDir);
+ }
+ m_filterList << "*.txt";
+
+ refresh();
+}
+
+/*
+Directory::filesNumber
+Return the number of Files
+*/
+int Directory:: filesCount() const{
+ return m_fileList.size();
+}
+
+/*
+Function called to append data onto list property
+*/
+void appendFiles(QDeclarativeListProperty<File> * property, File * file){
+ //Do nothing. can't add to a directory using this method
+}
+
+/*
+Function called to retrieve file in the list using an index
+*/
+File* fileAt(QDeclarativeListProperty<File> * property, int index){
+ return static_cast< QList<File *> *>(property->data)->at(index);
+}
+
+/*
+Returns the number of files in the list
+*/
+int filesSize(QDeclarativeListProperty<File> * property){
+ return static_cast< QList<File *> *>(property->data)->size();
+}
+
+/*
+Function called to empty the list property contents
+*/
+void clearFilesPtr(QDeclarativeListProperty<File> *property){
+ return static_cast< QList<File *> *>(property->data)->clear();
+}
+
+/*
+Returns the list of files as a QDeclarativeListProperty.
+*/
+QDeclarativeListProperty<File> Directory::files(){
+
+ refresh();
+// return QDeclarativeListProperty<QString>(this,m_filePtrList); //not recommended in the docs
+ return QDeclarativeListProperty<File>( this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr );
+}
+
+/*
+Return te name of the currently selected file
+*/
+QString Directory::filename() const{
+ return currentFile.name();
+}
+
+/*
+Return the file's content as a string.
+*/
+QString Directory::fileContent() const{
+ return m_fileContent;
+}
+
+/*
+Set the file name of the current file
+*/
+void Directory::setFilename(const QString &str){
+ if(str != currentFile.name()){
+ currentFile.setName(str);
+ emit filenameChanged();
+ }
+}
+
+/*
+Set the content of the file as a string
+*/
+void Directory::setFileContent(const QString &str){
+ if(str != m_fileContent){
+ m_fileContent = str;
+ emit fileContentChanged();
+ }
+}
+
+/*
+Called from QML to save the file using the filename and file content.
+Saving makes sure that the file has a .txt extension.
+*/
+void Directory::saveFile(){
+
+ if(currentFile.name().size() == 0){
+ qWarning()<< "Empty filename. no save";
+ return;
+ }
+
+ QString extendedName = currentFile.name();
+ if(!currentFile.name().endsWith(".txt")){
+ extendedName.append(".txt");
+ }
+
+ QFile file( m_dir.filePath(extendedName) );
+ if (file.open(QFile::WriteOnly | QFile::Truncate)){
+ QTextStream outStream(&file);
+ outStream << m_fileContent;
+ }
+ file.close();
+ refresh();
+ emit directoryChanged();
+}
+
+/*
+Load the contents of a file.
+Only loads files with a .txt extension
+*/
+void Directory::loadFile(){
+
+ m_fileContent.clear();
+ QString extendedName = currentFile.name();
+ if(!currentFile.name().endsWith(".txt")){
+ extendedName.append(".txt");
+ }
+
+ QFile file( m_dir.filePath(extendedName) );
+ if (file.open(QFile::ReadOnly )){
+ QTextStream inStream(&file);
+
+ QString line;
+ do{
+ line = inStream.read(75);
+ m_fileContent.append(line);
+ }while (!line .isNull());
+ }
+ file.close();
+}
+
+/*
+Reloads the content of the files list. This is to ensure that the newly
+created files are added onto the list.
+*/
+void Directory::refresh(){
+ m_dirFiles = m_dir.entryList(m_filterList,QDir::Files,QDir::Name);
+ m_fileList.clear();
+
+ File * file;
+ for(int i = 0; i < m_dirFiles.size() ; i ++){
+
+ file = new File();
+
+ if(m_dirFiles.at(i).endsWith(".txt")){
+ QString name = m_dirFiles.at(i);
+ file->setName( name.remove(".txt",Qt::CaseSensitive));
+ }
+ else{
+ file->setName(m_dirFiles.at(i));
+ }
+ m_fileList.append(file);
+ }
+} \ No newline at end of file
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.h b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.h
new file mode 100644
index 0000000..417df68
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/directory.h
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DIRECTORY_H
+#define DIRECTORY_H
+
+#include "file.h"
+
+#include <QDir>
+#include <QStringList>
+#include <QTextStream>
+#include <QDeclarativeListProperty>
+#include <QObject>
+
+class Directory : public QObject{
+
+ Q_OBJECT
+
+ //number of files in the directory
+ Q_PROPERTY(int filesCount READ filesCount)
+
+ //list property containing file names as QString
+ Q_PROPERTY(QDeclarativeListProperty<File> files READ files CONSTANT )
+
+ //file name of the text file to read/write
+ Q_PROPERTY(QString filename READ filename WRITE setFilename NOTIFY filenameChanged)
+
+ //text content of the file
+ Q_PROPERTY(QString fileContent READ fileContent WRITE setFileContent NOTIFY fileContentChanged)
+
+ public:
+ Directory(QObject *parent = 0);
+
+ //properties' read functions
+ int filesCount() const;
+ QString filename() const;
+ QString fileContent() const;
+ QDeclarativeListProperty<File> files();
+
+ //properties' write functions
+ void setFilename(const QString &str);
+ void setFileContent(const QString &str);
+
+ //accessible from QML
+ Q_INVOKABLE void saveFile();
+ Q_INVOKABLE void loadFile();
+
+ signals:
+ void directoryChanged();
+ void filenameChanged();
+ void fileContentChanged();
+
+ private:
+ QDir m_dir;
+ QStringList m_dirFiles;
+ File currentFile;
+ QString m_saveDir;
+ QStringList m_filterList;
+
+ //contains the file data in QString format
+ QString m_fileContent;
+
+ //Registered to QML in a plugin. Accessible from QML as a property of Directory
+ QList<File *> m_fileList;
+
+ //refresh content of the directory
+ void refresh();
+};
+
+
+#endif
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.cpp b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.cpp
new file mode 100644
index 0000000..f4a360a
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "file.h"
+
+File::File(QObject *parent) : QObject(parent)
+{
+ m_name = "";
+}
+
+QString File::name() const{
+ return m_name;
+}
+void File::setName(const QString &str){
+ if(str != m_name){
+ m_name = str;
+ emit nameChanged();
+ }
+} \ No newline at end of file
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.h b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.h
new file mode 100644
index 0000000..b27a143
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/file.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FILE_H
+#define FILE_H
+
+
+#include <QString>
+#include <QObject>
+
+class File : public QObject{
+
+ Q_OBJECT
+
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
+
+ public:
+ File(QObject *parent = 0);
+
+ QString name() const;
+ void setName(const QString &str);
+
+ signals:
+ void nameChanged();
+
+ private:
+ QString m_name;
+};
+
+#endif \ No newline at end of file
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/filedialog.pro b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/filedialog.pro
new file mode 100644
index 0000000..6247747
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/filedialog.pro
@@ -0,0 +1,17 @@
+TEMPLATE = lib
+CONFIG += qt plugin
+QT += declarative
+
+DESTDIR += ../plugins
+OBJECTS_DIR = tmp
+MOC_DIR = tmp
+
+TARGET = FileDialog
+
+HEADERS += directory.h \
+ file.h \
+ dialogPlugin.h
+
+SOURCES += directory.cpp \
+ file.cpp \
+ dialogPlugin.cpp
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/qmldir b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/qmldir
new file mode 100644
index 0000000..c2b27da
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/filedialog/qmldir
@@ -0,0 +1 @@
+plugin FileDialog plugins
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/images/arrow.png b/examples/tutorials/gettingStarted/gsQml/parts/part5/images/arrow.png
new file mode 100644
index 0000000..14978c2
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/images/arrow.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_editmenu.png b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_editmenu.png
new file mode 100644
index 0000000..27feed5
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_editmenu.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_filemenu.png b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_filemenu.png
new file mode 100644
index 0000000..4d8f9f2
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_filemenu.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_newfile.png b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_newfile.png
new file mode 100644
index 0000000..680acfe
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/pics/qml-texteditor5_newfile.png
Binary files differ
diff --git a/examples/tutorials/gettingStarted/gsQml/parts/part5/qml-texteditor5.qmlproject b/examples/tutorials/gettingStarted/gsQml/parts/part5/qml-texteditor5.qmlproject
new file mode 100644
index 0000000..ed034df
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/parts/part5/qml-texteditor5.qmlproject
@@ -0,0 +1,18 @@
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ directory: "core"
+ directory: "filedialog"
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ importPaths: [ " ./plugins " ]
+}
diff --git a/examples/tutorials/gettingStarted/gsQml/texteditor.pro b/examples/tutorials/gettingStarted/gsQml/texteditor.pro
new file mode 100644
index 0000000..aa5306c
--- /dev/null
+++ b/examples/tutorials/gettingStarted/gsQml/texteditor.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+SUBDIRS = \
+ filedialog\
+
diff --git a/examples/webkit/imageanalyzer/README b/examples/webkit/imageanalyzer/README
new file mode 100644
index 0000000..9415b57
--- /dev/null
+++ b/examples/webkit/imageanalyzer/README
@@ -0,0 +1,20 @@
+This example demonstrates the use of Qt WebKit to make a hybrid application.
+
+Build instructions:
+
+ On Mac OS X:
+ In this directory:
+ qmake -spec macx-g++
+ make clean all
+ open imageanalyzer.app
+ On Linux/Unix:
+ In this directory:
+ qmake
+ make clean all
+ ./imageanalyzer
+
+ On Windows:
+ In this directory:
+ qmake
+ nmake clean all
+ debug\imageanalyzer.exe
diff --git a/examples/webkit/imageanalyzer/imageanalyzer.cpp b/examples/webkit/imageanalyzer/imageanalyzer.cpp
new file mode 100644
index 0000000..9f49a00
--- /dev/null
+++ b/examples/webkit/imageanalyzer/imageanalyzer.cpp
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QNetworkReply>
+#include <QNetworkRequest>
+#include <QNetworkAccessManager>
+#include <QNetworkDiskCache>
+#include "imageanalyzer.h"
+
+/*!
+ * This class operates as follows:
+ * Parent calls the slot startAnalysis which shoves a list of QStrings into URLQueue and then calls fetchURLs.
+ * FetchURLs sends out HTTP GETs for each image it can't get out of the cache.
+ * As the responses come in, handleReply tries to create an image out of each and pushes those images into imageQueue.
+ * On the last (detected by no outstandingFetches and URLQueue.isEmpty()) call to queueImage (from handleReply)
+ * a thread is forked to process all the images. When it finishes, it emits a finished signal that is received
+ * by our JavaScript code.
+ */
+
+//! [ ImageAnalyzer - Constructor ]
+ImageAnalyzer::ImageAnalyzer(QNetworkDiskCache* netcache, QObject* parent)
+ : QObject(parent), m_cache(netcache), m_outstandingFetches(0)
+{
+ /* ImageAnalyzer only wants to receive http responses
+ for requests that it makes, so that's why it has its own
+ QNetworkAccessManager. */
+ m_network = new QNetworkAccessManager(this);
+ m_watcher = new QFutureWatcher<QRgb>(this);
+ /* We want to share a cache with the web browser,
+ in case it has some images we want: */
+ m_network->setCache(m_cache);
+
+ QObject::connect(m_network, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(handleReply(QNetworkReply*)));
+ QObject::connect(m_watcher, SIGNAL(finished()),
+ this, SLOT(doneProcessing()));
+ QObject::connect(m_watcher, SIGNAL(progressValueChanged(int)),
+ this, SLOT(progressStatus(int)));
+}
+//! [ ImageAnalyzer - Constructor ]
+ImageAnalyzer::~ImageAnalyzer()
+{
+ delete(m_watcher);
+}
+
+
+QRgb ImageAnalyzer::lastResults()
+{
+ int rTot = 0;
+ int bTot = 0;
+ int gTot = 0;
+ int count = m_watcher->future().results().size();
+ foreach(const QRgb & triplet, m_watcher->future().results())
+ {
+ rTot += qRed(triplet);
+ bTot += qBlue(triplet);
+ gTot += qGreen(triplet);
+ }
+ return qRgb(rTot/count, bTot/count, gTot/count);
+}
+
+float ImageAnalyzer::lastRed() { return qRed(lastResults())/2.55; }
+float ImageAnalyzer::lastGreen() { return qGreen(lastResults())/2.55; }
+float ImageAnalyzer::lastBlue() { return qBlue(lastResults())/2.55; }
+
+void ImageAnalyzer::progressStatus(int newstat)
+{
+ emit updateProgress(newstat, m_watcher->progressMaximum());
+}
+
+
+bool ImageAnalyzer::isBusy()
+{
+ return m_watcher->isRunning();
+}
+
+
+//! [ ImageAnalyzer - startAnalysis ]
+void ImageAnalyzer::startAnalysis(const QStringList & urls)
+{
+ m_URLQueue = urls;
+ fetchURLs();
+}
+//! [ ImageAnalyzer - startAnalysis ]
+
+/*!
+ * Analyzes the entire queue - just starts all our http GETs.
+ */
+//! [ ImageAnalyzer - fetchURLs ]
+void ImageAnalyzer::fetchURLs()
+{
+ while (!m_URLQueue.isEmpty())
+ {
+ QString url = m_URLQueue.takeFirst();
+ QUrl URL = QUrl(url);
+ QIODevice * pData = m_cache->data(URL);
+ // Is image already loaded in cache?
+ if (pData == 0) {
+ // HTTP Get image over network.
+ m_outstandingFetches++;
+ QNetworkRequest request = QNetworkRequest(URL);
+ request.setRawHeader("User-Agent", "Nokia - Custom QT app");
+ m_network->get(request);
+ } else {
+ // Get image from cache
+ QImage image;
+ image.load(pData, 0);
+ if (!image.isNull())
+ queueImage(image);
+ delete(pData);
+ }
+ }
+}
+//! [ ImageAnalyzer - fetchURLs ]
+/*
+ * Slot to handle the incoming responses from our http GETs
+ */
+//! [ ImageAnalyzer - handleReply ]
+void ImageAnalyzer::handleReply(QNetworkReply * pReply)
+{
+ m_outstandingFetches--;
+ if (pReply->error()) {
+ qDebug() << "Error code" << pReply->error();
+ qDebug() << "Http code" << pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
+ return;
+ }
+ QImage image;
+ image.load(pReply, 0);
+ pReply->deleteLater();
+ if (image.isNull()) {
+ qDebug() << "bad image";
+ qDebug() << pReply->rawHeaderList();
+ foreach(QByteArray element, pReply->rawHeaderList()) {
+ qDebug() << element << " = " << pReply->rawHeader(element);
+ }
+ return;
+ }
+ queueImage(image);
+}
+//! [ ImageAnalyzer - handleReply ]
+
+void ImageAnalyzer::doneProcessing()
+{
+ m_imageQueue = QList<QImage>();
+ emit finishedAnalysis();
+}
+//! [ ImageAnalyzer - queueImage ]
+void ImageAnalyzer::queueImage(QImage img)
+{
+ if (!img.isNull())
+ m_imageQueue << img;
+
+ if (m_outstandingFetches == 0 && m_URLQueue.isEmpty()) {
+ m_watcher->setFuture(QtConcurrent::mapped(m_imageQueue, averageRGB));
+ }
+}
+//! [ ImageAnalyzer - queueImage ]
+
+//! [ ImageAnalyzer - averageRGB ]
+QRgb averageRGB(const QImage &img)
+{
+ int pixelCount = img.width() * img.height();
+ int rAvg, gAvg, bAvg;
+
+ // We waste some time here:
+ for (int timeWaster=0; timeWaster < 100; timeWaster++) {
+ quint64 rTot = 0;
+ quint64 gTot = 0;
+ quint64 bTot = 0;
+ for (int i=0; i < img.width(); i++) {
+ for (int j=0; j < img.height(); j++) {
+ QRgb pixel = img.pixel(i,j);
+ rTot += qRed(pixel);
+ gTot += qGreen(pixel);
+ bTot += qBlue(pixel);
+ }
+ }
+ rAvg = (rTot)/(pixelCount);
+ gAvg = (gTot)/(pixelCount);
+ bAvg = (bTot)/(pixelCount);
+ }
+ return qRgb(rAvg, gAvg, bAvg);
+}
+//! [ ImageAnalyzer - averageRGB ]
diff --git a/examples/webkit/imageanalyzer/imageanalyzer.h b/examples/webkit/imageanalyzer/imageanalyzer.h
new file mode 100644
index 0000000..5a96909
--- /dev/null
+++ b/examples/webkit/imageanalyzer/imageanalyzer.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef IMAGEANALYZER_H
+#define IMAGEANALYZER_H
+
+#include <QFutureWatcher>
+#include <QtGui>
+
+QT_BEGIN_NAMESPACE
+class QNetworkAccessManager;
+class QNetworkReply;
+class QNetworkDiskCache;
+QT_END_NAMESPACE
+
+//! [ ImageAnalyzer - public interface ]
+class ImageAnalyzer : public QObject
+{
+ Q_OBJECT
+public:
+ ImageAnalyzer(QNetworkDiskCache * netcache, QObject * parent=0);
+
+ QRgb lastResults();
+ float lastRed();
+ float lastGreen();
+ float lastBlue();
+ bool isBusy();
+ Q_PROPERTY(bool busy READ isBusy);
+ Q_PROPERTY(float red READ lastRed);
+ Q_PROPERTY(float green READ lastGreen);
+ Q_PROPERTY(float blue READ lastBlue);
+ ~ImageAnalyzer();
+
+public slots:
+ /*! initiates analysis of all the urls in the list */
+ void startAnalysis(const QStringList & urls);
+
+signals:
+ void finishedAnalysis();
+ void updateProgress(int completed, int total);
+ //! [ ImageAnalyzer - public interface ]
+
+private slots:
+ void handleReply(QNetworkReply*);
+ void doneProcessing();
+ void progressStatus(int);
+
+private:
+ QRgb processImages();
+ void fetchURLs();
+ void queueImage(QImage img);
+
+ //! [ ImageAnalyzer - private members ]
+private:
+ QNetworkAccessManager* m_network;
+ QNetworkDiskCache* m_cache;
+ QStringList m_URLQueue;
+ QList<QImage> m_imageQueue;
+ int m_outstandingFetches;
+ QFutureWatcher<QRgb> * m_watcher;
+ //! [ ImageAnalyzer - private members ]
+};
+
+QRgb averageRGB(const QImage &img);
+
+#endif
diff --git a/examples/webkit/imageanalyzer/imageanalyzer.pro b/examples/webkit/imageanalyzer/imageanalyzer.pro
new file mode 100644
index 0000000..c9a0ed1
--- /dev/null
+++ b/examples/webkit/imageanalyzer/imageanalyzer.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+HEADERS = imageanalyzer.h \
+ mainwindow.h
+SOURCES = imageanalyzer.cpp \
+ main.cpp \
+ mainwindow.cpp
+
+QT += network webkit
+
+RESOURCES = resources/imageanalyzer.qrc
+
+OTHER_FILES += html/index.html README ../webkit-bridge-tutorial.qdoc outline.txt
+
+
diff --git a/examples/webkit/imageanalyzer/main.cpp b/examples/webkit/imageanalyzer/main.cpp
new file mode 100644
index 0000000..c3f04de
--- /dev/null
+++ b/examples/webkit/imageanalyzer/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "imageanalyzer.h"
+#include "mainwindow.h"
+
+int main(int argc, char* argv[])
+{
+ QApplication app(argc, argv);
+
+ MainWin win;
+ win.show();
+ return app.exec();
+}
+
diff --git a/examples/webkit/imageanalyzer/mainwindow.cpp b/examples/webkit/imageanalyzer/mainwindow.cpp
new file mode 100644
index 0000000..d89098e
--- /dev/null
+++ b/examples/webkit/imageanalyzer/mainwindow.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "mainwindow.h"
+#include "imageanalyzer.h"
+
+#include <QWebFrame>
+#include <QWebElementCollection>
+#include <QNetworkDiskCache>
+
+/*
+ * Default Constructor
+ */
+//! [MainWindow - constructor]
+MainWin::MainWin(QWidget * parent) : QWebView(parent)
+{
+ m_network = new QNetworkAccessManager(this);
+ m_cache = new QNetworkDiskCache(this);
+ m_cache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation) + "/imageanalyzer");
+ m_cache->setMaximumCacheSize(1000000); //set the cache to 10megs
+ m_network->setCache(m_cache);
+ page()->setNetworkAccessManager(m_network);
+
+ //! The object we will expose to JavaScript engine:
+ m_analyzer = new ImageAnalyzer(m_cache, this);
+
+ // Signal is emitted before frame loads any web content:
+ QObject::connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
+ this, SLOT(addJSObject()));
+
+ // qrc:// URLs refer to resources. See imagenalayzer.qrc
+ QUrl startURL = QUrl("qrc:/index.html");
+
+ // Load web content now!
+ setUrl(startURL);
+}
+//! [MainWindow - constructor]
+
+//! [MainWindow - addJSObject]
+void MainWin::addJSObject() {
+ // Add pAnalyzer to JavaScript Frame as member "imageAnalyzer".
+ page()->mainFrame()->addToJavaScriptWindowObject(QString("imageAnalyzer"), m_analyzer);
+}
+//! [MainWindow - addJSObject]
diff --git a/examples/webkit/imageanalyzer/mainwindow.h b/examples/webkit/imageanalyzer/mainwindow.h
new file mode 100644
index 0000000..3c943dc
--- /dev/null
+++ b/examples/webkit/imageanalyzer/mainwindow.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QWebView>
+
+class ImageAnalyzer;
+QT_BEGIN_NAMESPACE
+class QNetworkDiskCache;
+QT_END_NAMESPACE
+
+class MainWin : public QWebView
+{
+ Q_OBJECT
+
+public:
+ explicit MainWin(QWidget * parent = 0);
+
+private:
+ ImageAnalyzer * m_analyzer;
+ QNetworkAccessManager * m_network;
+ QNetworkDiskCache * m_cache;
+
+private slots:
+ void addJSObject();
+
+};
+#endif
diff --git a/examples/webkit/imageanalyzer/resources/imageanalyzer.qrc b/examples/webkit/imageanalyzer/resources/imageanalyzer.qrc
new file mode 100644
index 0000000..fe9a5df
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/imageanalyzer.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+ <file>index.html</file>
+ <file>images/mtRainier.jpg</file>
+ <file>images/bellaCoola.jpg</file>
+ <file>images/trees.jpg</file>
+ <file>images/flower.jpg</file>
+ <file>images/seaShell.jpg</file>
+</qresource>
+</RCC>
diff --git a/examples/webkit/imageanalyzer/resources/images/README b/examples/webkit/imageanalyzer/resources/images/README
new file mode 100644
index 0000000..176a1da
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/README
@@ -0,0 +1,2 @@
+The images are under public domain and were obtained from
+http://publicdomainpictures.net
diff --git a/examples/webkit/imageanalyzer/resources/images/bellaCoola.jpg b/examples/webkit/imageanalyzer/resources/images/bellaCoola.jpg
new file mode 100644
index 0000000..f90ed54
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/bellaCoola.jpg
Binary files differ
diff --git a/examples/webkit/imageanalyzer/resources/images/flower.jpg b/examples/webkit/imageanalyzer/resources/images/flower.jpg
new file mode 100644
index 0000000..6b7f6be
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/flower.jpg
Binary files differ
diff --git a/examples/webkit/imageanalyzer/resources/images/mtRainier.jpg b/examples/webkit/imageanalyzer/resources/images/mtRainier.jpg
new file mode 100644
index 0000000..d09a3f2
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/mtRainier.jpg
Binary files differ
diff --git a/examples/webkit/imageanalyzer/resources/images/seaShell.jpg b/examples/webkit/imageanalyzer/resources/images/seaShell.jpg
new file mode 100644
index 0000000..c5005a9
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/seaShell.jpg
Binary files differ
diff --git a/examples/webkit/imageanalyzer/resources/images/trees.jpg b/examples/webkit/imageanalyzer/resources/images/trees.jpg
new file mode 100644
index 0000000..083b26d
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/images/trees.jpg
Binary files differ
diff --git a/examples/webkit/imageanalyzer/resources/index.html b/examples/webkit/imageanalyzer/resources/index.html
new file mode 100644
index 0000000..6532951
--- /dev/null
+++ b/examples/webkit/imageanalyzer/resources/index.html
@@ -0,0 +1,133 @@
+
+<html>
+ <body>
+ <!-- [ images list ] -->
+ <div style="float:right; width:50%; border-left: solid 1px black">
+ <div id="listdiv" align="center">
+ <h5>Images to be analyzed:</h5>
+ <select multiple size=10 id=imglist style="width:80%"></select>
+ <br />
+ <input type="button" id="evalbutton" value="Analyze" onclick="analyzeImages()" />
+ </div>
+ </div>
+ <!-- [ images list ] -->
+ <div style="width:50%">
+ <div id="titleblock" align="center">
+ <h2>Image Analyzer</h2>
+ </div>
+ <div id=outputdiv align=center>
+ <h4>Status: <span id=status>Idle</span></h4>
+ <h5>
+ Latest Results:<br />
+ Red: <span id=redval style="color:red">n/a</span><br />
+ Green: <span id=greenval style="color:green">n/a</span><br />
+ Blue: <span id=blueval style="color:blue">n/a</span><br />
+ </h5>
+ <h3>Click on images below to select for analysis</h3>
+ </div>
+ </div>
+ <!-- [ sample images ] -->
+ <div id=imagediv style="clear:both; text-align:center">
+ <hr/>
+ <img src="images/mtRainier.jpg" height=150px onclick='return addImage(this);' />
+ <img src="images/bellaCoola.jpg" height=150px onclick='return addImage(this);'/>
+ <img src="images/seaShell.jpg" height=150px onclick='return addImage(this);'/>
+ <!-- [ sample images ] -->
+ <img src="images/flower.jpg" height=150px onclick='return addImage(this);'/>
+ <img src="images/trees.jpg" height=150px onclick='return addImage(this);'/>
+ </div>
+
+ </body>
+</html>
+
+<script type="text/javascript">
+ var remaining = 0;
+ var connected = false;
+ //We use this function because connect statements resolve their target once, imediately
+ //not at signal emission so they must be connected once the imageAnalyzer object has been added to the frame
+ //! <!-- [ connect slots ] -->
+ function connectSlots()
+ {
+ if ( !connected ) {
+ connected = true;
+ imageAnalyzer.finishedAnalysis.connect(this, finished);
+ imageAnalyzer.updateProgress.connect(this, updateProg);
+ }
+ }
+ //! <!-- [ connect slots ] -->
+
+ function finished() {
+ setStatus('Idle');
+ setResults(imageAnalyzer.red.toFixed(2), imageAnalyzer.green.toFixed(2), imageAnalyzer.blue.toFixed(2));
+ }
+ //This will function as the recieving "slot" for the progress signal
+ function updateProg(complete, max)
+ {
+ var oldRemaining = remaining;
+ remaining = max - complete;
+ pullList(oldRemaining - remaining);
+ //Prevent results getting messed up if we don't get signals in order
+ if( imageAnalyzer.busy ) {
+ setStatus('Processing (' + complete + ' of ' + max + ' completed)');
+ setResults('Calculating','Calculating','Calculating');
+ }
+ }
+
+//! <!-- [ analyzeImages ] -->
+function analyzeImages() {
+ connectSlots();
+ var imglist = document.getElementsByTagName('option');
+ if (imglist.length > 0) {
+ stringlist = [];
+ for(var i=0; i<imglist.length; i++) {
+ stringlist[i]=imglist[i].value;
+ }
+ if (!imageAnalyzer.busy) {
+ remaining = stringlist.length;
+ imageAnalyzer.startAnalysis(stringlist);
+ } else {
+ alert("Processing, please wait until finished.");
+ }
+//! <!-- [ analyzeImages ] -->
+ } else {
+ alert('No images selected. Click on one or more images to select them for analysis.');
+ }
+}
+function clearList() {
+ var imglist = document.getElementById('imglist');
+ while(imglist.length > 0) {
+ imglist.removeChild(imglist.childNodes[0]);
+ }
+}
+function pullList(count) {
+ var imglist = document.getElementById('imglist');
+ while(imglist.length > 0 && count > 0) {
+ imglist.removeChild(imglist.childNodes[0]);
+ count--;
+ }
+}
+function setStatus(statusString) {
+ document.getElementById('status').innerHTML = statusString;
+}
+
+function setResults(red, green, blue) {
+ if (! isNaN(red) ) { red += " %"; }
+ if (! isNaN(green) ) { green += " %"; }
+ if (! isNaN(blue) ) { blue += " %"; }
+ document.getElementById('redval').innerHTML = red;
+ document.getElementById('greenval').innerHTML = green;
+ document.getElementById('blueval').innerHTML = blue;
+}
+//! <!-- [ addImage ] -->
+function addImage(newimg) {
+ var imglist = document.getElementById('imglist');
+ var curChildren = imglist.childNodes;
+ var newline = document.createElement('option');
+ newline.innerHTML = newimg.src.substring(newimg.src.lastIndexOf('/')+1);
+ newline.value = newimg.src;
+ imglist.appendChild(newline);
+}
+//! <!-- [ addImage ] -->
+</script>
+
+
diff --git a/examples/webkit/webkit.pro b/examples/webkit/webkit.pro
index 76c8801..6a1d8f8 100644
--- a/examples/webkit/webkit.pro
+++ b/examples/webkit/webkit.pro
@@ -4,6 +4,7 @@ SUBDIRS += domtraversal \
previewer \
fancybrowser \
simpleselector \
+ imageanalyzer \
framecapture
contains(QT_CONFIG, openssl):SUBDIRS += googlechat
diff --git a/examples/widgets/icons/icons.pro b/examples/widgets/icons/icons.pro
index 39c7ab2..48b2da9 100644
--- a/examples/widgets/icons/icons.pro
+++ b/examples/widgets/icons/icons.pro
@@ -17,7 +17,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- imageFiles.sources = images/*
+ imageFiles.files = images/*
wincewm*: {
imageFiles.path = "/My Documents/My Pictures"
} else {
diff --git a/examples/widgets/movie/movie.pro b/examples/widgets/movie/movie.pro
index 517fec7..d59bf2e 100644
--- a/examples/widgets/movie/movie.pro
+++ b/examples/widgets/movie/movie.pro
@@ -11,7 +11,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources += *.mng
+ addFiles.files += *.mng
addFiles.path = .
DEPLOYMENT += addFiles
DEPLOYMENT_PLUGIN += qmng
diff --git a/examples/xml/dombookmarks/dombookmarks.pro b/examples/xml/dombookmarks/dombookmarks.pro
index f906d2f..80bbec4 100644
--- a/examples/xml/dombookmarks/dombookmarks.pro
+++ b/examples/xml/dombookmarks/dombookmarks.pro
@@ -14,7 +14,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
diff --git a/examples/xml/htmlinfo/htmlinfo.pro b/examples/xml/htmlinfo/htmlinfo.pro
index 5e9c8ca..94b3a07 100644
--- a/examples/xml/htmlinfo/htmlinfo.pro
+++ b/examples/xml/htmlinfo/htmlinfo.pro
@@ -2,7 +2,7 @@ SOURCES += main.cpp
QT -= gui
wince*|symbian:{
- htmlfiles.sources = *.html
+ htmlfiles.files = *.html
htmlfiles.path = .
DEPLOYMENT += htmlfiles
}
diff --git a/examples/xml/saxbookmarks/saxbookmarks.pro b/examples/xml/saxbookmarks/saxbookmarks.pro
index 7293bd1..d4b09b6 100644
--- a/examples/xml/saxbookmarks/saxbookmarks.pro
+++ b/examples/xml/saxbookmarks/saxbookmarks.pro
@@ -14,7 +14,7 @@ sources.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks
INSTALLS += target sources
wince*: {
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
@@ -22,7 +22,7 @@ wince*: {
symbian: {
TARGET.UID3 = 0xA000C60A
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = /data/qt/saxbookmarks
DEPLOYMENT += addFiles
}
diff --git a/header.FDL b/header.FDL
index 4f99540..264a1ff 100644
--- a/header.FDL
+++ b/header.FDL
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/lib/fonts/dejavu_sans_11_50.qpf2 b/lib/fonts/dejavu_sans_11_50.qpf2
new file mode 100644
index 0000000..c88d099
--- /dev/null
+++ b/lib/fonts/dejavu_sans_11_50.qpf2
Binary files differ
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf
new file mode 100644
index 0000000..069cdfa
--- /dev/null
+++ b/mkspecs/common/clang.conf
@@ -0,0 +1,17 @@
+#
+# Qmake configuration for Clang on Linux and Mac
+#
+
+QMAKE_CC = clang
+QMAKE_CXX = clang++
+
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+
+CONFIG += clang_pch_style
+QMAKE_PCH_OUTPUT_EXT = .pch
+
+QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE = -Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf
new file mode 100644
index 0000000..eb5b7d6
--- /dev/null
+++ b/mkspecs/common/g++-base.conf
@@ -0,0 +1,30 @@
+#
+# Qmake configuration for the GNU C++ compiler
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+QMAKE_CC = gcc
+
+QMAKE_LINK_C = $$QMAKE_CC
+QMAKE_LINK_C_SHLIB = $$QMAKE_CC
+
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g
+
+QMAKE_CXX = g++
+
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
+
+QMAKE_PCH_OUTPUT_EXT = .gch
+
+QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/g++-macx.conf b/mkspecs/common/g++-macx.conf
new file mode 100644
index 0000000..2251157
--- /dev/null
+++ b/mkspecs/common/g++-macx.conf
@@ -0,0 +1,32 @@
+#
+# Qmake configuration for the GNU C++ compiler on Mac OS X
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(g++-base.conf)
+
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g $$QMAKE_CFLAGS_DWARF2
+
+QMAKE_LFLAGS_STATIC_LIB += -all_load
+
+QMAKE_CFLAGS_X86_64 += -Xarch_x86_64 -mmacosx-version-min=10.5
+QMAKE_CFLAGS_PPC_64 += -Xarch_ppc64 -mmacosx-version-min=10.5
+
+QMAKE_CXXFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_CXXFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+QMAKE_OBJECTIVE_CFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_OBJECTIVE_CFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+QMAKE_LFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_LFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf
new file mode 100644
index 0000000..96e301e
--- /dev/null
+++ b/mkspecs/common/g++-unix.conf
@@ -0,0 +1,14 @@
+#
+# Qmake configuration for the GNU C++ compiler on *nix-systems
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(g++-base.conf)
+
+QMAKE_LFLAGS_RELEASE += -Wl,-O1
+QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
index 0d511fc..c5a34a9 100644
--- a/mkspecs/common/g++.conf
+++ b/mkspecs/common/g++.conf
@@ -1,54 +1,12 @@
#
-# qmake configuration for common gcc
+# Notice: g++.conf has been split into g++-base.conf and g++-unix.conf
+#
+# This file will make sure that anyone who's still including g++.conf
+# directly will get a warning and an explanation of how to fix their mkspec
#
-QMAKE_CC = gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
-QMAKE_CXX = g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_LINK = g++
-QMAKE_LINK_SHLIB = g++
-QMAKE_LINK_C = gcc
-QMAKE_LINK_C_SHLIB = gcc
-QMAKE_LFLAGS +=
-QMAKE_LFLAGS_RELEASE += -Wl,-O1
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -shared
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_SONAME += -Wl,-soname,
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
-QMAKE_LFLAGS_RPATH = -Wl,-rpath,
-
-QMAKE_PCH_OUTPUT_EXT = .gch
+warning($$escape_expand("Your mkspec is including 'common/g++.conf', but the mkspecs have been refactored\\n\\tTo fix this include 'common/gcc-base-$${TARGET_PLATFORM}.conf and 'common/g++-$${TARGET_PLATFORM}.conf' instead"))
-# -Bsymbolic-functions (ld) support
-QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
-QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+# We include gcc-base-unix.conf and g++-unix.conf to keep the behavior of the old g++.conf
+include(gcc-base-unix.conf)
+include(g++-unix.conf)
diff --git a/mkspecs/common/gcc-base-macx.conf b/mkspecs/common/gcc-base-macx.conf
new file mode 100644
index 0000000..5c9a8a1
--- /dev/null
+++ b/mkspecs/common/gcc-base-macx.conf
@@ -0,0 +1,43 @@
+#
+# Base qmake configuration for GCC on Mac OS X
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(gcc-base.conf)
+
+QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
+
+QMAKE_CFLAGS_X86 += -arch i386
+QMAKE_CFLAGS_X86_64 += -arch x86_64
+QMAKE_CFLAGS_PPC += -arch ppc
+QMAKE_CFLAGS_PPC_64 += -arch ppc64
+QMAKE_CFLAGS_DWARF2 += -gdwarf-2
+
+QMAKE_CXXFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_CXXFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_CXXFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_CXXFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
+
+QMAKE_OBJECTIVE_CFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_OBJECTIVE_CFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_OBJECTIVE_CFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_OBJECTIVE_CFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_LFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_LFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_LFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_LFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_LFLAGS += -headerpad_max_install_names
+QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_INCREMENTAL += -undefined suppress -flat_namespace
+QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
+QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
+QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
diff --git a/mkspecs/common/gcc-base-unix.conf b/mkspecs/common/gcc-base-unix.conf
new file mode 100644
index 0000000..dc8d7e4
--- /dev/null
+++ b/mkspecs/common/gcc-base-unix.conf
@@ -0,0 +1,21 @@
+#
+# Base qmake configuration for GCC on *nix-systems
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(gcc-base.conf)
+
+QMAKE_LFLAGS_SHLIB += -shared
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_SONAME += -Wl,-soname,
+QMAKE_LFLAGS_THREAD +=
+QMAKE_LFLAGS_RPATH = -Wl,-rpath,
+
+# -Bsymbolic-functions (ld) support
+QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
+QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf
new file mode 100644
index 0000000..0e90666
--- /dev/null
+++ b/mkspecs/common/gcc-base.conf
@@ -0,0 +1,60 @@
+#
+# This file is used as a basis for the following compilers:
+#
+# - The GNU C++ compiler (g++)
+# - LLVM
+# - Clang
+#
+# Platform-specific options shared by these compilers are put into:
+#
+# - gcc-base-macx.conf
+# - gcc-base-unix.conf
+#
+# These base files are then combined with configurations for each compiler:
+#
+# - g++-base.conf
+# - g++-macx.conf
+# - g++-unix.conf
+# - llvm.conf
+# - clang.conf
+#
+# The combination happens in the top level mkspec, by including a platform-
+# specific version of the base-file, for example gcc-base-macx.conf, and then
+# a (possibly platform-specific) version of the actual compiler configuration,
+# for example g++-macx.conf.
+#
+# If you are making changes to any of these files, please consider the
+# possible effect it may have due to these include-rules, and whether it
+# might make more sense to share the rule or make it more specific.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+QMAKE_CFLAGS += -pipe
+QMAKE_CFLAGS_DEPS += -M
+QMAKE_CFLAGS_WARN_ON += -Wall -W
+QMAKE_CFLAGS_WARN_OFF += -w
+QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_DEBUG += -g
+QMAKE_CFLAGS_SHLIB += -fPIC
+QMAKE_CFLAGS_STATIC_LIB += -fPIC
+QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
+QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
+QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
+QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
+QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
+QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+
+QMAKE_LFLAGS +=
+QMAKE_LFLAGS_DEBUG +=
+QMAKE_LFLAGS_APP +=
+QMAKE_LFLAGS_RELEASE +=
+
diff --git a/mkspecs/common/llvm.conf b/mkspecs/common/llvm.conf
index 70f52aa..86e0ab4 100644
--- a/mkspecs/common/llvm.conf
+++ b/mkspecs/common/llvm.conf
@@ -1,49 +1,16 @@
#
-# qmake configuration for common gcc
+# Qmake configuration for LLVM on Linux and Mac
#
-QMAKE_CC = llvm-gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CC = llvm-gcc
+QMAKE_CXX = llvm-g++
-QMAKE_CXX = llvm-g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
-QMAKE_LINK = llvm-g++
-QMAKE_LINK_SHLIB = llvm-g++
-QMAKE_LFLAGS +=
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -shared
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_SONAME += -Wl,-soname,
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_RPATH = -Wl,-rpath,
+QMAKE_PCH_OUTPUT_EXT = .gch
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-# -Bsymbolic-functions (ld) support
-QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
-QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE \ No newline at end of file
diff --git a/mkspecs/common/mac-g++.conf b/mkspecs/common/mac-g++.conf
deleted file mode 100644
index 29b7408..0000000
--- a/mkspecs/common/mac-g++.conf
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# qmake configuration for common gcc on Mac OS X
-#
-
-include(mac.conf)
-
-QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g -gdwarf-2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
-QMAKE_CFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_OBJECTIVE_CFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_CFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_OBJECTIVE_CFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_CFLAGS_PPC += -arch ppc
-QMAKE_OBJECTIVE_CFLAGS_PPC += -arch ppc
-QMAKE_CFLAGS_X86 += -arch i386
-QMAKE_OBJECTIVE_CFLAGS_X86 += -arch i386
-QMAKE_CFLAGS_DWARF2 += -gdwarf-2
-
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_CXXFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_CXXFLAGS_PPC += -arch ppc
-QMAKE_CXXFLAGS_X86 += -arch i386
-QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_LINK = $$QMAKE_CXX
-QMAKE_LINK_SHLIB = $$QMAKE_CXX
-QMAKE_LINK_C = $$QMAKE_CC
-QMAKE_LINK_C_SHLIB = $$QMAKE_CC
-QMAKE_LFLAGS += -headerpad_max_install_names
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g -gdwarf-2
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_INCREMENTAL+= -undefined suppress -flat_namespace
-QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_LFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_LFLAGS_PPC += -arch ppc
-QMAKE_LFLAGS_X86 += -arch i386
-QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
-# -all_load requred to make Objective-C categories work in static builds.
-QMAKE_LFLAGS_STATIC_LIB += -all_load
-QMAKE_LFLAGS_RPATH +=
-
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-QMAKE_OBJCFLAGS_PRECOMPILE += -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_OBJCXXFLAGS_PRECOMPILE += -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/mac-llvm.conf b/mkspecs/common/mac-llvm.conf
deleted file mode 100644
index 4ff088c..0000000
--- a/mkspecs/common/mac-llvm.conf
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# qmake configuration for common gcc on Mac OS X
-#
-
-include(mac.conf)
-
-QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
-QMAKE_CC = llvm-gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
-QMAKE_CFLAGS_PPC_64 += -arch ppc64
-QMAKE_OBJECTIVE_CFLAGS_PPC_64 += -arch ppc64
-QMAKE_CFLAGS_X86_64 += -arch x86_64
-QMAKE_OBJECTIVE_CFLAGS_X86_64 += -arch x86_64
-QMAKE_CFLAGS_PPC += -arch ppc
-QMAKE_OBJECTIVE_CFLAGS_PPC += -arch ppc
-QMAKE_CFLAGS_X86 += -arch i386
-QMAKE_OBJECTIVE_CFLAGS_X86 += -arch i386
-QMAKE_CFLAGS_DWARF2 += -gdwarf-2
-
-QMAKE_CXX = llvm-g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PPC_64 += -arch ppc64
-QMAKE_CXXFLAGS_X86_64 += -arch x86_64
-QMAKE_CXXFLAGS_PPC += -arch ppc
-QMAKE_CXXFLAGS_X86 += -arch i386
-QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_LINK = $$QMAKE_CXX
-QMAKE_LINK_SHLIB = $$QMAKE_CXX
-QMAKE_LFLAGS += -headerpad_max_install_names
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_INCREMENTAL+= -undefined suppress -flat_namespace
-QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_PPC_64 += -arch ppc64
-QMAKE_LFLAGS_X86_64 += -arch x86_64
-QMAKE_LFLAGS_PPC += -arch ppc
-QMAKE_LFLAGS_X86 += -arch i386
-QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_RPATH +=
-
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-QMAKE_OBJCFLAGS_PRECOMPILE += -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_OBJCXXFLAGS_PRECOMPILE += -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/mac/qplatformdefs.h b/mkspecs/common/mac/qplatformdefs.h
new file mode 100644
index 0000000..99d64ef
--- /dev/null
+++ b/mkspecs/common/mac/qplatformdefs.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec 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 QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#include "qglobal.h"
+
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#define QT_NO_LIBRARY_UNLOAD
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/ipc.h>
+#include <sys/time.h>
+#include <sys/shm.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+#include "../common/posix/qplatformdefs.h"
+
+#undef QT_OPEN_LARGEFILE
+#undef QT_SOCKLEN_T
+#undef QT_SIGNAL_IGNORE
+
+#define QT_OPEN_LARGEFILE 0
+
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#define QT_SIGNAL_IGNORE (void (*)(int))1
+
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/common/qws.conf b/mkspecs/common/qws.conf
index 225f0ff..59820b8 100644
--- a/mkspecs/common/qws.conf
+++ b/mkspecs/common/qws.conf
@@ -20,5 +20,3 @@ QMAKE_INCDIR_OPENGL_ES2 =
QMAKE_LIBDIR_OPENGL_ES2 =
QMAKE_LIBS_X11 =
QMAKE_LIBS_X11SM =
-QMAKE_LIBS_OPENGL =
-QMAKE_LIBS_OPENGL_QT =
diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf
index 364e91b..9dc3674 100644
--- a/mkspecs/common/symbian/symbian-makefile.conf
+++ b/mkspecs/common/symbian/symbian-makefile.conf
@@ -30,9 +30,9 @@ QMAKE_EXTENSION_STATICLIB = lib
QMAKE_SYMBIAN_SHLIB = 1
is_using_gnupoc {
- DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh\\>
+ DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh>\"
} else {
- DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh\\>
+ DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh>\"
}
DEFINES *= \
__SYMBIAN32__ \
diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf
index 5292781..1fbd302 100644
--- a/mkspecs/common/symbian/symbian-mmp.conf
+++ b/mkspecs/common/symbian/symbian-mmp.conf
@@ -4,16 +4,6 @@
include(symbian.conf)
-contains(QMAKE_HOST.os, "Windows") {
- QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exe
- QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe
- QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe
-} else {
- QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
- QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
- QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
-}
-
load(symbian/add_mmp_rules)
symbian-abld {
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 0bdc8e5..4d0320d 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -27,7 +27,7 @@ QMAKE_CFLAGS_DEBUG =
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
MMP_OPTION_KEYWORDS = CW ARMCC GCCE
-VERSION_FLAGS.ARMCC = ARMCC_4_0
+VERSION_FLAGS.ARMCC = ARMCC_4
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
# Symbian build system applies -cwd source on the MWCC command line.
# this causes problems with include paths, -cwd include uses the same
@@ -36,7 +36,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
# both on the command line and rely on the compiler using the last specified
QMAKE_CXXFLAGS.CW = -cwd include
QMAKE_CXXFLAGS.ARMCC = --visibility_inlines_hidden
-QMAKE_CXXFLAGS.ARMCC_4_0 = --import_all_vtbl
+QMAKE_CXXFLAGS.ARMCC_4 = --import_all_vtbl
QMAKE_CXXFLAGS.GCCE = -fvisibility-inlines-hidden
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
@@ -79,7 +79,6 @@ QMAKE_LIBS_OPENGL_ES2_QT = -llibglesv2 -lcone -lws32
QMAKE_LIBS_OPENVG = -llibOpenVG -lfbscli -lbitgdi -lgdi
QMAKE_LIBS_THREAD = -llibpthread
QMAKE_LIBS_COMPAT =
-QMAKE_LIBS_QT_ENTRY = -llibcrt0.lib
QMAKE_LIBS_S60 = -lavkon -leikcoctl
exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) {
@@ -95,15 +94,23 @@ contains(QMAKE_HOST.os,Windows) {
QMAKE_DEL_DIR = rmdir
QMAKE_DEL_TREE = rmdir /s /q
QMAKE_CHK_DIR_EXISTS = if not exist
+
+ QMAKE_MOC = $$[QT_INSTALL_BINS]\\moc.exe
+ QMAKE_UIC = $$[QT_INSTALL_BINS]\\uic.exe
+ QMAKE_IDC = $$[QT_INSTALL_BINS]\\idc.exe
} else {
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm -f
- QMAKE_MKDIR = mkdir
+ QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
QMAKE_DEL_TREE = rm -rf
QMAKE_CHK_DIR_EXISTS = test -d
+
+ QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+ QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
+ QMAKE_IDC = $$[QT_INSTALL_BINS]/idc
}
QMAKE_IDL = midl
@@ -119,6 +126,10 @@ QT_ARCH = symbian
load(qt_config)
+QMAKE_LIBS_QT_ENTRY = -lqtmain$${QT_LIBINFIX}.lib
+QMAKE_LIBS_NO_QT_ENTRY = -llibcrt0.lib
+QMAKE_LIBS_NO_QT_ENTRY_GCCE = -llibcrt0_gcce.lib
+
# These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS
QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins
QT_IMPORTS_BASE_DIR = /resource/qt/imports
diff --git a/mkspecs/features/link_pkgconfig.prf b/mkspecs/features/link_pkgconfig.prf
index 4c528aa..d70e5de 100644
--- a/mkspecs/features/link_pkgconfig.prf
+++ b/mkspecs/features/link_pkgconfig.prf
@@ -1,6 +1,7 @@
# handle pkg-config files
+isEmpty(PKG_CONFIG):PKG_CONFIG = pkg-config
for(PKGCONFIG_LIB, $$list($$unique(PKGCONFIG))) {
- QMAKE_CXXFLAGS += $$system(pkg-config --cflags $$PKGCONFIG_LIB)
- QMAKE_CFLAGS += $$system(pkg-config --cflags $$PKGCONFIG_LIB)
- LIBS += $$system(pkg-config --libs $$PKGCONFIG_LIB)
+ QMAKE_CXXFLAGS += $$system($$PKG_CONFIG --cflags $$PKGCONFIG_LIB)
+ QMAKE_CFLAGS += $$system($$PKG_CONFIG --cflags $$PKGCONFIG_LIB)
+ LIBS += $$system($$PKG_CONFIG --libs $$PKGCONFIG_LIB)
}
diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf
index 0df7013..ca693ba 100644
--- a/mkspecs/features/mac/objective_c.prf
+++ b/mkspecs/features/mac/objective_c.prf
@@ -1,13 +1,22 @@
+for(source, SOURCES) {
+ contains(source,.*\\.mm?$) {
+ warning(Objective-C source \'$$source\' found in SOURCES but should be in OBJECTIVE_SOURCES)
+ SOURCES -= $$source
+ OBJECTIVE_SOURCES += $$source
+ }
+}
+
isEmpty(QMAKE_OBJECTIVE_CC):QMAKE_OBJECTIVE_CC = $$QMAKE_CC
- QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS
- QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
- QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
- QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
- QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
- QMAKE_OBJECTIVE_CFLAGS_X86 = $$QMAKE_CFLAGS_X86
- QMAKE_OBJECTIVE_CFLAGS_PPC = $$QMAKE_CFLAGS_PPC
- QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS
+
+QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS
+QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
+QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
+QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_OBJECTIVE_CFLAGS_X86 = $$QMAKE_CFLAGS_X86
+QMAKE_OBJECTIVE_CFLAGS_PPC = $$QMAKE_CFLAGS_PPC
+QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS
OBJECTIVE_C_OBJECTS_DIR = $$OBJECTS_DIR
isEmpty(OBJECTIVE_C_OBJECTS_DIR):OBJECTIVE_C_OBJECTS_DIR = .
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index e59319f..191a449 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -113,7 +113,7 @@ for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
CONFIG(debug, debug|release): QT_ITEM = $${QTPLUG}d4.dll
else: QT_ITEM = $${QTPLUG}4.dll
- eval(qt_additional_plugin_$${QTPLUG}.sources = $$[QT_INSTALL_PLUGINS]/$${QT_PLUGINPATH}/$${QT_ITEM})
+ eval(qt_additional_plugin_$${QTPLUG}.files = $$[QT_INSTALL_PLUGINS]/$${QT_PLUGINPATH}/$${QT_ITEM})
eval(qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH})
DEPLOYMENT *= qt_additional_plugin_$${QTPLUG}
@@ -121,7 +121,7 @@ for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
isEqual(QT_CURRENT_VERIFY, DEPLOYMENT_PLUGIN):shared:symbian: {
QT_ITEM = $${QTPLUG}.dll
- eval(qt_additional_plugin_$${QTPLUG}.sources = $${QT_ITEM})
+ eval(qt_additional_plugin_$${QTPLUG}.files = $${QT_ITEM})
eval(qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH})
DEPLOYMENT *= qt_additional_plugin_$${QTPLUG}
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index afc708a..e5ef5a1 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -87,6 +87,12 @@ defineTest(qtPrepareTool) {
else:$$1 = $$[QT_INSTALL_BINS]/$$2
}
$$1 ~= s,[/\\\\],$$QMAKE_DIR_SEP,
- contains(QMAKE_HOST.os, Windows):!contains($$1, .*\\.exe$):$$1 = $$eval($$1).exe
+ contains(QMAKE_HOST.os, Windows):!contains($$1, .*\\.(exe|bat)$) {
+ exists($$eval($$1).bat) {
+ $$1 = $$eval($$1).bat
+ } else {
+ $$1 = $$eval($$1).exe
+ }
+ }
export($$1)
}
diff --git a/mkspecs/features/qttest_p4.prf b/mkspecs/features/qttest_p4.prf
index d1c7c2b..2ee148b 100644
--- a/mkspecs/features/qttest_p4.prf
+++ b/mkspecs/features/qttest_p4.prf
@@ -1,6 +1,9 @@
isEmpty(TEMPLATE):TEMPLATE=app
CONFIG += qt warn_on console depend_includepath testcase
+# x11 is not defined by configure (the following line is copied from gui.pro)
+!win32:!embedded:!mac:!symbian:CONFIG += x11
+
qtAddLibrary(QtTest)
symbian:{
diff --git a/mkspecs/features/symbian/application_icon.prf b/mkspecs/features/symbian/application_icon.prf
index 2948811..f50e944 100644
--- a/mkspecs/features/symbian/application_icon.prf
+++ b/mkspecs/features/symbian/application_icon.prf
@@ -7,7 +7,8 @@ contains(CONFIG, no_icon) {
symbian:RSS_RULES += "hidden = KAppIsHidden;"
CONFIG -= no_icon
}
-}
+}
+
!contains(CONFIG, no_icon) {
baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
@@ -15,17 +16,19 @@ contains(CONFIG, no_icon) {
resourceZDir = $$EPOCROOT$$HW_ZDIR$$APP_RESOURCE_DIR
regZDir = $$EPOCROOT$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR
} else {
- isEmpty(DESTDIR) {
- resourceZDir = .
- } else {
+ contains(DESTDIR, "/.*") {
resourceZDir = $$DESTDIR
+ } else:isEmpty(DESTDIR) {
+ resourceZDir = $$OUT_PWD
+ } else {
+ resourceZDir = $$OUT_PWD/$$DESTDIR
}
regZDir = $$resourceZDir
}
- default_resource_deployment.sources += $$resourceZDir/$${baseTarget}.rsc
+ default_resource_deployment.files += $$resourceZDir/$${baseTarget}.rsc
default_resource_deployment.path = $$APP_RESOURCE_DIR
- default_reg_deployment.sources += $$regZDir/$${baseTarget}_reg.rsc
+ default_reg_deployment.files += $$regZDir/$${baseTarget}_reg.rsc
default_reg_deployment.path = $$REG_RESOURCE_IMPORT_DIR
!isEmpty(ICON) {
@@ -68,9 +71,10 @@ contains(CONFIG, no_icon) {
}
# Rules to use generated MIF file from symbian resources
RSS_RULES.number_of_icons = $$size(ICON_backslashed)
+
RSS_RULES.icon_file = $$APP_RESOURCE_DIR/$${baseTarget}.mif
- default_resource_deployment.sources += $$resourceZDir/$${baseTarget}.mif
+ default_resource_deployment.files += $$resourceZDir/$${baseTarget}.mif
}
}
diff --git a/mkspecs/features/symbian/data_caging_paths.prf b/mkspecs/features/symbian/data_caging_paths.prf
index 2f03128..7f5420c 100644
--- a/mkspecs/features/symbian/data_caging_paths.prf
+++ b/mkspecs/features/symbian/data_caging_paths.prf
@@ -13,7 +13,7 @@
#
# # These variables are mostly useful when specifying deployment
#
-# myLib.sources = myLib.dll
+# myLib.files = myLib.dll
# myLib.path = $$SHARED_LIB_DIR
# DEPLOYMENT += myLib
#
@@ -21,7 +21,7 @@
# # $$QT_PUBLIC_PLUGINS_BASE specifies the public base directory for Qt
# # plugin stubs:
#
-# myPublicImageFormatPlugin.sources = myImageFormat.dll
+# myPublicImageFormatPlugin.files = myImageFormat.dll
# myPublicImageFormatPlugin.path = $$QT_PLUGINS_BASE_DIR/imageformats
# DEPLOYMENT += myPublicImageFormatPlugin
#
diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf
index f243878..1c11925 100644
--- a/mkspecs/features/symbian/def_files.prf
+++ b/mkspecs/features/symbian/def_files.prf
@@ -7,6 +7,18 @@ CONFIG -= def_files_disabled
equals(QMAKE_TARGET_PRODUCT, Qt4):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "")
else:clean_TARGET = $$TARGET
+defineTest(qtTestIfDirExists) {
+ contains(QMAKE_HOST.os,Windows) {
+ dirToTest = $$1
+ $$dirToTest ~= s,/,\\,
+ # Windows trick. Test for existence of nul, which every directory has.
+ retValue = $$system("if exist $$dirToTest\\nul echo true")
+ contains(retValue, true):return(true)|return(false)
+ } else {
+ system("test -d $$1"):return(true)|return(false)
+ }
+}
+
symbian-abld|symbian-sbsv2 {
# Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one
# (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements
@@ -52,9 +64,11 @@ symbian-abld|symbian-sbsv2 {
} else {
defFile = .
}
- system("$$QMAKE_CHK_DIR_EXISTS $$_PRO_FILE_PWD_/$$defFile") {
+ qtTestIfDirExists($$_PRO_FILE_PWD_/$$defFile) {
!exists("$$_PRO_FILE_PWD_/$$defFile/eabi") {
- system("$$QMAKE_MKDIR $$_PRO_FILE_PWD_/$$defFile/eabi")
+ dirToCreate = $$_PRO_FILE_PWD_/$$defFile/eabi
+ contains(QMAKE_HOST.os,Windows):dirToCreate ~= s,/,\\,
+ system("$$QMAKE_MKDIR $$dirToCreate")
}
elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(clean_TARGET)u.def
} else {
diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf
index a9b6d0e..d9ff03d 100644
--- a/mkspecs/features/symbian/default_post.prf
+++ b/mkspecs/features/symbian/default_post.prf
@@ -3,16 +3,21 @@ load(default_post)
contains(TEMPLATE, ".*app") {
contains(CONFIG, stdbinary) {
QMAKE_LIBS +=
- } else:contains(QT, gui):contains(CONFIG,qt) {
- S60MAIN_LIBS = -leuser
- QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib $$S60MAIN_LIBS
- } else {
+ } else:contains(CONFIG,qt) {
QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY
+ } else {
+ QMAKE_LIBS += $$QMAKE_LIBS_NO_QT_ENTRY
+ }
+
+ contains(DESTDIR, "/.*") {
+ default_bin_deployment.sources += $$DESTDIR/$$symbianRemoveSpecialCharacters($$basename(TARGET)).exe
+ } else:isEmpty(DESTDIR) {
+ default_bin_deployment.sources += $$OUT_PWD/$$symbianRemoveSpecialCharacters($$basename(TARGET)).exe
+ } else {
+ default_bin_deployment.sources += $$OUT_PWD/$$DESTDIR/$$symbianRemoveSpecialCharacters($$basename(TARGET)).exe
}
-
- default_bin_deployment.sources += $$symbianRemoveSpecialCharacters($$basename(TARGET)).exe
default_bin_deployment.path += /sys/bin
-
+
load(application_icon.prf)
}
contains(TEMPLATE, lib): {
diff --git a/mkspecs/features/symbian/do_not_build_as_thumb.prf b/mkspecs/features/symbian/do_not_build_as_thumb.prf
index 60d9382..0f1fd9f 100644
--- a/mkspecs/features/symbian/do_not_build_as_thumb.prf
+++ b/mkspecs/features/symbian/do_not_build_as_thumb.prf
@@ -1,6 +1,6 @@
symbian-abld|symbian-sbsv2 {
MMP_RULES += ALWAYS_BUILD_AS_ARM
-} else:linux-armcc {
+} else:symbian-armcc {
QMAKE_CFLAGS -= --thumb
QMAKE_CFLAGS += --arm
QMAKE_CXXFLAGS -= --thumb
diff --git a/mkspecs/features/symbian/qt_config.prf b/mkspecs/features/symbian/qt_config.prf
index 2f446dc..82c1862 100644
--- a/mkspecs/features/symbian/qt_config.prf
+++ b/mkspecs/features/symbian/qt_config.prf
@@ -3,7 +3,7 @@ load(qt_config)
!contains(QMAKE_HOST.os, "Windows") {
# Test for the existence of lower cased headers, a sign of using Gnupoc.
# Note that the qmake "exists" test won't do because it is case insensitive.
- system("test -f $${EPOCROOT}/epoc32/include/akndoc.h") {
+ system("test -f $${EPOCROOT}epoc32/include/akndoc.h") {
CONFIG += is_using_gnupoc
}
}
diff --git a/mkspecs/features/symbian/run_on_phone.prf b/mkspecs/features/symbian/run_on_phone.prf
index d845277..ba88a66 100644
--- a/mkspecs/features/symbian/run_on_phone.prf
+++ b/mkspecs/features/symbian/run_on_phone.prf
@@ -5,7 +5,8 @@ GENERATE_RUN_TARGETS = false
contains(TEMPLATE, app): GENERATE_RUN_TARGETS = true
else:!equals(DEPLOYMENT, default_deployment) {
for(dep_item, $$list($$DEPLOYMENT)) {
- dep_item_sources = $$eval($${dep_item}.sources)
+ ### Qt 5: remove .sources, inconsistent with INSTALLS
+ dep_item_sources = $$eval($${dep_item}.files) $$eval($${dep_item}.sources)
!isEmpty(dep_item_sources): GENERATE_RUN_TARGETS = true
}
}
diff --git a/mkspecs/features/symbian/sis_targets.prf b/mkspecs/features/symbian/sis_targets.prf
index e838e10..e5a33cb 100644
--- a/mkspecs/features/symbian/sis_targets.prf
+++ b/mkspecs/features/symbian/sis_targets.prf
@@ -4,7 +4,8 @@ GENERATE_SIS_TARGETS = false
contains(TEMPLATE, app): GENERATE_SIS_TARGETS = true
else:!equals(DEPLOYMENT, default_deployment) {
for(dep_item, $$list($$DEPLOYMENT)) {
- dep_item_sources = $$eval($${dep_item}.sources)
+ ### Qt 5: remove .sources, inconsistent with INSTALLS
+ dep_item_sources = $$eval($${dep_item}.files) $$eval($${dep_item}.sources)
!isEmpty(dep_item_sources): GENERATE_SIS_TARGETS = true
}
}
diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf
index 614fb65..9288583 100644
--- a/mkspecs/features/symbian/symbian_building.prf
+++ b/mkspecs/features/symbian/symbian_building.prf
@@ -1,7 +1,7 @@
-linux-armcc {
+symbian-armcc {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC
-} else:linux-gcce {
+} else:symbian-gcce {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE
}
@@ -16,7 +16,7 @@ else:clean_TARGET = $$TARGET
!contains(clean_TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${clean_TARGET}_LFLAGS)
!isEmpty(TMPVAR) {
QMAKE_LFLAGS += $$TMPVAR
-} else :linux-gcce { # lets provide a simple default. Without elf2e32 complains
+} else :symbian-gcce { # lets provide a simple default. Without elf2e32 complains
QMAKE_LFLAGS += -Ttext 0x80000 -Tdata 0x400000
}
@@ -62,8 +62,8 @@ for(libToProcess, libsToProcess) {
} else {
qt_newLib = $$processSymbianLibrary($$qt_library)
contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib
- linux-gcce:qt_newLib = "-l:$$qt_newLib"
- eval($$libToProcess += \$\$qt_newLib)
+ symbian-gcce:qt_newLib = "-l:$$qt_newLib"
+ eval($$libToProcess *= \$\$qt_newLib)
}
}
}
@@ -89,12 +89,13 @@ count(splitVersion, 0) {
decVersion = "10.0"
} else {
count(splitVersion, 3) {
- hexVersion = $$system("sh -c 'printf %02x $$member(splitVersion, 0)'")
- hexPart2 = $$system("sh -c 'printf %02x $$member(splitVersion, 1)'")"
- hexPart2 = $$hexPart2$$system("sh -c 'printf %02x $$member(splitVersion, 2)'")"
- decVersion = $$system("sh -c 'printf %1d 0x$$hexVersion'").
+ hexVersion = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 0))\"")
+ hexPart2 = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 1))\"")"
+ hexPart2 = $$hexPart2$$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 2))\"")"
+ decVersion = $$system("perl -e \"printf (\\\"%1d\\\", 0x$$hexVersion)\"").
hexVersion = $$hexVersion$$hexPart2
- decVersion = $$decVersion$$system("sh -c 'printf %d 0x$$hexPart2'")
+ decVersion = $$decVersion$$system("perl -e \"printf (\\\"%d\\\", 0x$$hexPart2)\"")
+
!contains(hexVersion, "[0-9a-f]{8}"):hexVersion = "00$${hexVersion}"
} else { # app code may have different numbering...
hexVersion = $$VERSION
@@ -117,7 +118,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
contains(CONFIG, plugin):QMAKE_ELF2E32_FLAGS += --definput=plugin_commonu.def
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
- QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym \
+ moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym
+ contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\)
+ QMAKE_POST_LINK = $$moveCmd \
&& $$QMAKE_ELF2E32_WRAPPER --version=$$decVersion \
--sid=$$TARGET.SID \
--uid1=0x10000079 \
@@ -129,7 +132,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
--tmpdso=$${symbianObjdir}/$${baseTarget}.dso \
--dso=$${symbianDestdir}/$${baseTarget}.dso \
--defoutput=$$symbianObjdir/$${baseTarget}.def \
- --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll \
+ --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" \
--heap=$$epoc_heap_size \
--stack=$$TARGET.EPOCSTACKSIZE \
$$elf2e32_LIBPATH \
@@ -142,11 +145,17 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso
QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def
- linux-armcc: {
- LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\)
- LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\)
- } else :linux-gcce {
+ symbian-armcc: {
+ LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso
+ # Quotation unfortunately is different on Windows and unix.
+ contains(QMAKE_HOST.os, Windows) {
+ LIBS += \"h_t__uf.l(switch8.o)\" edllstub.lib \"edll.lib(uc_dll_.o)\"
+ } else {
+ LIBS += h_t__uf.l\\(switch8.o\\) edllstub.lib edll.lib\\(uc_dll_.o\\)
+ }
+ } else :symbian-gcce {
LIBS += \
+ -l:edllstub.lib \
-l:edll.lib \
-l:usrt2_2.lib \
-l:dfpaeabi.dso \
@@ -156,13 +165,15 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
-lgcc
}
- QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll
+ QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\"
DEFINES += __DLL__
}
contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
- QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym \
+ moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym
+ contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\)
+ QMAKE_POST_LINK = $$moveCmd \
&& $$QMAKE_ELF2E32_WRAPPER --version $$decVersion \
--sid=$$TARGET.SID \
--uid1=0x1000007a \
@@ -171,7 +182,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
--targettype=EXE \
--elfinput=$${symbianDestdir}/$${baseTarget}.sym \
--output=$${symbianDestdir}/$${baseTarget}.exe \
- --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe \
+ --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" \
--heap=$$epoc_heap_size \
--stack=$$TARGET.EPOCSTACKSIZE \
$$elf2e32_LIBPATH \
@@ -184,28 +195,31 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe
QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget}
- linux-armcc: {
+ symbian-armcc: {
QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\)
QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\)
- contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore
- QMAKE_LIBS -= -lqtmain$${QT_LIBINFIX}.lib
- QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib
+ contains(CONFIG, "qt") {
+ QMAKE_LIBS -= $$QMAKE_LIBS_QT_ENTRY
+ QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY
} else {
- QMAKE_LIBS -= -llibcrt0.lib
- QMAKE_LIBS += -llibcrt0.lib
+ QMAKE_LIBS -= $$QMAKE_LIBS_NO_QT_ENTRY
+ QMAKE_LIBS += $$QMAKE_LIBS_NO_QT_ENTRY
}
- } else :linux-gcce {
+ } else :symbian-gcce {
# notice that we can't merge these as ordering of arguments is important.
QMAKE_LIBS += \
-l:eexe.lib \
-l:usrt2_2.lib
- contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore
- QMAKE_LIBS -= -l:qtmain$${QT_LIBINFIX}.lib
- QMAKE_LIBS += -l:qtmain$${QT_LIBINFIX}.lib
+ contains(CONFIG, "qt") {
+ modified_entry = $$replace(QMAKE_LIBS_QT_ENTRY, "^-l", "-l:")
+ QMAKE_LIBS -= $$modified_entry
+ QMAKE_LIBS += $$modified_entry
} else {
- QMAKE_LIBS -= -l:libcrt0.lib
- QMAKE_LIBS -= -l:libcrt0_gcce.lib
- QMAKE_LIBS += -l:libcrt0_gcce.lib
+ modified_entry = $$replace(QMAKE_LIBS_NO_QT_ENTRY, "^-l", "-l:")
+ QMAKE_LIBS -= $$modified_entry
+ modified_entry = $$replace(QMAKE_LIBS_NO_QT_ENTRY_GCCE, "^-l", "-l:")
+ QMAKE_LIBS -= $$modified_entry
+ QMAKE_LIBS += $$modified_entry
}
QMAKE_LIBS += \
-l:dfpaeabi.dso \
@@ -216,12 +230,12 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
QMAKE_LFLAGS += --shared
}
- QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe
+ QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\"
DEFINES += __EXE__
}
# Symbian resource files
-linux-armcc: {
+symbian-armcc: {
SYMBIAN_RVCT22INC=$$(RVCT22INC)
!isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC}
}
@@ -229,7 +243,7 @@ symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I")
symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I")
symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D")
symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "")
-symbian_resources_INCLUDES += "-I $$symbian_resources_RCC_DIR"
+symbian_resources_INCLUDES += "-I$$symbian_resources_RCC_DIR"
for(symbian_resource, SYMBIAN_RESOURCES) {
symbian_resource = $$basename(symbian_resource)
@@ -245,7 +259,7 @@ symbianresources.commands = cpp -nostdinc -undef \
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
${QMAKE_FILE_NAME} \
- -o $${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
+ > $${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
-o$${symbianDestdir}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsc \
@@ -265,7 +279,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
$${baseTarget}.rss \
- -o $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
+ > $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
-o$${symbianDestdir}/$${baseTarget}.rsc \
@@ -284,7 +298,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
$${baseTarget}_reg.rss \
- -o $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
+ > $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
-o$${symbianDestdir}/$${baseTarget}_reg.rsc \
diff --git a/mkspecs/freebsd-g++/qmake.conf b/mkspecs/freebsd-g++/qmake.conf
index 9de93d4..9d7c443 100644
--- a/mkspecs/freebsd-g++/qmake.conf
+++ b/mkspecs/freebsd-g++/qmake.conf
@@ -48,6 +48,7 @@ QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
QMAKE_MKDIR = mkdir -p
-include(../common/g++.conf)
include(../common/unix.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-g++-32/qmake.conf b/mkspecs/linux-g++-32/qmake.conf
index f425c0d..cdf8914 100644
--- a/mkspecs/linux-g++-32/qmake.conf
+++ b/mkspecs/linux-g++-32/qmake.conf
@@ -12,6 +12,7 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CFLAGS = -m32
QMAKE_LFLAGS = -m32
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-g++-64/qmake.conf b/mkspecs/linux-g++-64/qmake.conf
index b8877a9..222f6b7 100644
--- a/mkspecs/linux-g++-64/qmake.conf
+++ b/mkspecs/linux-g++-64/qmake.conf
@@ -15,8 +15,10 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CFLAGS = -m64
QMAKE_LFLAGS = -m64
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
+
QMAKE_LIBDIR_X11 = /usr/X11R6/lib64
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64
diff --git a/mkspecs/linux-g++-maemo/qmake.conf b/mkspecs/linux-g++-maemo/qmake.conf
index 8f85c54..23f1f71 100644
--- a/mkspecs/linux-g++-maemo/qmake.conf
+++ b/mkspecs/linux-g++-maemo/qmake.conf
@@ -10,8 +10,9 @@ CONFIG += nostrip
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
# Override the default lib/include directories for scratchbox:
@@ -21,10 +22,7 @@ QMAKE_LIBDIR_X11 = /usr/lib
QMAKE_LIBDIR_OPENGL = /usr/lib
# We still need to generate debug symbols in release mode to put into the *-dbg packages:
-QMAKE_CFLAGS_RELEASE += -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
-QMAKE_CXXFLAGS_RELEASE += -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
-
-# Work round PowerVR SGX 1.3 driver bug with glScissor & FBOs:
-DEFINES += QT_GL_NO_SCISSOR_TEST
+QMAKE_CFLAGS_RELEASE += -g -Wno-psabi
+QMAKE_CXXFLAGS_RELEASE += -g -Wno-psabi
load(qt_config)
diff --git a/mkspecs/linux-g++/qmake.conf b/mkspecs/linux-g++/qmake.conf
index d772b5e..00df894 100644
--- a/mkspecs/linux-g++/qmake.conf
+++ b/mkspecs/linux-g++/qmake.conf
@@ -9,6 +9,7 @@ CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-llvm/qmake.conf b/mkspecs/linux-llvm/qmake.conf
index 77f8d81..46ea2aa 100644
--- a/mkspecs/linux-llvm/qmake.conf
+++ b/mkspecs/linux-llvm/qmake.conf
@@ -9,6 +9,7 @@ CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/llvm.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/llvm.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++/qmake.conf b/mkspecs/macx-g++/qmake.conf
index 4464686..e402e54 100644
--- a/mkspecs/macx-g++/qmake.conf
+++ b/mkspecs/macx-g++/qmake.conf
@@ -13,9 +13,7 @@ CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-QMAKE_CC = gcc
-QMAKE_CXX = g++
-
-include(../common/mac-g++.conf)
-
+include(../common/mac.conf)
+include(../common/gcc-base-macx.conf)
+include(../common/g++-macx.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++/qplatformdefs.h b/mkspecs/macx-g++/qplatformdefs.h
index 99d64ef..5bdef57 100644
--- a/mkspecs/macx-g++/qplatformdefs.h
+++ b/mkspecs/macx-g++/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/qplatformdefs.h"
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-g++40/qmake.conf b/mkspecs/macx-g++40/qmake.conf
index 784f5fc..07663c6 100644
--- a/mkspecs/macx-g++40/qmake.conf
+++ b/mkspecs/macx-g++40/qmake.conf
@@ -13,9 +13,16 @@ CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
+include(../common/mac.conf)
+include(../common/gcc-base-macx.conf)
+include(../common/g++-macx.conf)
+
QMAKE_CC = gcc-4.0
QMAKE_CXX = g++-4.0
-include(../common/mac-g++.conf)
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+QMAKE_LINK_C = $$QMAKE_CC
+QMAKE_LINK_C_SHLIB = $$QMAKE_CC
load(qt_config)
diff --git a/mkspecs/macx-g++40/qplatformdefs.h b/mkspecs/macx-g++40/qplatformdefs.h
index 99d64ef..5bdef57 100644
--- a/mkspecs/macx-g++40/qplatformdefs.h
+++ b/mkspecs/macx-g++40/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/qplatformdefs.h"
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-g++42/qmake.conf b/mkspecs/macx-g++42/qmake.conf
index fb93697..3d31305 100644
--- a/mkspecs/macx-g++42/qmake.conf
+++ b/mkspecs/macx-g++42/qmake.conf
@@ -13,9 +13,16 @@ CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
+include(../common/mac.conf)
+include(../common/gcc-base-macx.conf)
+include(../common/g++-macx.conf)
+
QMAKE_CC = gcc-4.2
QMAKE_CXX = g++-4.2
-include(../common/mac-g++.conf)
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+QMAKE_LINK_C = $$QMAKE_CC
+QMAKE_LINK_C_SHLIB = $$QMAKE_CC
load(qt_config)
diff --git a/mkspecs/macx-g++42/qplatformdefs.h b/mkspecs/macx-g++42/qplatformdefs.h
index 99d64ef..5bdef57 100644
--- a/mkspecs/macx-g++42/qplatformdefs.h
+++ b/mkspecs/macx-g++42/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/qplatformdefs.h"
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-icc/qplatformdefs.h b/mkspecs/macx-icc/qplatformdefs.h
index d46381c..5bdef57 100644
--- a/mkspecs/macx-icc/qplatformdefs.h
+++ b/mkspecs/macx-icc/qplatformdefs.h
@@ -39,5 +39,5 @@
**
****************************************************************************/
-#include "../macx-g++/qplatformdefs.h"
+#include "../common/mac/qplatformdefs.h"
diff --git a/mkspecs/macx-llvm/qmake.conf b/mkspecs/macx-llvm/qmake.conf
index d46baea..d794701 100644
--- a/mkspecs/macx-llvm/qmake.conf
+++ b/mkspecs/macx-llvm/qmake.conf
@@ -13,6 +13,13 @@ CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/mac-llvm.conf)
+include(../common/mac.conf)
+include(../common/gcc-base-macx.conf)
+include(../common/llvm.conf)
+
+QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
load(qt_config)
diff --git a/mkspecs/macx-llvm/qplatformdefs.h b/mkspecs/macx-llvm/qplatformdefs.h
index 99d64ef..5bdef57 100644
--- a/mkspecs/macx-llvm/qplatformdefs.h
+++ b/mkspecs/macx-llvm/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/qplatformdefs.h"
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-xcode/qmake.conf b/mkspecs/macx-xcode/qmake.conf
index 3a4a500..4cb4626 100755
--- a/mkspecs/macx-xcode/qmake.conf
+++ b/mkspecs/macx-xcode/qmake.conf
@@ -9,10 +9,16 @@ TEMPLATE = app
CONFIG += qt warn_on release lib_version_first incremental plugin_no_soname link_prl app_bundle
QT += core gui
-include(../common/mac-g++.conf)
+include(../common/mac.conf)
+include(../common/gcc-base-macx.conf)
+include(../common/g++-macx.conf)
-QMAKE_CC =
-QMAKE_CXX =
+QMAKE_CC =
+QMAKE_CXX =
+QMAKE_LINK =
+QMAKE_LINK_C =
+QMAKE_LINK_C_SHLIB =
+QMAKE_LINK_SHLIB =
QMAKE_CFLAGS_HIDESYMS =
QMAKE_CFLAGS_PPC_64 =
QMAKE_CFLAGS_X86_64 =
diff --git a/mkspecs/macx-xcode/qplatformdefs.h b/mkspecs/macx-xcode/qplatformdefs.h
index 99d64ef..5bdef57 100644
--- a/mkspecs/macx-xcode/qplatformdefs.h
+++ b/mkspecs/macx-xcode/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/qplatformdefs.h"
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/qws/linux-arm-g++/qmake.conf b/mkspecs/qws/linux-arm-g++/qmake.conf
index 7e0a3b4..7b37813 100644
--- a/mkspecs/qws/linux-arm-g++/qmake.conf
+++ b/mkspecs/qws/linux-arm-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf b/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
index 3611421..e1ad837 100644
--- a/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
+++ b/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-none-linux-gnueabi-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-armv6-g++/qmake.conf b/mkspecs/qws/linux-armv6-g++/qmake.conf
index cd7ecca..0e2473c 100644
--- a/mkspecs/qws/linux-armv6-g++/qmake.conf
+++ b/mkspecs/qws/linux-armv6-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for ARMv6 devices with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-avr32-g++/qmake.conf b/mkspecs/qws/linux-avr32-g++/qmake.conf
index 057c938..32c0444 100644
--- a/mkspecs/qws/linux-avr32-g++/qmake.conf
+++ b/mkspecs/qws/linux-avr32-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with avr32-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-cellon-g++/qmake.conf b/mkspecs/qws/linux-cellon-g++/qmake.conf
index 363a3ce..ad66c3c 100644
--- a/mkspecs/qws/linux-cellon-g++/qmake.conf
+++ b/mkspecs/qws/linux-cellon-g++/qmake.conf
@@ -6,8 +6,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-dm7000-g++/qmake.conf b/mkspecs/qws/linux-dm7000-g++/qmake.conf
index aea2647..c897091 100644
--- a/mkspecs/qws/linux-dm7000-g++/qmake.conf
+++ b/mkspecs/qws/linux-dm7000-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for linux-dm7000-g++, for Dream Multimedia's DM7000S
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-dm800-g++/qmake.conf b/mkspecs/qws/linux-dm800-g++/qmake.conf
index fca93b4..002e4c7 100644
--- a/mkspecs/qws/linux-dm800-g++/qmake.conf
+++ b/mkspecs/qws/linux-dm800-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for linux-dm800-g++, for Dream Multimedia's DM800
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-generic-g++-32/qmake.conf b/mkspecs/qws/linux-generic-g++-32/qmake.conf
index 81af4ab..249c10aa 100644
--- a/mkspecs/qws/linux-generic-g++-32/qmake.conf
+++ b/mkspecs/qws/linux-generic-g++-32/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-generic-g++/qmake.conf b/mkspecs/qws/linux-generic-g++/qmake.conf
index a026e88..e803d0d 100644
--- a/mkspecs/qws/linux-generic-g++/qmake.conf
+++ b/mkspecs/qws/linux-generic-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
load(qt_config)
diff --git a/mkspecs/qws/linux-ipaq-g++/qmake.conf b/mkspecs/qws/linux-ipaq-g++/qmake.conf
index 59f4e6e..f9d33b3 100644
--- a/mkspecs/qws/linux-ipaq-g++/qmake.conf
+++ b/mkspecs/qws/linux-ipaq-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-lsb-g++/qmake.conf b/mkspecs/qws/linux-lsb-g++/qmake.conf
index 8b66228..4b35925 100644
--- a/mkspecs/qws/linux-lsb-g++/qmake.conf
+++ b/mkspecs/qws/linux-lsb-g++/qmake.conf
@@ -3,10 +3,12 @@
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
+
QMAKE_LSB = 1
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-mips-g++/qmake.conf b/mkspecs/qws/linux-mips-g++/qmake.conf
index 3c55342..1a86078 100644
--- a/mkspecs/qws/linux-mips-g++/qmake.conf
+++ b/mkspecs/qws/linux-mips-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with mipsel-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-nacl-g++/qmake.conf b/mkspecs/qws/linux-nacl-g++/qmake.conf
new file mode 100644
index 0000000..83ce65b
--- /dev/null
+++ b/mkspecs/qws/linux-nacl-g++/qmake.conf
@@ -0,0 +1,74 @@
+#
+# qmake configuration for building with nacl-g++
+#
+
+include(../../common/unix.conf)
+include(../../common/qws.conf)
+
+QT = core gui
+
+# copy of ../../common/g++.conf, with modifications:
+
+QMAKE_CC = nacl-gcc
+QMAKE_CXX = nacl-g++
+QMAKE_LINK = nacl-g++
+QMAKE_LINK_SHLIB = nacl-g++
+
+#QMAKE_CC = gcc
+QMAKE_CFLAGS += -pipe -DXP_UNIX -DNACL_STANDALONE=1
+QMAKE_CFLAGS_DEPS += -M
+QMAKE_CFLAGS_WARN_ON += -Wall -W
+QMAKE_CFLAGS_WARN_OFF += -w
+QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_DEBUG += -g
+QMAKE_CFLAGS_SHLIB += -fPIC
+#QMAKE_CFLAGS_STATIC_LIB += -fPIC
+QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
+QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+#QMAKE_CXX = g++
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
+QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
+QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
+QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
+QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+#QMAKE_LINK = g++
+#QMAKE_LINK_SHLIB = g++
+QMAKE_LINK_C = gcc
+QMAKE_LINK_C_SHLIB = gcc
+QMAKE_LFLAGS +=
+QMAKE_LFLAGS_RELEASE += -Wl,-O1
+QMAKE_LFLAGS_DEBUG +=
+QMAKE_LFLAGS_APP +=
+QMAKE_LFLAGS_SHLIB += -shared
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_SONAME += -Wl,-soname,
+QMAKE_LFLAGS_THREAD +=
+QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
+QMAKE_LFLAGS_RPATH = -Wl,-rpath,
+
+QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc
+
+QMAKE_PCH_OUTPUT_EXT = .gch
+
+# -Bsymbolic-functions (ld) support
+QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
+QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+
+# modifications to linux.conf
+QMAKE_AR = nacl-ar q
+QMAKE_OBJCOPY = nacl-objcopy
+QMAKE_STRIP = nacl-strip
+QMAKE_LIBS_DYNLOAD =
+
+load(qt_config)
diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h
new file mode 100644
index 0000000..01b26d9
--- /dev/null
+++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec 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 QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#define _POSIX_TIMERS
+
+#include "qglobal.h"
+
+
+#define _POSIX_TIMERS
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+// 1) need to reset default environment if _BSD_SOURCE is defined
+// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
+// 3) it seems older glibc need this to include the X/Open stuff
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+#include <sys/features.h>
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+//#include <dlfcn.h>
+
+#include <sys/types.h>
+//#include <sys/ioctl.h>
+//#include <sys/ipc.h>
+
+#include <sys/time.h>
+//#include <sys/shm.h>
+//#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+//#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+// extra disabling.
+#ifdef __native_client__
+#define QT_NO_FSFILEENGINE
+#define QT_NO_TRANSLATION
+#endif
+
+#ifdef QT_LARGEFILE_SUPPORT
+#define QT_STATBUF struct stat64
+#define QT_STATBUF4TSTAT struct stat64
+#define QT_STAT ::stat64
+#define QT_FSTAT ::fstat64
+#define QT_LSTAT ::lstat64
+#define QT_OPEN ::open64
+#define QT_TRUNCATE ::truncate64
+#define QT_FTRUNCATE ::ftruncate64
+#define QT_LSEEK ::lseek64
+#else
+#define QT_STATBUF struct stat
+#define QT_STATBUF4TSTAT struct stat
+#define QT_STAT ::stat
+#define QT_FSTAT ::fstat
+#define QT_LSTAT ::lstat
+#define QT_OPEN ::open
+#define QT_TRUNCATE ::truncate
+#define QT_FTRUNCATE ::ftruncate
+#define QT_LSEEK ::lseek
+#endif
+
+#ifdef QT_LARGEFILE_SUPPORT
+#define QT_FOPEN ::fopen64
+#define QT_FSEEK ::fseeko64
+#define QT_FTELL ::ftello64
+#define QT_FGETPOS ::fgetpos64
+#define QT_FSETPOS ::fsetpos64
+#define QT_FPOS_T fpos64_t
+#define QT_OFF_T off64_t
+#else
+#define QT_FOPEN ::fopen
+#define QT_FSEEK ::fseek
+#define QT_FTELL ::ftell
+#define QT_FGETPOS ::fgetpos
+#define QT_FSETPOS ::fsetpos
+#define QT_FPOS_T fpos_t
+#define QT_OFF_T long
+#endif
+
+#define QT_STAT_REG S_IFREG
+#define QT_STAT_DIR S_IFDIR
+#define QT_STAT_MASK S_IFMT
+#define QT_STAT_LNK S_IFLNK
+#define QT_SOCKET_CONNECT ::connect
+#define QT_SOCKET_BIND ::bind
+#define QT_FILENO fileno
+#define QT_CLOSE ::close
+#define QT_READ ::read
+#define QT_WRITE ::write
+#define QT_ACCESS ::access
+#define QT_GETCWD ::getcwd
+#define QT_CHDIR ::chdir
+#define QT_MKDIR ::mkdir
+#define QT_RMDIR ::rmdir
+#define QT_OPEN_LARGEFILE O_LARGEFILE
+#define QT_OPEN_RDONLY O_RDONLY
+#define QT_OPEN_WRONLY O_WRONLY
+#define QT_OPEN_RDWR O_RDWR
+#define QT_OPEN_CREAT O_CREAT
+#define QT_OPEN_TRUNC O_TRUNC
+#define QT_OPEN_APPEND O_APPEND
+
+#define QT_SIGNAL_RETTYPE void
+#define QT_SIGNAL_ARGS int
+#define QT_SIGNAL_IGNORE SIG_IGN
+
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+#endif
+
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/qws/linux-powerpc-g++/qmake.conf b/mkspecs/qws/linux-powerpc-g++/qmake.conf
index e1926b4..6a6310a 100644
--- a/mkspecs/qws/linux-powerpc-g++/qmake.conf
+++ b/mkspecs/qws/linux-powerpc-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sh-g++/qmake.conf b/mkspecs/qws/linux-sh-g++/qmake.conf
index 61b57a3..004780a 100644
--- a/mkspecs/qws/linux-sh-g++/qmake.conf
+++ b/mkspecs/qws/linux-sh-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for SH devices with sh3-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sh4al-g++/qmake.conf b/mkspecs/qws/linux-sh4al-g++/qmake.conf
index 9caebdf..71f6b3d 100644
--- a/mkspecs/qws/linux-sh4al-g++/qmake.conf
+++ b/mkspecs/qws/linux-sh4al-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for SH4AL-DSP devices with sh3-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sharp-g++/qmake.conf b/mkspecs/qws/linux-sharp-g++/qmake.conf
index 083e4e8..6a000b9 100644
--- a/mkspecs/qws/linux-sharp-g++/qmake.conf
+++ b/mkspecs/qws/linux-sharp-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-x86-g++/qmake.conf b/mkspecs/qws/linux-x86-g++/qmake.conf
index 7e28d4e..55011ec 100644
--- a/mkspecs/qws/linux-x86-g++/qmake.conf
+++ b/mkspecs/qws/linux-x86-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
load(qt_config)
diff --git a/mkspecs/qws/linux-x86_64-g++/qmake.conf b/mkspecs/qws/linux-x86_64-g++/qmake.conf
index d4e6189..e18d055 100644
--- a/mkspecs/qws/linux-x86_64-g++/qmake.conf
+++ b/mkspecs/qws/linux-x86_64-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-zylonite-g++/qmake.conf b/mkspecs/qws/linux-zylonite-g++/qmake.conf
index 97ae600..f50b70f 100644
--- a/mkspecs/qws/linux-zylonite-g++/qmake.conf
+++ b/mkspecs/qws/linux-zylonite-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/macx-generic-g++/qmake.conf b/mkspecs/qws/macx-generic-g++/qmake.conf
index 9096712..8dcbb39 100644
--- a/mkspecs/qws/macx-generic-g++/qmake.conf
+++ b/mkspecs/qws/macx-generic-g++/qmake.conf
@@ -2,6 +2,8 @@
# qmake configuration for macx-g++ with Qtopia Core
#
+include(../../common/unix.conf)
+
MAKEFILE_GENERATOR = UNIX
TARGET_PLATFORM = macx
TEMPLATE = app
@@ -18,18 +20,18 @@ QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS = -pipe
QMAKE_CFLAGS_WARN_ON = -Wall -W
QMAKE_CFLAGS_WARN_OFF =
-QMAKE_CFLAGS_RELEASE = -O2 -fno-default-inline
+QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_SHLIB = -fPIC
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_THREAD = -D_REENTRANT
QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
-QMAKE_CXX = $(TB)c++
+QMAKE_CXX = c++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -fno-default-inline
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
diff --git a/mkspecs/qws/macx-nacl-g++/qmake.conf b/mkspecs/qws/macx-nacl-g++/qmake.conf
new file mode 100644
index 0000000..0a54b4b
--- /dev/null
+++ b/mkspecs/qws/macx-nacl-g++/qmake.conf
@@ -0,0 +1,95 @@
+#
+# qmake configuration for macx-nacl-g++ with embedded-lite
+#
+
+include(../../common/unix.conf)
+
+MAKEFILE_GENERATOR = UNIX
+TEMPLATE = app
+CONFIG += qt warn_on release link_prl
+QT += core gui
+QMAKE_INCREMENTAL_STYLE = sublib
+QMAKE_EXTENSION_SHLIB = dylib
+
+
+QMAKE_CC = nacl-gcc
+QMAKE_CXX = nacl-g++
+QMAKE_LINK = nacl-g++
+QMAKE_LINK_SHLIB = nacl-g++
+
+#QMAKE_CC = $(TB)cc
+QMAKE_LEX = flex
+QMAKE_LEXFLAGS =
+QMAKE_YACC = yacc
+QMAKE_YACCFLAGS = -d
+QMAKE_CFLAGS = -pipe -DXP_UNIX -DNACL_STANDALONE=1
+QMAKE_CFLAGS_WARN_ON = -Wall -W
+QMAKE_CFLAGS_WARN_OFF =
+QMAKE_CFLAGS_RELEASE = -O2
+QMAKE_CFLAGS_DEBUG = -g
+QMAKE_CFLAGS_SHLIB = -fPIC
+QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
+QMAKE_CFLAGS_THREAD = -D_REENTRANT
+QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
+
+#QMAKE_CXX = $(TB)c++
+QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED
+QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
+QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -fno-default-inline
+QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
+QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
+QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
+QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 =
+QMAKE_LIBDIR_X11 =
+QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+QMAKE_INCDIR_OPENGL =
+QMAKE_LIBDIR_OPENGL =
+QMAKE_INCDIR_QTOPIA = $(QPEDIR)/include
+QMAKE_LIBDIR_QTOPIA = $(QPEDIR)/lib
+
+#QMAKE_LINK = $$QMAKE_CXX
+#QMAKE_LINK_SHLIB = $$QMAKE_CXX
+QMAKE_LFLAGS =
+QMAKE_LFLAGS_RELEASE =
+QMAKE_LFLAGS_DEBUG =
+QMAKE_LFLAGS_SHLIB = -dynamiclib
+QMAKE_LFLAGS_INCREMENTAL = -undefined suppress -flat_namespace
+QMAKE_LFLAGS_PLUGIN = -bundle
+QMAKE_LFLAGS_SONAME =
+QMAKE_LFLAGS_THREAD =
+
+QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc
+QMAKE_LIBS_X11 =
+QMAKE_LIBS_X11SM =
+QMAKE_LIBS_QT = -lqte
+QMAKE_LIBS_QT_THREAD = -lqte-mt
+QMAKE_LIBS_QT_OPENGL = -lqgl
+QMAKE_LIBS_QTOPIA = -lqpe -lqtopia
+QMAKE_LIBS_THREAD =
+QMAKE_LIBS_OPENGL =
+
+QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
+
+QMAKE_AR = nacl-ar q
+QMAKE_OBJCOPY = nacl-objcopy
+QMAKE_STRIP = nacl-strip
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+load(qt_config)
diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h
new file mode 100644
index 0000000..01b26d9
--- /dev/null
+++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h
@@ -0,0 +1,175 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec 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 QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#define _POSIX_TIMERS
+
+#include "qglobal.h"
+
+
+#define _POSIX_TIMERS
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+// 1) need to reset default environment if _BSD_SOURCE is defined
+// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
+// 3) it seems older glibc need this to include the X/Open stuff
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+#include <sys/features.h>
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+//#include <dlfcn.h>
+
+#include <sys/types.h>
+//#include <sys/ioctl.h>
+//#include <sys/ipc.h>
+
+#include <sys/time.h>
+//#include <sys/shm.h>
+//#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+//#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+// extra disabling.
+#ifdef __native_client__
+#define QT_NO_FSFILEENGINE
+#define QT_NO_TRANSLATION
+#endif
+
+#ifdef QT_LARGEFILE_SUPPORT
+#define QT_STATBUF struct stat64
+#define QT_STATBUF4TSTAT struct stat64
+#define QT_STAT ::stat64
+#define QT_FSTAT ::fstat64
+#define QT_LSTAT ::lstat64
+#define QT_OPEN ::open64
+#define QT_TRUNCATE ::truncate64
+#define QT_FTRUNCATE ::ftruncate64
+#define QT_LSEEK ::lseek64
+#else
+#define QT_STATBUF struct stat
+#define QT_STATBUF4TSTAT struct stat
+#define QT_STAT ::stat
+#define QT_FSTAT ::fstat
+#define QT_LSTAT ::lstat
+#define QT_OPEN ::open
+#define QT_TRUNCATE ::truncate
+#define QT_FTRUNCATE ::ftruncate
+#define QT_LSEEK ::lseek
+#endif
+
+#ifdef QT_LARGEFILE_SUPPORT
+#define QT_FOPEN ::fopen64
+#define QT_FSEEK ::fseeko64
+#define QT_FTELL ::ftello64
+#define QT_FGETPOS ::fgetpos64
+#define QT_FSETPOS ::fsetpos64
+#define QT_FPOS_T fpos64_t
+#define QT_OFF_T off64_t
+#else
+#define QT_FOPEN ::fopen
+#define QT_FSEEK ::fseek
+#define QT_FTELL ::ftell
+#define QT_FGETPOS ::fgetpos
+#define QT_FSETPOS ::fsetpos
+#define QT_FPOS_T fpos_t
+#define QT_OFF_T long
+#endif
+
+#define QT_STAT_REG S_IFREG
+#define QT_STAT_DIR S_IFDIR
+#define QT_STAT_MASK S_IFMT
+#define QT_STAT_LNK S_IFLNK
+#define QT_SOCKET_CONNECT ::connect
+#define QT_SOCKET_BIND ::bind
+#define QT_FILENO fileno
+#define QT_CLOSE ::close
+#define QT_READ ::read
+#define QT_WRITE ::write
+#define QT_ACCESS ::access
+#define QT_GETCWD ::getcwd
+#define QT_CHDIR ::chdir
+#define QT_MKDIR ::mkdir
+#define QT_RMDIR ::rmdir
+#define QT_OPEN_LARGEFILE O_LARGEFILE
+#define QT_OPEN_RDONLY O_RDONLY
+#define QT_OPEN_WRONLY O_WRONLY
+#define QT_OPEN_RDWR O_RDWR
+#define QT_OPEN_CREAT O_CREAT
+#define QT_OPEN_TRUNC O_TRUNC
+#define QT_OPEN_APPEND O_APPEND
+
+#define QT_SIGNAL_RETTYPE void
+#define QT_SIGNAL_ARGS int
+#define QT_SIGNAL_IGNORE SIG_IGN
+
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+#endif
+
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/symbian/linux-gcce/features/default_post.prf b/mkspecs/symbian-armcc/features/default_post.prf
index 7aa1f4d..7aa1f4d 100644
--- a/mkspecs/symbian/linux-gcce/features/default_post.prf
+++ b/mkspecs/symbian-armcc/features/default_post.prf
diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf
new file mode 100644
index 0000000..be6af39
--- /dev/null
+++ b/mkspecs/symbian-armcc/qmake.conf
@@ -0,0 +1,62 @@
+#
+# qmake configuration for symbian-armcc
+#
+
+include(../common/symbian/symbian-makefile.conf)
+
+include(../common/armcc.conf)
+
+QMAKE_RVCT_LINKSTYLE = 1
+
+# notice that the middle part of the following set of vars matches the TARGET content of the libs
+
+#QMAKE_qtmain_CXXFLAGS = --arm
+#QMAKE_QtCore_CXXFLAGS =
+QMAKE_QtGui_LFLAGS = "--rw-base 0x800000"
+#QMAKE_QtDBus_CXXFLAGS =
+#QMAKE_QtDeclarative_CXXFLAGS =
+#QMAKE_QtMultimedia_CXXFLAGS =
+#QMAKE_QtNetwork_CXXFLAGS =
+#QMAKE_QtOpenGL_CXXFLAGS =
+#QMAKE_QtOpenVG_CXXFLAGS =
+#QMAKE_phonon_CXXFLAGS =
+#QMAKE_QtScript_CXXFLAGS =
+#QMAKE_QtScriptTools_CXXFLAGS =
+#QMAKE_QtSql_CXXFLAGS =
+#QMAKE_QtSvg_CXXFLAGS =
+#QMAKE_QtTest_CXXFLAGS =
+#QMAKE_QtXmlPatterns_CXXFLAGS =
+#QMAKE_QtXml_CXXFLAGS =
+QMAKE_QtWebKit_CXXFLAGS = --arm
+# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
+QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000
+
+QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
+QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib
+QMAKE_LFLAGS_APP += --entry _E32Startup
+QMAKE_LFLAGS_SHLIB += --entry _E32Dll
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+
+DEFINES += EKA2 \
+ __ARMCC__ \
+ __ARMcc_2__ \
+ __ARMCC_2_2__
+
+QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib
+QMAKE_LIBDIR *= $$(RVCT22LIB)
+
+INCLUDEPATH = $${EPOCROOT}epoc32/include \
+ $${EPOCROOT}epoc32/include/variant \
+ $${EPOCROOT}epoc32/include/stdapis \
+ $$INCLUDEPATH
+
+exists($${EPOCROOT}epoc32/include/rvct2_2) {
+ INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2
+ QMAKE_CFLAGS += --preinclude rvct2_2.h
+ QMAKE_CXXFLAGS += --preinclude rvct2_2.h
+} else {
+ INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct
+ QMAKE_CFLAGS += --preinclude rvct.h
+ QMAKE_CXXFLAGS += --preinclude rvct.h
+}
diff --git a/mkspecs/symbian-armcc/qplatformdefs.h b/mkspecs/symbian-armcc/qplatformdefs.h
new file mode 100644
index 0000000..6f084d3
--- /dev/null
+++ b/mkspecs/symbian-armcc/qplatformdefs.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the mkspecs 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 "../common/symbian/qplatformdefs.h"
diff --git a/mkspecs/symbian/linux-armcc/features/default_post.prf b/mkspecs/symbian-gcce/features/default_post.prf
index 7aa1f4d..7aa1f4d 100644
--- a/mkspecs/symbian/linux-armcc/features/default_post.prf
+++ b/mkspecs/symbian-gcce/features/default_post.prf
diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf
new file mode 100644
index 0000000..a31e6e4
--- /dev/null
+++ b/mkspecs/symbian-gcce/qmake.conf
@@ -0,0 +1,93 @@
+#
+# qmake configuration for symbian-gcce
+#
+
+include(../common/symbian/symbian-makefile.conf)
+
+include(../common/g++-unix.conf)
+include(../common/gcc-base-unix.conf)
+
+QMAKE_CC = arm-none-symbianelf-gcc
+QMAKE_CXX = arm-none-symbianelf-g++
+QMAKE_LINK = arm-none-symbianelf-ld
+QMAKE_LINK_SHLIB = arm-none-symbianelf-ld
+QMAKE_LINK_C = arm-none-symbianelf-ld
+QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld
+QMAKE_AR = arm-none-symbianelf-ar cqs
+
+# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible
+# notice that the middle part of the following set of vars matches the TARGET content of the libs
+
+QMAKE_qtmain_CXXFLAGS = -mthumb
+QMAKE_QtCore_CXXFLAGS = -mthumb
+QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
+QMAKE_QtDBus_CXXFLAGS = -mthumb
+QMAKE_QtDeclarative_CXXFLAGS = -mthumb
+QMAKE_QtMultimedia_CXXFLAGS = -mthumb
+QMAKE_QtNetwork_CXXFLAGS = -mthumb
+QMAKE_QtOpenGL_CXXFLAGS = -mthumb
+QMAKE_QtOpenVG_CXXFLAGS = -mthumb
+QMAKE_phonon_CXXFLAGS = -mthumb
+QMAKE_QtScript_CXXFLAGS = -mthumb
+QMAKE_QtScriptTools_CXXFLAGS = -mthumb
+QMAKE_QtSql_CXXFLAGS = -mthumb
+QMAKE_QtSvg_CXXFLAGS = -mthumb
+QMAKE_QtTest_CXXFLAGS = -mthumb
+QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb
+QMAKE_QtXml_CXXFLAGS = -mthumb
+#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b]
+QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
+
+# never use -fPIC, gcce-linker doesn't like it.
+# g++ conf above adds it if the host platform is 64 bit, so we remove it again
+QMAKE_CFLAGS_SHLIB -= -fPIC
+QMAKE_CFLAGS_STATIC_LIB -= -fPIC
+QMAKE_CXXFLAGS_SHLIB -= -fPIC
+QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC
+
+QMAKE_LFLAGS_SONAME =
+#QMAKE_LFLAGS_THREAD +=
+#QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
+QMAKE_LFLAGS_RPATH = --rpath=
+
+DEFINES += __GCCE__ \
+ UNICODE
+
+QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup
+QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+
+gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script
+QMAKE_CFLAGS += $${gcceExtraFlags}
+QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden
+#If we are not going to link to Qt or qtmain.lib, we need to include this at least once.
+isEmpty(QT):contains(TEMPLATE, app) {
+ QMAKE_CXXFLAGS += --include=$${EPOCROOT}epoc32/include/stdapis/staticlibinit_gcce.h
+}
+
+QMAKE_LFLAGS += --target1-abs \
+ --no-undefined \
+ --nostdlib
+
+QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/udeb/
+
+# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile
+QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs)
+for(line, QMAKE_GCC_SEARCH_DIRS) {
+ contains(line, "libraries:") {
+ foundIt="1"
+ } else {
+ contains(foundIt, "1") {
+ QMAKE_LFLAGS += $$replace(line, "[=:]", " -L")
+ }
+ }
+}
+
+QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib
+
+INCLUDEPATH = $${EPOCROOT}epoc32/include/ \
+ $${EPOCROOT}epoc32/include/variant \
+ $${EPOCROOT}epoc32/include/stdapis \
+ $${EPOCROOT}epoc32/include/gcce \
+ $$INCLUDEPATH
+
diff --git a/mkspecs/symbian-gcce/qplatformdefs.h b/mkspecs/symbian-gcce/qplatformdefs.h
new file mode 100644
index 0000000..8549347
--- /dev/null
+++ b/mkspecs/symbian-gcce/qplatformdefs.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the mkspecs 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 "../common/symbian/qplatformdefs.h"
+
diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
index 3877edb..a557cbb 100644
--- a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
+++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
@@ -21,7 +21,7 @@ CLEAN_TARGET:=$(1)
$(1): $(2)
$(call startrule,qmake_emulator_deployment) \
- $(GNUCP) --no-preserve=mode $(2) "$$@" && \
+ $(GNUCP) --remove-destination --no-preserve=mode $(2) "$$@" && \
$(GNUCHMOD) a+rw "$$@" \
$(call endrule,qmake_emulator_deployment)
endef
diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm
index 1338515..2dc4028 100644
--- a/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm
+++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm
@@ -12,6 +12,10 @@ SINGLETON:=$(call sanitise,TARGET_$(PREDEP_TARGET))
$(call makepathfor,$(PREDEP_TARGET))
+ifeq ($(patsubst /epoc32/%,MATCH,$(firstword $(COMMAND))),MATCH)
+COMMAND:=$(EPOCROOT)$(COMMAND)
+endif
+
define qmake_extra_pre_targetdep
EXPORT:: $(PREDEP_TARGET)
diff --git a/mkspecs/symbian/linux-armcc/qmake.conf b/mkspecs/symbian/linux-armcc/qmake.conf
deleted file mode 100644
index f058421..0000000
--- a/mkspecs/symbian/linux-armcc/qmake.conf
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# qmake configuration for symbian/linux-armcc
-#
-
-include(../../common/symbian/symbian-makefile.conf)
-
-include(../../common/armcc.conf)
-
-QMAKE_RVCT_LINKSTYLE = 1
-
-# notice that the middle part of the following set of vars matches the TARGET content of the libs
-
-#QMAKE_qtmain_CXXFLAGS = --arm
-#QMAKE_QtCore_CXXFLAGS =
-QMAKE_QtGui_LFLAGS = "--rw-base 0x800000"
-#QMAKE_QtDBus_CXXFLAGS =
-#QMAKE_QtDeclarative_CXXFLAGS =
-#QMAKE_QtMultimedia_CXXFLAGS =
-#QMAKE_QtNetwork_CXXFLAGS =
-#QMAKE_QtOpenGL_CXXFLAGS =
-#QMAKE_QtOpenVG_CXXFLAGS =
-#QMAKE_phonon_CXXFLAGS =
-#QMAKE_QtScript_CXXFLAGS =
-#QMAKE_QtScriptTools_CXXFLAGS =
-#QMAKE_QtSql_CXXFLAGS =
-#QMAKE_QtSvg_CXXFLAGS =
-#QMAKE_QtTest_CXXFLAGS =
-#QMAKE_QtXmlPatterns_CXXFLAGS =
-#QMAKE_QtXml_CXXFLAGS =
-QMAKE_QtWebKit_CXXFLAGS = --arm
-# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
-QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000
-
-QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib
-QMAKE_LFLAGS_APP += --entry _E32Startup
-QMAKE_LFLAGS_SHLIB += --entry _E32Dll
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-
-DEFINES += EKA2 \
- __ARMCC__ \
- __ARMcc_2__ \
- __ARMCC_2_2__
-
-QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib
-QMAKE_LIBDIR *= $$(RVCT22LIB)
-
-INCLUDEPATH = $${EPOCROOT}epoc32/include \
- $${EPOCROOT}epoc32/include/variant \
- $${EPOCROOT}epoc32/include/stdapis \
- $$INCLUDEPATH
-
-exists($${EPOCROOT}epoc32/include/rvct2_2) {
- INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2
- QMAKE_CFLAGS += --preinclude rvct2_2.h
- QMAKE_CXXFLAGS += --preinclude rvct2_2.h
-} else {
- INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct
- QMAKE_CFLAGS += --preinclude rvct.h
- QMAKE_CXXFLAGS += --preinclude rvct.h
-}
diff --git a/mkspecs/symbian/linux-armcc/qplatformdefs.h b/mkspecs/symbian/linux-armcc/qplatformdefs.h
deleted file mode 100644
index 3b7d023..0000000
--- a/mkspecs/symbian/linux-armcc/qplatformdefs.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the mkspecs 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 "../../common/symbian/qplatformdefs.h"
diff --git a/mkspecs/symbian/linux-gcce/qmake.conf b/mkspecs/symbian/linux-gcce/qmake.conf
deleted file mode 100644
index faac2f1..0000000
--- a/mkspecs/symbian/linux-gcce/qmake.conf
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# qmake configuration for symbian/linux-gcce
-#
-
-include(../../common/symbian/symbian-makefile.conf)
-
-include(../../common/g++.conf)
-
-QMAKE_CC = arm-none-symbianelf-gcc
-QMAKE_CXX = arm-none-symbianelf-g++
-QMAKE_LINK = arm-none-symbianelf-ld
-QMAKE_LINK_SHLIB = arm-none-symbianelf-ld
-QMAKE_LINK_C = arm-none-symbianelf-ld
-QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld
-QMAKE_AR = arm-none-symbianelf-ar cqs
-
-# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible
-# notice that the middle part of the following set of vars matches the TARGET content of the libs
-
-QMAKE_qtmain_CXXFLAGS = -mthumb
-QMAKE_QtCore_CXXFLAGS = -mthumb
-QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
-QMAKE_QtDBus_CXXFLAGS = -mthumb
-QMAKE_QtDeclarative_CXXFLAGS = -mthumb
-QMAKE_QtMultimedia_CXXFLAGS = -mthumb
-QMAKE_QtNetwork_CXXFLAGS = -mthumb
-QMAKE_QtOpenGL_CXXFLAGS = -mthumb
-QMAKE_QtOpenVG_CXXFLAGS = -mthumb
-QMAKE_phonon_CXXFLAGS = -mthumb
-QMAKE_QtScript_CXXFLAGS = -mthumb
-QMAKE_QtScriptTools_CXXFLAGS = -mthumb
-QMAKE_QtSql_CXXFLAGS = -mthumb
-QMAKE_QtSvg_CXXFLAGS = -mthumb
-QMAKE_QtTest_CXXFLAGS = -mthumb
-QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb
-QMAKE_QtXml_CXXFLAGS = -mthumb
-#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b]
-QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
-
-# never use -fPIC, gcce-linker doesn't like it.
-# g++ conf above adds it if the host platform is 64 bit, so we remove it again
-QMAKE_CFLAGS_SHLIB -= -fPIC
-QMAKE_CFLAGS_STATIC_LIB -= -fPIC
-QMAKE_CXXFLAGS_SHLIB -= -fPIC
-QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC
-
-QMAKE_LFLAGS_SONAME =
-#QMAKE_LFLAGS_THREAD +=
-#QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
-QMAKE_LFLAGS_RPATH = --rpath=
-
-DEFINES += __GCCE__ \
- UNICODE \
- _STLP_NO_EXCEPTION_HEADER
-
-QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup
-QMAKE_LFLAGS_SHLIB += --default-symver --entry _E32Dll
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-
-gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script
-QMAKE_CFLAGS += $${gcceExtraFlags}
-QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden
-#If we are not going to link to Qt or qtmain.lib, we need to include this at least once.
-isEmpty(QT):contains(TEMPLATE, app) {
- QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h
-}
-
-QMAKE_LFLAGS += --target1-abs \
- --no-undefined \
- --nostdlib
-
-QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/
-
-# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile
-QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs)
-for(line, QMAKE_GCC_SEARCH_DIRS) {
- contains(line, "libraries:") {
- foundIt="1"
- } else {
- contains(foundIt, "1") {
- QMAKE_LFLAGS += $$replace(line, "[=:]", " -L")
- }
- }
-}
-
-QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib
-
-INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \
- $${EPOCROOT}/epoc32/include/variant \
- $${EPOCROOT}/epoc32/include/stdapis \
- $${EPOCROOT}/epoc32/include/gcce \
- ${EPOCROOT}/epoc32/include/stdapis/sys \
- ${EPOCROOT}/epoc32/include/stdapis/stlport \
- $$INCLUDEPATH
-
diff --git a/mkspecs/symbian/linux-gcce/qplatformdefs.h b/mkspecs/symbian/linux-gcce/qplatformdefs.h
deleted file mode 100644
index fcbd9ea..0000000
--- a/mkspecs/symbian/linux-gcce/qplatformdefs.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the mkspecs 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 "../../common/symbian/qplatformdefs.h"
-
diff --git a/mkspecs/unsupported/linux-clang/qmake.conf b/mkspecs/unsupported/linux-clang/qmake.conf
new file mode 100644
index 0000000..6b63b7a
--- /dev/null
+++ b/mkspecs/unsupported/linux-clang/qmake.conf
@@ -0,0 +1,19 @@
+#
+# qmake configuration for linux-clang
+#
+
+MAKEFILE_GENERATOR = UNIX
+TARGET_PLATFORM = unix
+TEMPLATE = app
+CONFIG += qt warn_on release incremental link_prl
+QT += core gui
+
+QMAKE_INCREMENTAL_STYLE = sublib
+
+include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/clang.conf)
+
+QMAKE_LFLAGS += -ccc-gcc-name g++
+
+load(qt_config)
diff --git a/mkspecs/unsupported/linux-clang/qplatformdefs.h b/mkspecs/unsupported/linux-clang/qplatformdefs.h
new file mode 100644
index 0000000..2dd7b80
--- /dev/null
+++ b/mkspecs/unsupported/linux-clang/qplatformdefs.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec 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 QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#include "qglobal.h"
+
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+// 1) need to reset default environment if _BSD_SOURCE is defined
+// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
+// 3) it seems older glibc need this to include the X/Open stuff
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+#include <features.h>
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <dlfcn.h>
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/ipc.h>
+#include <sys/time.h>
+#include <sys/shm.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+#define QT_USE_XOPEN_LFS_EXTENSIONS
+#include "../../common/posix/qplatformdefs.h"
+
+#undef QT_SOCKLEN_T
+
+#if defined(__GLIBC__) && (__GLIBC__ >= 2)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+#endif
+
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
index 28e7754..c362634 100644
--- a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
+++ b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
@@ -18,8 +18,9 @@ CONFIG += qt warn_on release incremental link_prl
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = sb2 gcc
diff --git a/mkspecs/unsupported/macx-clang/Info.plist.app b/mkspecs/unsupported/macx-clang/Info.plist.app
new file mode 100644
index 0000000..393b615
--- /dev/null
+++ b/mkspecs/unsupported/macx-clang/Info.plist.app
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+ <key>CFBundleIconFile</key>
+ <string>@ICON@</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleGetInfoString</key>
+ <string>Created by Qt/QMake</string>
+ <key>CFBundleSignature</key>
+ <string>@TYPEINFO@</string>
+ <key>CFBundleExecutable</key>
+ <string>@EXECUTABLE@</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.yourcompany.@EXECUTABLE@</string>
+ <key>NOTE</key>
+ <string>This file was generated by Qt/QMake.</string>
+</dict>
+</plist>
diff --git a/mkspecs/unsupported/macx-clang/Info.plist.lib b/mkspecs/unsupported/macx-clang/Info.plist.lib
new file mode 100644
index 0000000..97609ed
--- /dev/null
+++ b/mkspecs/unsupported/macx-clang/Info.plist.lib
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@SHORT_VERSION@</string>
+ <key>CFBundleGetInfoString</key>
+ <string>Created by Qt/QMake</string>
+ <key>CFBundleSignature</key>
+ <string>@TYPEINFO@</string>
+ <key>CFBundleExecutable</key>
+ <string>@LIBRARY@</string>
+ <key>NOTE</key>
+ <string>Please, do NOT change this file -- It was generated by Qt/QMake.</string>
+</dict>
+</plist>
diff --git a/mkspecs/unsupported/macx-clang/qmake.conf b/mkspecs/unsupported/macx-clang/qmake.conf
new file mode 100644
index 0000000..3191344
--- /dev/null
+++ b/mkspecs/unsupported/macx-clang/qmake.conf
@@ -0,0 +1,21 @@
+#
+# qmake configuration for Clang on OS X
+#
+
+MAKEFILE_GENERATOR = UNIX
+TARGET_PLATFORM = macx
+TEMPLATE = app
+CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib_version_first plugin_no_soname link_prl
+QT += core gui
+QMAKE_INCREMENTAL_STYLE = sublib
+
+include(../../common/mac.conf)
+include(../../common/gcc-base-macx.conf)
+include(../../common/clang.conf)
+
+QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+load(qt_config)
diff --git a/mkspecs/unsupported/macx-clang/qplatformdefs.h b/mkspecs/unsupported/macx-clang/qplatformdefs.h
new file mode 100644
index 0000000..72f3ac7
--- /dev/null
+++ b/mkspecs/unsupported/macx-clang/qplatformdefs.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec 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 QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#include "qglobal.h"
+
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#define QT_NO_LIBRARY_UNLOAD
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/ipc.h>
+#include <sys/time.h>
+#include <sys/shm.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+#include "../../common/posix/qplatformdefs.h"
+
+#undef QT_OPEN_LARGEFILE
+#undef QT_SOCKLEN_T
+#undef QT_SIGNAL_IGNORE
+
+#define QT_OPEN_LARGEFILE 0
+
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#define QT_SIGNAL_IGNORE (void (*)(int))1
+
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/unsupported/qnx-g++/qmake.conf b/mkspecs/unsupported/qnx-g++/qmake.conf
index dfe9bed..83c4a26 100644
--- a/mkspecs/unsupported/qnx-g++/qmake.conf
+++ b/mkspecs/unsupported/qnx-g++/qmake.conf
@@ -10,7 +10,8 @@ TEMPLATE = app
CONFIG += qt warn_on release link_prl
QT += core gui
-include(../common/g++.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
include(../common/unix.conf)
QMAKE_CFLAGS_THREAD = -D_REENTRANT
diff --git a/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf
new file mode 100644
index 0000000..b891c5e
--- /dev/null
+++ b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf
@@ -0,0 +1,23 @@
+#
+# qmake configuration for building with linux-g++
+#
+
+include(../../../common/gcc-base-unix.conf)
+include(../../../common/g++-unix.conf)
+include(../../../common/linux.conf)
+include(../../../common/qws.conf)
+
+load(qt_config)
+
+# ### HACK - This should be a configure check
+OPENKODE_DIR = $(OPENKODE_DIR)
+
+QMAKE_INCDIR_OPENGL_ES2 = $${OPENKODE_DIR}/include
+QMAKE_LIBDIR_OPENGL_ES2 = $${OPENKODE_DIR}/lib-target
+QMAKE_LIBS_OPENGL_ES2 = $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target -lGLESv2_CM
+
+QMAKE_INCDIR_EGL = $$QMAKE_INCDIR_OPENGL_ES2
+QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2
+QMAKE_LIBS_EGL = $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target -lEGL
+
+QMAKE_LIBS += $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target
diff --git a/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h
new file mode 100644
index 0000000..86d84e8
--- /dev/null
+++ b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** 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 qmake spec 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 "../../../linux-g++/qplatformdefs.h"
diff --git a/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf b/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf
index 26de9b7..bb760b2 100644
--- a/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf
+++ b/mkspecs/unsupported/qws/qnx-generic-g++/qmake.conf
@@ -61,7 +61,6 @@ QMAKE_PCH_OUTPUT_EXT = .gch
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
-#include(../../common/g++.conf)
include(../../common/unix.conf)
QMAKE_CFLAGS_THREAD = -D_REENTRANT
diff --git a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
index 80b5f3e..7a77c81 100644
--- a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
+++ b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
@@ -14,7 +14,8 @@ VXWORKS_ARCH = ppc
VXWORKS_CPU = PPC32
VXWORKS_ARCH_MUNCH = ppc
-include(../../common/g++.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/linux.conf)
QMAKE_CC = cc$$VXWORKS_ARCH_MUNCH
diff --git a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
index 83f46c0..2a96a1a 100644
--- a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
+++ b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
@@ -14,7 +14,8 @@ VXWORKS_ARCH = simlinux
VXWORKS_CPU = SIMLINUX
VXWORKS_ARCH_MUNCH = pentium
-include(../../common/g++.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/linux.conf)
QMAKE_CC = cc$$VXWORKS_ARCH_MUNCH
diff --git a/mkspecs/win32-msvc2003/qmake.conf b/mkspecs/win32-msvc2003/qmake.conf
index 63d1ffd..a573a4d 100644
--- a/mkspecs/win32-msvc2003/qmake.conf
+++ b/mkspecs/win32-msvc2003/qmake.conf
@@ -53,7 +53,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf
index 265d028..aa58e30 100644
--- a/mkspecs/win32-msvc2005/qmake.conf
+++ b/mkspecs/win32-msvc2005/qmake.conf
@@ -55,7 +55,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf
index 1432645..ee7b99a 100644
--- a/mkspecs/win32-msvc2008/qmake.conf
+++ b/mkspecs/win32-msvc2008/qmake.conf
@@ -57,7 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf
index 84086e2..44e460e 100644
--- a/mkspecs/win32-msvc2010/qmake.conf
+++ b/mkspecs/win32-msvc2010/qmake.conf
@@ -57,7 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index aa55f51..c659adb 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -167,6 +167,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
}
if(tmp_proj.read(fn)) {
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = tmp_proj.variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin();
it != vars.end(); ++it) {
diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp
index e98831d..df05550 100644
--- a/qmake/generators/metamakefile.cpp
+++ b/qmake/generators/metamakefile.cpp
@@ -217,6 +217,7 @@ BuildsMetaMakefileGenerator::write(const QString &oldpwd)
// debugging
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = project->variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it) {
if(!it.key().startsWith(".") && !it.value().isEmpty())
diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
index 5a6f66f..eb45b10 100644
--- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
@@ -59,7 +59,12 @@
static QString fixPathToEpocOS(const QString &src)
{
QString ret = Option::fixPathToTargetOS(src);
- return ret.replace('/', '\\');
+
+ bool pathHasDriveLetter = false;
+ if (ret.size() > 1)
+ pathHasDriveLetter = (ret.at(1) == QLatin1Char(':'));
+
+ return pathHasDriveLetter ? ret.replace('/', '\\') : QDir::toNativeSeparators(ret);
}
static bool isPlugin(const QFileInfo& info, const QString& devicePath)
@@ -250,7 +255,8 @@ void initProjectDeploySymbian(QMakeProject* project,
QStringList flags = project->values(item + ".flags");
- foreach(QString source, project->values(item + ".sources")) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ foreach(QString source, project->values(item + ".sources") + project->values(item + ".files")) {
source = Option::fixPathToLocalOS(source);
QString nameFilter;
QFileInfo info(source);
diff --git a/qmake/generators/symbian/symbian_makefile.h b/qmake/generators/symbian/symbian_makefile.h
index 94f0145..63cede2 100644
--- a/qmake/generators/symbian/symbian_makefile.h
+++ b/qmake/generators/symbian/symbian_makefile.h
@@ -72,7 +72,9 @@ public:
} else {
const QStringList deployments = this->project->values("DEPLOYMENT");
for (int i = 0; i < deployments.count(); ++i) {
- if (!this->project->values(deployments.at(i) + ".sources").isEmpty()) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ if (!this->project->values(deployments.at(i) + ".sources").isEmpty() ||
+ !this->project->values(deployments.at(i) + ".files").isEmpty()) {
generatePkg = true;
break;
}
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp
index 0938b58..9d4f27e 100644
--- a/qmake/generators/symbian/symbiancommon.cpp
+++ b/qmake/generators/symbian/symbiancommon.cpp
@@ -699,7 +699,7 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons,
newValues << itemList.join("\n");
}
}
- // Verify thet there is exactly one value in RSS_TAG_NBROFICONS
+ // Verify that there is exactly one value in RSS_TAG_NBROFICONS
if (newKey == RSS_TAG_NBROFICONS) {
if (newValues.count() == 1) {
numberOfIcons = newValues[0];
@@ -708,7 +708,7 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons,
RSS_RULES_BASE, RSS_TAG_NBROFICONS);
continue;
}
- // Verify thet there is exactly one value in RSS_TAG_ICONFILE
+ // Verify that there is exactly one value in RSS_TAG_ICONFILE
} else if (newKey == RSS_TAG_ICONFILE) {
if (newValues.count() == 1) {
iconFile = newValues[0];
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 09a3fc8..0d63cdf 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -197,7 +197,9 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
generatePkg = true;
} else {
foreach(QString item, project->values("DEPLOYMENT")) {
- if (!project->values(item + ".sources").isEmpty()) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ if (!project->values(item + ".sources").isEmpty() ||
+ !project->values(item + ".files").isEmpty()) {
generatePkg = true;
break;
}
diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp
index 7416cbe..f895109 100644
--- a/qmake/generators/symbian/symmake_abld.cpp
+++ b/qmake/generators/symbian/symmake_abld.cpp
@@ -205,8 +205,11 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool
#ifdef Q_OS_WIN32
t << "XCOPY = xcopy /d /f /h /r /y /i" << endl;
t << "ABLD = ABLD.BAT" << endl;
+#elif defined(Q_OS_MAC)
+ t << "XCOPY = cp -R -v" << endl;
+ t << "ABLD = abld" << endl;
#else
- t << "XCOPY = cp -u -v" << endl;
+ t << "XCOPY = cp -R -u -v" << endl;
t << "ABLD = abld" << endl;
#endif
t << "DEBUG_PLATFORMS = " << debugPlatforms.join(" ") << endl;
@@ -427,7 +430,8 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool i
t << WINSCW_DEPLOYMENT_TARGET ":" << endl;
QString remoteTestPath = epocRoot()
- + QLatin1String(isRom ? "epoc32\\data\\z\\private\\" : "epoc32\\winscw\\c\\private\\")
+ + QDir::toNativeSeparators(QLatin1String(isRom ? "epoc32/data/z/private/"
+ : "epoc32/winscw/c/private/"))
+ privateDirUid;
DeploymentList depList;
@@ -439,11 +443,21 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool i
t << "\t-echo Deploying changed files..." << endl;
for (int i = 0; i < depList.size(); ++i) {
+#ifdef Q_OS_WIN32
// Xcopy prompts for selecting file or directory if target doesn't exist,
// and doesn't provide switch to force file selection. It does provide dir forcing, though,
// so strip the last part of the destination.
t << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \""
<< depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl;
+#else
+ QString dirExists = var("QMAKE_CHK_DIR_EXISTS");
+ QString mkdir = var("QMAKE_MKDIR");
+ QString dir = QFileInfo(depList.at(i).to).dir().path();
+ t << "\t-@ " << dirExists << " \"" << dir << "\" || "
+ << mkdir << " \"" << dir << "\"" << endl;
+ t << "\t-$(XCOPY) \"" << QDir::toNativeSeparators(depList.at(i).from) << "\" \""
+ << QDir::toNativeSeparators(depList.at(i).to) << "\"" << endl;
+#endif
}
t << endl;
@@ -455,7 +469,7 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool i
QStringList cleanList;
for (int i = 0; i < depList.size(); ++i) {
- cleanList.append(depList.at(i).to);
+ cleanList.append(QDir::toNativeSeparators(depList.at(i).to));
}
generateCleanCommands(t, cleanList, "$(DEL_FILE)", "", "", "");
diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp
index 32c31ee..d650e08 100644
--- a/qmake/generators/symbian/symmake_sbsv2.cpp
+++ b/qmake/generators/symbian/symmake_sbsv2.cpp
@@ -120,7 +120,7 @@ void SymbianSbsv2MakefileGenerator::findInstalledCompilerVersions(const QString
&& fileInfo(matcher.cap(matcher.captureCount())).exists()) {
// First capture (index 0) is the whole match, which is skipped.
// Next n captures are version numbers, which are interesting.
- // Final capture is the env var value, which we alrady used, so that is skipped, too.
+ // Final capture is the env var value, which we already used, so that is skipped, too.
int capture = 1;
int finalCapture = matcher.captureCount() - 1;
QString version = versionPrefix;
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index 71a6061..43543a1 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -206,6 +206,33 @@ UnixMakefileGenerator::init()
// icc style
pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT"));
+ } else {
+ // gcc style (including clang_pch_style)
+ QString headerPrefix = project->first("QMAKE_PRECOMP_PREFIX");
+ QString headerSuffix;
+ if (project->isActiveConfig("clang_pch_style"))
+ headerSuffix = project->first("QMAKE_PCH_OUTPUT_EXT");
+ else
+ pchBaseName += project->first("QMAKE_PCH_OUTPUT_EXT");
+
+ pchBaseName += Option::dir_sep;
+ QString pchOutputFile;
+
+ if(comps[i] == "C") {
+ pchOutputFile = "c";
+ } else if(comps[i] == "CXX") {
+ pchOutputFile = "c++";
+ } else if(project->isActiveConfig("objective_c")) {
+ if(comps[i] == "OBJC")
+ pchOutputFile = "objective-c";
+ else if(comps[i] == "OBJCXX")
+ pchOutputFile = "objective-c++";
+ }
+
+ if(!pchOutputFile.isEmpty()) {
+ pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
+ pchBaseName + pchOutputFile + headerSuffix);
+ }
}
if (!pchFlags.isEmpty())
@@ -379,7 +406,9 @@ QStringList
QString header_prefix;
if(!project->isEmpty("PRECOMPILED_DIR"))
header_prefix = project->first("PRECOMPILED_DIR");
- header_prefix += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
+ header_prefix += project->first("QMAKE_ORIG_TARGET");
+ if (!project->isActiveConfig("clang_pch_style"))
+ header_prefix += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
@@ -389,23 +418,25 @@ QStringList
}
}
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
header_prefix += Option::dir_sep + project->first("QMAKE_PRECOMP_PREFIX");
for(QStringList::Iterator it = Option::c_ext.begin(); it != Option::c_ext.end(); ++it) {
if(file.endsWith(*it)) {
if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE")) {
- QString precomp_c_h = header_prefix + "c";
+ QString precomp_c_h = header_prefix + "c" + header_suffix;
if(!ret.contains(precomp_c_h))
ret += precomp_c_h;
}
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE")) {
- QString precomp_objc_h = header_prefix + "objective-c";
+ QString precomp_objc_h = header_prefix + "objective-c" + header_suffix;
if(!ret.contains(precomp_objc_h))
ret += precomp_objc_h;
}
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
- QString precomp_objcpp_h = header_prefix + "objective-c++";
+ QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
if(!ret.contains(precomp_objcpp_h))
ret += precomp_objcpp_h;
}
@@ -416,13 +447,13 @@ QStringList
for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
if(file.endsWith(*it)) {
if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE")) {
- QString precomp_cpp_h = header_prefix + "c++";
+ QString precomp_cpp_h = header_prefix + "c++" + header_suffix;
if(!ret.contains(precomp_cpp_h))
ret += precomp_cpp_h;
}
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
- QString precomp_objcpp_h = header_prefix + "objective-c++";
+ QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
if(!ret.contains(precomp_objcpp_h))
ret += precomp_objcpp_h;
}
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index d16cd6b..7c68316 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -835,7 +835,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(!project->isEmpty("PRECOMPILED_DIR"))
precomph_out_dir = project->first("PRECOMPILED_DIR");
- precomph_out_dir += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
+ precomph_out_dir += project->first("QMAKE_ORIG_TARGET");
+ if (!project->isActiveConfig("clang_pch_style"))
+ precomph_out_dir += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
@@ -849,19 +851,22 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
precomp_files << precomph_out_dir << sourceFile << objectFile;
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
precomph_out_dir += Option::dir_sep;
QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
+
if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "c";
+ precomp_files += precomph_out_dir + header_prefix + "c" + header_suffix;
if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "c++";
+ precomp_files += precomph_out_dir + header_prefix + "c++" + header_suffix;
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "objective-c";
+ precomp_files += precomph_out_dir + header_prefix + "objective-c" + header_suffix;
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "objective-c++";
+ precomp_files += precomph_out_dir + header_prefix + "objective-c++" + header_suffix;
}
}
t << "-$(DEL_FILE) " << precomp_files.join(" ") << "\n\t";
@@ -930,7 +935,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QString pchOutput;
if(!project->isEmpty("PRECOMPILED_DIR"))
pchOutput = project->first("PRECOMPILED_DIR");
- pchOutput += pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT");
+ pchOutput += pchBaseName;
+ if (!project->isActiveConfig("clang_pch_style"))
+ pchOutput += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
@@ -943,9 +950,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
pchFlags = pchFlags.replace("${QMAKE_PCH_TEMP_SOURCE}", sourceFile)
.replace("${QMAKE_PCH_TEMP_OBJECT}", objectFile);
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
-
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
pchOutput += Option::dir_sep;
QString pchOutputDir = pchOutput, pchOutputFile;
@@ -961,7 +969,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
if(pchOutputFile.isEmpty())
continue;
- pchOutput += header_prefix + pchOutputFile;
+ pchOutput += header_prefix + pchOutputFile + header_suffix;
t << pchOutput << ": " << pchInput << " " << findDependencies(pchInput).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(pchOutputDir);
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index d32b888..0678d86 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -215,7 +215,7 @@ void NmakeMakefileGenerator::init()
project->values("QMAKE_CLEAN").append(project->first("DESTDIR") + project->first("TARGET") + version + ".exp");
}
if(project->isActiveConfig("debug")) {
- project->values("QMAKE_CLEAN").append(project->first("DESTDIR") + project->first("TARGET") + version + ".pdb");
+ project->values("QMAKE_DISTCLEAN").append(project->first("DESTDIR") + project->first("TARGET") + version + ".pdb");
project->values("QMAKE_CLEAN").append(project->first("DESTDIR") + project->first("TARGET") + version + ".ilk");
project->values("QMAKE_CLEAN").append("vc*.pdb");
project->values("QMAKE_CLEAN").append("vc*.idb");
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index b20d2b7..834e5fd 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -2288,7 +2288,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
// Output in info.additionalFile -----------
if (!CustomBuildTool.Description.isEmpty())
- CustomBuildTool.Description += " & ";
+ CustomBuildTool.Description += ", ";
CustomBuildTool.Description += cmd_name;
CustomBuildTool.CommandLine += VCToolBase::fixCommandLine(cmd.trimmed());
int space = cmd.indexOf(' ');
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 06b726f..fbaa6c2 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -459,6 +459,7 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
tmp_vcproj.setProjectFile(&tmp_proj);
Option::qmake_mode = old_mode;
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = tmp_proj.variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin();
it != vars.end(); ++it) {
@@ -1174,7 +1175,8 @@ void VcprojGenerator::initDeploymentTool()
devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath));
}
// foreach d in item.sources
- foreach(QString source, project->values(item + ".sources")) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ foreach(QString source, project->values(item + ".sources") + project->values(item + ".files")) {
QString itemDevicePath = devicePath;
source = Option::fixPathToLocalOS(source);
QString nameFilter;
@@ -1551,10 +1553,10 @@ QString VcprojGenerator::fixFilename(QString ofile) const
if(slashfind == -1) {
ofile = ofile.replace('-', '_');
} else {
- int hypenfind = ofile.indexOf('-', slashfind);
- while (hypenfind != -1 && slashfind < hypenfind) {
- ofile = ofile.replace(hypenfind, 1, '_');
- hypenfind = ofile.indexOf('-', hypenfind + 1);
+ int hyphenfind = ofile.indexOf('-', slashfind);
+ while (hyphenfind != -1 && slashfind < hyphenfind) {
+ ofile = ofile.replace(hyphenfind, 1, '_');
+ hyphenfind = ofile.indexOf('-', hyphenfind + 1);
}
}
return ofile;
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index 58f21cb..ddfe399 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -651,7 +651,7 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "DIST = " << varList("DISTFILES") << endl;
t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl;
- // The comment is important to maintain variable compatability with Unix
+ // The comment is important to maintain variable compatibility with Unix
// Makefiles, while not interpreting a trailing-slash as a linebreak
t << "DESTDIR = " << escapeFilePath(destDir) << " #avoid trailing-slash linebreak" << endl;
t << "TARGET = " << escapeFilePath(target) << endl;
diff --git a/qmake/project.cpp b/qmake/project.cpp
index 29d4242..5f5745a 100644
--- a/qmake/project.cpp
+++ b/qmake/project.cpp
@@ -76,7 +76,7 @@
QT_BEGIN_NAMESPACE
-//expand fucntions
+//expand functions
enum ExpandFunc { E_MEMBER=1, E_FIRST, E_LAST, E_CAT, E_FROMFILE, E_EVAL, E_LIST,
E_SPRINTF, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION,
E_FIND, E_SYSTEM, E_UNIQUE, E_QUOTE, E_ESCAPE_EXPAND,
@@ -677,7 +677,23 @@ QMakeProject::reset()
bool
QMakeProject::parse(const QString &t, QMap<QString, QStringList> &place, int numLines)
{
- QString s = t.simplified();
+ // To preserve the integrity of any UTF-8 characters in .pro file, temporarily replace the
+ // non-breaking space (0xA0) characters with another non-space character, so that
+ // QString::simplified() call will not replace it with space.
+ // Note: There won't be any two byte characters in .pro files, so 0x10A0 should be a safe
+ // replacement character.
+ static QChar nbsp(0xA0);
+ static QChar nbspFix(0x01A0);
+ QString s;
+ if (t.indexOf(nbsp) != -1) {
+ s = t;
+ s.replace(nbsp, nbspFix);
+ s = s.simplified();
+ s.replace(nbspFix, nbsp);
+ } else {
+ s = t.simplified();
+ }
+
int hash_mark = s.indexOf("#");
if(hash_mark != -1) //good bye comments
s = s.left(hash_mark);
@@ -1063,7 +1079,7 @@ QMakeProject::parse(const QString &t, QMap<QString, QStringList> &place, int num
#undef SKIP_WS
doVariableReplace(var, place);
- var = varMap(var); //backwards compatability
+ var = varMap(var); //backwards compatibility
if(!var.isEmpty() && Option::mkfile::do_preprocess) {
static QString last_file("*none*");
if(parser.file != last_file) {
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-buffer.h b/src/3rdparty/harfbuzz/src/harfbuzz-buffer.h
index 0d7c2c2..0d631b2 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-buffer.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-buffer.h
@@ -32,10 +32,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
typedef struct HB_GlyphItemRec_ {
HB_UInt gindex;
HB_UInt properties;
@@ -93,10 +89,6 @@ hb_buffer_add_glyph( HB_Buffer buffer,
HB_UInt properties,
HB_UInt cluster );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_BUFFER_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h b/src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h
index 2a6d958..94e9b43 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-gdef-private.h
@@ -33,11 +33,6 @@
HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/* Attachment related structures */
struct HB_AttachPoint_
@@ -126,10 +121,6 @@ _HB_GDEF_LoadMarkAttachClassDef_From_LookupFlags( HB_GDEFHeader* gdef,
HB_Lookup* lo,
HB_UShort num_lookups );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_GDEF_PRIVATE_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gdef.h b/src/3rdparty/harfbuzz/src/harfbuzz-gdef.h
index f9a03dd..ccb6bf9 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-gdef.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-gdef.h
@@ -31,10 +31,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/* GDEF glyph properties. Note that HB_GDEF_COMPONENT has no corresponding
* flag in the LookupFlag field. */
#define HB_GDEF_BASE_GLYPH 0x0002
@@ -131,10 +127,6 @@ HB_Error HB_GDEF_Build_ClassDefinition( HB_GDEFHeader* gdef,
HB_UShort* glyph_array,
HB_UShort* class_array );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_GDEF_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-global.h b/src/3rdparty/harfbuzz/src/harfbuzz-global.h
index bccd6a2..d4e6b46 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-global.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-global.h
@@ -39,10 +39,6 @@
#define HB_END_HEADER /* nothing */
#endif
-#if defined(__GNUC__) || defined(_MSC_VER)
-#define HB_USE_PACKED_STRUCTS
-#endif
-
HB_BEGIN_HEADER
#ifndef FALSE
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h b/src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h
index 39f3159..63ba907 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h
@@ -32,10 +32,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/* shared tables */
#define VR_X_PLACEMENT_DEVICE 0
@@ -720,10 +716,6 @@ HB_INTERNAL void
_HB_GPOS_Free_SubTable( HB_GPOS_SubTable* st,
HB_UShort lookup_type );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_GPOS_PRIVATE_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h b/src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h
index 7eb329e..df0c3f6 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-gsub-private.h
@@ -32,10 +32,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
typedef union HB_GSUB_SubTable_ HB_GSUB_SubTable;
/* LookupType 1 */
@@ -474,10 +470,6 @@ HB_INTERNAL void
_HB_GSUB_Free_SubTable( HB_GSUB_SubTable* st,
HB_UShort lookup_type );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_GSUB_PRIVATE_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gsub.h b/src/3rdparty/harfbuzz/src/harfbuzz-gsub.h
index b00df44..6e452bd 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-gsub.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-gsub.h
@@ -31,11 +31,6 @@
HB_BEGIN_HEADER
-
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/* Lookup types for glyph substitution */
#define HB_GSUB_LOOKUP_SINGLE 1
@@ -139,10 +134,6 @@ HB_Error HB_GSUB_Register_Alternate_Function( HB_GSUBHeader* gsub,
HB_Error HB_GSUB_Apply_String( HB_GSUBHeader* gsub,
HB_Buffer buffer );
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_GSUB_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
index 4d8418b..4a618da 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
@@ -37,7 +37,7 @@ static HB_Bool isLetter(HB_UChar16 ucs)
FLAG(HB_Letter_Titlecase) |
FLAG(HB_Letter_Modifier) |
FLAG(HB_Letter_Other);
- return FLAG(HB_GetUnicodeCharCategory(ucs)) & test;
+ return (FLAG(HB_GetUnicodeCharCategory(ucs)) & test) != 0;
}
static HB_Bool isMark(HB_UChar16 ucs)
@@ -660,18 +660,18 @@ static const unsigned char indicPosition[0xe00-0x900] = {
None, None, None, None,
None, None, None, None,
- None, None, None, None,
- None, None, None, None,
- None, None, None, None,
+ None, Below, Below, Below,
+ Below, Below, Below, Below,
+ Below, Below, None, Below,
- None, None, None, None,
- Below, None, None, None,
- Below, None, None, None,
+ Below, Below, Below, Below,
+ Below, Below, Below, Below,
+ Below, None, Below, Below,
Below, Below, Below, Post,
Below, None, Below, Below,
- None, None, None, None,
- None, None, None, None,
+ None, Below, Below, Below,
+ Below, Below, None, None,
None, None, Post, Above,
Post, Below, Below, Below,
@@ -833,7 +833,7 @@ static const unsigned char indicPosition[0xe00-0x900] = {
None, None, None, None,
None, None, None, Post,
- Post, None, Below, None,
+ Pre, None, Below, None,
None, Post, None, None,
None, None, None, None,
None, None, Post, Post,
@@ -1741,6 +1741,11 @@ static int indic_nextSyllableBoundary(HB_Script script, const HB_UChar16 *s, int
if (state == Halant && uc[pos] == 0x200d /* ZWJ */)
break;
// the control character should be the last char in the item
+ if (state == Consonant && script == HB_Script_Bengali && uc[pos-1] == 0x09B0 && uc[pos] == 0x200d /* ZWJ */)
+ break;
+ if (state == Consonant && script == HB_Script_Kannada && uc[pos-1] == 0x0CB0 && uc[pos] == 0x200d /* ZWJ */)
+ break;
+ // Bengali and Kannada has a special exception for rendering yaphala with ra (to avoid reph) see http://www.unicode.org/faq/indic.html#15
++pos;
goto finish;
case Consonant:
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-open.h b/src/3rdparty/harfbuzz/src/harfbuzz-open.h
index 4ba6cf5..9ad7c98 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-open.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-open.h
@@ -30,10 +30,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/* Use this if a feature applies to all glyphs */
#define HB_ALL_GLYPHS 0xFFFF
@@ -279,10 +275,6 @@ enum HB_Type_
typedef enum HB_Type_ HB_Type;
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif /* HARFBUZZ_OPEN_H */
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.h b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.h
index ab5c07a..470e27b 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.h
@@ -34,10 +34,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
/*
using anything else than signed or unsigned for bitfields in C is non standard,
but accepted by almost all compilers. And it gives a significant reduction in
@@ -258,10 +254,6 @@ typedef struct HB_Font_ {
void *userData;
} HB_FontRec;
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
typedef struct HB_ShaperItem_ HB_ShaperItem;
struct HB_ShaperItem_ {
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-stream.h b/src/3rdparty/harfbuzz/src/harfbuzz-stream.h
index a155cc2..cfbfb1c 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-stream.h
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-stream.h
@@ -30,10 +30,6 @@
HB_BEGIN_HEADER
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(push, 1)
-#endif
-
typedef struct HB_StreamRec_
{
HB_Byte* base;
@@ -42,10 +38,6 @@ typedef struct HB_StreamRec_
HB_UInt pos;
} HB_StreamRec;
-#ifdef HB_USE_PACKED_STRUCTS
-#pragma pack(pop)
-#endif
-
HB_END_HEADER
#endif
diff --git a/src/3rdparty/harfbuzz/tests/shaping/main.cpp b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
index 28f8e07..73760a8 100644
--- a/src/3rdparty/harfbuzz/tests/shaping/main.cpp
+++ b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
@@ -642,6 +642,10 @@ void tst_QScriptEngine::bengali()
{ { 0x9f1, 0x9cd, 0x9ad, 0x0 },
{ 0x191, 0x17d, 0x168, 0x0 } },
+ // Ra ZWJ Halant Ya
+ { { 0x09b0, 0x200d, 0x09cd, 0x09af, 0x0 },
+ { 0x016b, 0x01cf, 0x0 } },
+
{ {0}, {0} }
};
@@ -749,6 +753,13 @@ void tst_QScriptEngine::bengali()
{ { 0x09b0, 0x09cd, 0x09ac, 0x09cd, 0x09ac, 0x0 },
{ 0x013b, 0x00e1, 0x0 } },
+ // Init feature for vowel sign E should only be
+ // applied when it's initial character (QTBUG-13620)
+ { { 0x09a8, 0x09c7, 0x0 },
+ { 0x0232, 0x0086, 0x0 } },
+ { { 0x09a8, 0x09a8, 0x09c7, 0x0 },
+ { 0x0086, 0x009b, 0x0086, 0x0 } },
+
{ {0}, {0} }
};
@@ -847,6 +858,19 @@ void tst_QScriptEngine::oriya()
{ 0x177, 0x0 } },
{ { 0xb28, 0xb4d, 0xb24, 0xb4d, 0xb30, 0xb4d, 0xb2f, 0x0 },
{ 0x176, 0x124, 0x0 } },
+
+ // QTBUG-13542
+ { { 0x0b2c, 0x0b4d, 0x0b21, 0x0 },
+ { 0x0089, 0x00fc, 0x0 } },
+ { { 0x0b36, 0x0b4d, 0x0b2b, 0x0 },
+ { 0x0092, 0x0105, 0x0 } },
+ { { 0x0b36, 0x0b4d, 0x0b1f, 0x0 },
+ { 0x0092, 0x00fa, 0x0 } },
+ { { 0x0b39, 0x0b4d, 0x0b1f, 0x0 },
+ { 0x0095, 0x00fa, 0x0 } },
+ { { 0x0b15, 0x0b4d, 0x0b16, 0x0 },
+ { 0x0073, 0x00f1, 0x0 } },
+
{ {0}, {0} }
};
@@ -1005,6 +1029,11 @@ void tst_QScriptEngine::kannada()
{ 0x0036, 0x00c1, 0x0 } },
{ { 0x0cb0, 0x0ccd, 0x200d, 0x0c95, 0x0 },
{ 0x0050, 0x00a7, 0x0 } },
+
+ // Kaphala
+ { { 0x0cb0, 0x200d, 0x0ccd, 0x0c95, 0x0 },
+ { 0x0050, 0x00a7, 0x0 } },
+
{ {0}, {0} }
};
diff --git a/src/3rdparty/md5/md5.cpp b/src/3rdparty/md5/md5.cpp
index f32903c..ac296b5 100644
--- a/src/3rdparty/md5/md5.cpp
+++ b/src/3rdparty/md5/md5.cpp
@@ -24,6 +24,7 @@
#ifndef _WIN32_WCE
#include <sys/types.h> /* for stupid systems */
#else
+#include <windef.h>
#include <types.h>
#endif
diff --git a/src/3rdparty/phonon/gstreamer/devicemanager.cpp b/src/3rdparty/phonon/gstreamer/devicemanager.cpp
index c3826eb..518aa85 100644
--- a/src/3rdparty/phonon/gstreamer/devicemanager.cpp
+++ b/src/3rdparty/phonon/gstreamer/devicemanager.cpp
@@ -22,7 +22,9 @@
#include "videowidget.h"
#include "glrenderer.h"
#include "widgetrenderer.h"
+#ifdef Q_WS_X11
#include "x11renderer.h"
+#endif
#include "artssink.h"
#include "pulsesupport.h"
@@ -264,7 +266,7 @@ AbstractRenderer *DeviceManager::createVideoRenderer(VideoWidget *parent)
if (m_videoSinkWidget == "software") {
return new WidgetRenderer(parent);
}
-#ifndef Q_WS_QWS
+#ifdef Q_WS_X11
else if (m_videoSinkWidget == "xwindow") {
return new X11Renderer(parent);
} else {
diff --git a/src/3rdparty/phonon/gstreamer/videowidget.cpp b/src/3rdparty/phonon/gstreamer/videowidget.cpp
index e1f0ec9..a4c6f79 100644
--- a/src/3rdparty/phonon/gstreamer/videowidget.cpp
+++ b/src/3rdparty/phonon/gstreamer/videowidget.cpp
@@ -31,7 +31,9 @@
#include "glrenderer.h"
#include "widgetrenderer.h"
+#ifdef Q_WS_X11
#include "x11renderer.h"
+#endif
#ifndef QT_NO_PHONON_VIDEO
QT_BEGIN_NAMESPACE
@@ -116,10 +118,12 @@ void VideoWidget::setupVideoBin()
GstPad *videopad = gst_element_get_pad (queue, "sink");
gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad));
gst_object_unref (videopad);
+#ifndef Q_WS_QPA
QWidget *parentWidget = qobject_cast<QWidget*>(parent());
if (parentWidget)
parentWidget->winId(); // Due to some existing issues with alien in 4.4,
// we must currently force the creation of a parent widget.
+#endif
m_isValid = true; //initialization ok, accept input
}
}
diff --git a/src/3rdparty/phonon/gstreamer/x11renderer.h b/src/3rdparty/phonon/gstreamer/x11renderer.h
index f7140da..8e2ea19 100644
--- a/src/3rdparty/phonon/gstreamer/x11renderer.h
+++ b/src/3rdparty/phonon/gstreamer/x11renderer.h
@@ -27,8 +27,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_WS_QWS
-
class QString;
namespace Phonon
@@ -61,8 +59,6 @@ private:
}
} //namespace Phonon::Gstreamer
-#endif // Q_WS_QWS
-
QT_END_NAMESPACE
#endif // Phonon_GSTREAMER_X11RENDERER_H
diff --git a/src/3rdparty/phonon/mmf/abstractvideooutput.cpp b/src/3rdparty/phonon/mmf/abstractvideooutput.cpp
index 2d221ed..068118b 100644
--- a/src/3rdparty/phonon/mmf/abstractvideooutput.cpp
+++ b/src/3rdparty/phonon/mmf/abstractvideooutput.cpp
@@ -161,24 +161,10 @@ void MMF::AbstractVideoOutput::dump() const
{
#ifndef QT_NO_DEBUG
TRACE_CONTEXT(AbstractVideoOutput::dump, EVideoInternal);
-
QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor);
visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs
ObjectDump::addDefaultAnnotators(*visitor);
-
- if (QWidget *window = QApplication::activeWindow()) {
- TRACE("Dumping from root window 0x%08x:", window);
- ObjectDump::dumpTreeFromLeaf(*window, *visitor);
- }
-
- TRACE("Dumping tree from leaf 0x%08x:", this);
ObjectDump::dumpTreeFromLeaf(*this, *visitor);
-
- QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper);
- dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs
- ObjectDump::addDefaultAnnotators(*dumper);
- TRACE_0("Dumping AbstractVideoOutput:");
- dumper->dumpObject(*this);
#endif
}
diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp
index 122094e..d59e82a 100644
--- a/src/3rdparty/phonon/mmf/videowidget.cpp
+++ b/src/3rdparty/phonon/mmf/videowidget.cpp
@@ -65,6 +65,8 @@ MMF::VideoWidget::VideoWidget(QWidget *parent)
TRACE_CONTEXT(VideoWidget::VideoWidget, EVideoApi);
TRACE_ENTRY_0();
+ parent->setProperty("_q_DummyWindowSurface", true);
+
TRACE_EXIT_0();
}
diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
index 8fd622f..d994600 100644
--- a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
+++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
@@ -141,10 +141,11 @@ namespace Phonon
/* Required to ensure template class vtables are exported on both symbian
and existing builds. */
-#if defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)
+#if (defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)) || defined(Q_CC_CLANG)
// RVCT compiler (2.2.686) requires the export declaration to be on the class to export vtables
// MWC compiler works both ways
// GCCE compiler is unknown (it can't compile QtCore yet)
+// Clang also requires the export declaration to be on the class to export vtables
#define PHONON_TEMPLATE_CLASS_EXPORT PHONON_EXPORT
#define PHONON_TEMPLATE_CLASS_MEMBER_EXPORT
#else
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 981dba2..3ccc57f 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -56,6 +56,7 @@ TEMPLATE = lib
TARGET = QtWebKit
contains(QT_CONFIG, embedded):CONFIG += embedded
+contains(QT_CONFIG, qpa):CONFIG += embedded
CONFIG(standalone_package) {
isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$PWD/generated
@@ -2180,11 +2181,11 @@ contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
mac {
SOURCES += \
- plugins/mac/PluginPackageMac.cpp \
- plugins/mac/PluginViewMac.mm
+ plugins/mac/PluginPackageMac.cpp
OBJECTIVE_SOURCES += \
platform/text/mac/StringImplMac.mm \
- platform/mac/WebCoreNSStringExtras.mm
+ platform/mac/WebCoreNSStringExtras.mm \
+ plugins/mac/PluginViewMac.mm
INCLUDEPATH += platform/mac
# Note: XP_MACOSX is defined in npapi.h
} else {
diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
index 40f7e40..0df23a2 100644
--- a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
+++ b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
@@ -225,7 +225,7 @@ namespace WebCore {
{
if (!node)
return JSC::jsNull();
- if (JSNode* wrapper = getCachedDOMNodeWrapper(exec, node->document(), node))
+ if (JSC::JSCell* wrapper = getCachedDOMNodeWrapper(exec, node->document(), node))
return wrapper;
return createDOMNodeWrapper<WrapperClass>(exec, globalObject, node);
}
diff --git a/src/activeqt/container/qaxwidget.cpp b/src/activeqt/container/qaxwidget.cpp
index d3f736b..15d586b 100644
--- a/src/activeqt/container/qaxwidget.cpp
+++ b/src/activeqt/container/qaxwidget.cpp
@@ -1008,7 +1008,7 @@ HRESULT WINAPI QAxClientSite::TranslateAccelerator(LPMSG lpMsg, DWORD /*grfModif
}
}
// ActiveQt based in-processes-servers will handle the event properly, so
- // we dont need to send this key event to the host.
+ // we don't need to send this key event to the host.
return S_OK;
}
diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp
index dfec8178..4a38544 100644
--- a/src/activeqt/shared/qaxtypes.cpp
+++ b/src/activeqt/shared/qaxtypes.cpp
@@ -547,7 +547,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type
SAFEARRAY *array = 0;
bool is2D = false;
// If the first element in the array is a list the whole list is
- // treated as a 2D array. The colum count is taken from the 1st element.
+ // treated as a 2D array. The column count is taken from the 1st element.
if (count) {
QVariantList col = list.at(0).toList();
int maxColumns = col.count();
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 641b42b..9add36e 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -166,11 +166,12 @@ Q_GLOBAL_STATIC(QThreadStorage<QUnifiedTimer *>, unifiedTimer)
#endif
QUnifiedTimer::QUnifiedTimer() :
- QObject(), lastTick(0), timingInterval(DEFAULT_TIMER_INTERVAL),
+ QObject(), defaultDriver(this), lastTick(0), timingInterval(DEFAULT_TIMER_INTERVAL),
currentAnimationIdx(0), consistentTiming(false), slowMode(false),
slowdownFactor(5.0f), isPauseTimerActive(false), runningLeafAnimations(0)
{
time.invalidate();
+ driver = &defaultDriver;
}
@@ -247,14 +248,27 @@ void QUnifiedTimer::restartAnimationTimer()
qDebug() << runningPauseAnimations;
qDebug() << closestPauseAnimationTimeToFinish();
}
+ driver->stop();
animationTimer.start(closestTimeToFinish, this);
isPauseTimerActive = true;
- } else if (!animationTimer.isActive() || isPauseTimerActive) {
- animationTimer.start(timingInterval, this);
+ } else if (!driver->isRunning() || isPauseTimerActive) {
+ driver->start();
isPauseTimerActive = false;
}
}
+void QUnifiedTimer::setTimingInterval(int interval)
+{
+ timingInterval = interval;
+
+ if (driver->isRunning() && !isPauseTimerActive) {
+ //we changed the timing interval
+ driver->stop();
+ driver->start();
+ }
+}
+
+
void QUnifiedTimer::timerEvent(QTimerEvent *event)
{
//in the case of consistent timing we make sure the orders in which events come is always the same
@@ -369,6 +383,129 @@ int QUnifiedTimer::closestPauseAnimationTimeToFinish()
return closestTimeToFinish;
}
+void QUnifiedTimer::installAnimationDriver(QAnimationDriver *d)
+{
+ if (driver->isRunning()) {
+ qWarning("QUnifiedTimer: Cannot change animation driver while animations are running");
+ return;
+ }
+
+ if (driver && driver != &defaultDriver)
+ delete driver;
+
+ driver = d;
+}
+
+/*!
+ \class QAnimationDriver
+
+ \brief The QAnimationDriver class is used to exchange the mechanism that drives animations.
+
+ The default animation system is driven by a timer that fires at regular intervals.
+ In some scenarios, it is better to drive the animation based on other synchronization
+ mechanisms, such as the vertical refresh rate of the screen.
+ */
+
+QAnimationDriver::QAnimationDriver(QObject *parent)
+ : QObject(*(new QAnimationDriverPrivate), parent)
+{
+}
+
+QAnimationDriver::QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent)
+ : QObject(dd, parent)
+{
+}
+
+
+/*!
+ Advances the animation based on the current time. This function should
+ be continuously called by the driver while the animation is running.
+ */
+void QAnimationDriver::advance()
+{
+ QUnifiedTimer *instance = QUnifiedTimer::instance();
+
+ // update current time on all top level animations
+ instance->updateAnimationsTime();
+ instance->restartAnimationTimer();
+}
+
+
+/*!
+ Installs this animation driver. The animation driver is thread local and
+ will only apply for the thread its installed in.
+ */
+void QAnimationDriver::install()
+{
+ QUnifiedTimer *timer = QUnifiedTimer::instance(true);
+ timer->installAnimationDriver(this);
+}
+
+bool QAnimationDriver::isRunning() const
+{
+ return d_func()->running;
+}
+
+
+void QAnimationDriver::start()
+{
+ Q_D(QAnimationDriver);
+ if (!d->running) {
+ started();
+ d->running = true;
+ }
+}
+
+
+void QAnimationDriver::stop()
+{
+ Q_D(QAnimationDriver);
+ if (d->running) {
+ stopped();
+ d->running = false;
+ }
+}
+
+/*!
+ \fn QAnimationDriver::started()
+
+ This function is called by the animation framework to notify the driver
+ that it should start running.
+ */
+
+/*!
+ \fn QAnimationDriver::stopped()
+
+ This function is called by the animation framework to notify the driver
+ that it should stop running.
+ */
+
+/*!
+ The default animation driver just spins the timer...
+ */
+QDefaultAnimationDriver::QDefaultAnimationDriver(QUnifiedTimer *timer)
+ : QAnimationDriver(0), m_unified_timer(timer)
+{
+}
+
+void QDefaultAnimationDriver::timerEvent(QTimerEvent *e)
+{
+ Q_ASSERT(e->timerId() == m_timer.timerId());
+ advance();
+}
+
+void QDefaultAnimationDriver::started()
+{
+ m_timer.start(m_unified_timer->timingInterval, this);
+}
+
+void QDefaultAnimationDriver::stopped()
+{
+ m_timer.stop();
+}
+
+
+
void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
{
Q_Q(QAbstractAnimation);
@@ -794,6 +931,9 @@ void QAbstractAnimation::stop()
{
Q_D(QAbstractAnimation);
+ if (d->state == Stopped)
+ return;
+
d->setState(Stopped);
}
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index d3c0d0d..6abe8c1 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -54,6 +54,7 @@ QT_MODULE(Core)
class QAnimationGroup;
class QSequentialAnimationGroup;
+class QAnimationDriver;
class QAbstractAnimationPrivate;
class Q_CORE_EXPORT QAbstractAnimation : public QObject
@@ -132,6 +133,36 @@ private:
Q_DECLARE_PRIVATE(QAbstractAnimation)
};
+class QAnimationDriverPrivate;
+class Q_CORE_EXPORT QAnimationDriver : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QAnimationDriver)
+
+public:
+ QAnimationDriver(QObject *parent);
+
+ void advance();
+ void install();
+
+ bool isRunning() const;
+
+protected:
+ virtual void started() = 0;
+ virtual void stopped() = 0;
+
+ QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = 0);
+
+private:
+ friend class QUnifiedTimer;
+
+ void start();
+ void stop();
+};
+
+
+
+
#endif //QT_NO_ANIMATION
QT_END_NAMESPACE
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index d3d4098..d56c130 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -58,6 +58,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qelapsedtimer.h>
#include <private/qobject_p.h>
+#include <qabstractanimation.h>
#ifdef Q_OS_WIN
#include <qt_windows.h>
@@ -114,30 +115,47 @@ private:
Q_DECLARE_PUBLIC(QAbstractAnimation)
};
+
+class QUnifiedTimer;
+class QDefaultAnimationDriver : public QAnimationDriver
+{
+ Q_OBJECT
+public:
+ QDefaultAnimationDriver(QUnifiedTimer *timer);
+ void timerEvent(QTimerEvent *e);
+
+ void started();
+ void stopped();
+
+private:
+ QBasicTimer m_timer;
+ QUnifiedTimer *m_unified_timer;
+};
+
+class Q_CORE_EXPORT QAnimationDriverPrivate : public QObjectPrivate
+{
+public:
+ QAnimationDriverPrivate() : running(false) {}
+ bool running;
+};
+
typedef QElapsedTimer ElapsedTimer;
-class QUnifiedTimer : public QObject
+class Q_CORE_EXPORT QUnifiedTimer : public QObject
{
private:
QUnifiedTimer();
public:
//XXX this is needed by dui
- static Q_CORE_EXPORT QUnifiedTimer *instance();
+ static QUnifiedTimer *instance();
static QUnifiedTimer *instance(bool create);
static void registerAnimation(QAbstractAnimation *animation, bool isTopLevel);
static void unregisterAnimation(QAbstractAnimation *animation);
//defines the timing interval. Default is DEFAULT_TIMER_INTERVAL
- void setTimingInterval(int interval)
- {
- timingInterval = interval;
- if (animationTimer.isActive() && !isPauseTimerActive) {
- //we changed the timing interval
- animationTimer.start(timingInterval, this);
- }
- }
+ void setTimingInterval(int interval);
/*
this allows to have a consistent timer interval at each tick from the timer
@@ -161,11 +179,20 @@ public:
*/
static void updateAnimationTimer();
+ void installAnimationDriver(QAnimationDriver *driver);
+
+ void restartAnimationTimer();
+ void updateAnimationsTime();
+
protected:
void timerEvent(QTimerEvent *);
private:
- // timer used for all active (running) animations
+ friend class QDefaultAnimationDriver;
+
+ QAnimationDriver *driver;
+ QDefaultAnimationDriver defaultDriver;
+
QBasicTimer animationTimer;
// timer used to delay the check if we should start/stop the animation timer
QBasicTimer startStopAnimationTimer;
@@ -195,9 +222,6 @@ private:
void registerRunningAnimation(QAbstractAnimation *animation);
void unregisterRunningAnimation(QAbstractAnimation *animation);
- void restartAnimationTimer();
-
- void updateAnimationsTime();
int closestPauseAnimationTimeToFinish();
};
diff --git a/src/corelib/arch/qatomic_arch.h b/src/corelib/arch/qatomic_arch.h
index 00b288b..5106d29 100644
--- a/src/corelib/arch/qatomic_arch.h
+++ b/src/corelib/arch/qatomic_arch.h
@@ -88,6 +88,8 @@ QT_BEGIN_HEADER
# include "QtCore/qatomic_sh.h"
#elif defined(QT_ARCH_SH4A)
# include "QtCore/qatomic_sh4a.h"
+#elif defined(QT_ARCH_NACL)
+# include "QtCore/qatomic_generic.h"
#else
# error "Qt has not been ported to this architecture"
#endif
diff --git a/src/corelib/arch/qatomic_arm.h b/src/corelib/arch/qatomic_arm.h
index 1c1c8a5..0513af2 100644
--- a/src/corelib/arch/qatomic_arm.h
+++ b/src/corelib/arch/qatomic_arm.h
@@ -59,7 +59,7 @@ QT_END_INCLUDE_HEADER
|| defined(__ARM_ARCH_6K__) \
|| defined(__ARM_ARCH_6ZK__) \
|| defined(__ARM_ARCH_6M__) \
- || (__TARGET_ARCH_ARM-0 >= 6)
+ || (defined(__TARGET_ARCH_ARM) && (__TARGET_ARCH_ARM-0 >= 6))
# define QT_ARCH_ARMV6
QT_BEGIN_INCLUDE_HEADER
# include "QtCore/qatomic_armv6.h"
diff --git a/src/corelib/arch/symbian/heap_hybrid.cpp b/src/corelib/arch/symbian/heap_hybrid.cpp
index 91faaed..5d2b2b6 100644
--- a/src/corelib/arch/symbian/heap_hybrid.cpp
+++ b/src/corelib/arch/symbian/heap_hybrid.cpp
@@ -134,7 +134,7 @@ The constant can be changed at ROM build time using patchdata OBY keyword.
@deprecated Patching this constant no longer has any effect.
*/
-#ifdef __X86GCC__ // For X86GCC we dont use the proper data import attribute
+#ifdef __X86GCC__ // For X86GCC we don't use the proper data import attribute
#undef IMPORT_D // since the constants are not really imported. GCC doesn't
#define IMPORT_D // allow imports from self.
#endif
@@ -451,7 +451,7 @@ TInt RHybridHeap::ConstructLock(TUint32 aMode)
void RHybridHeap::Init(TInt aBitmapSlab, TInt aPagePower)
{
- /*Moved code which does initilization */
+ /*Moved code which does initialization */
iTop = (TUint8*)this + iMinLength;
iBase = Ceiling(iBase, ECellAlignment); // Align iBase address
@@ -874,7 +874,7 @@ available in the largest free block.
Note that this function exists mainly for compatibility reasons. In a modern
heap implementation such as that present in Symbian it is not appropriate to
concern oneself with details such as the amount of free memory available on a
-heap and its largeset free block, because the way that a modern heap implmentation
+heap and its largeset free block, because the way that a modern heap implementation
works is not simple. The amount of available virtual memory != physical memory
and there are multiple allocation strategies used internally, which makes all
memory usage figures "fuzzy" at best.
@@ -1616,7 +1616,7 @@ void* RHybridHeap::DlMalloc(size_t bytes)
void RHybridHeap::DlFree(void* mem)
{
/*
- Consolidate freed chunks with preceeding or succeeding bordering
+ Consolidate freed chunks with preceding or succeeding bordering
free chunks, if they exist, and then place in a bin. Intermixed
with special cases for iTop, iDv, mmapped chunks, and usage errors.
*/
diff --git a/src/corelib/arch/symbian/qatomic_generic_armv6.cpp b/src/corelib/arch/symbian/qatomic_generic_armv6.cpp
index 39d966a..444d3d3 100644
--- a/src/corelib/arch/symbian/qatomic_generic_armv6.cpp
+++ b/src/corelib/arch/symbian/qatomic_generic_armv6.cpp
@@ -38,7 +38,7 @@
** $QT_END_LICENSE$
**
** This file implements the generic atomics interface using ARMv6 assembly
-** instructions. It is more efficent than the inline versions when Qt is
+** instructions. It is more efficient than the inline versions when Qt is
** built for the THUMB instruction set, as the required instructions are
** only available in ARM state.
****************************************************************************/
diff --git a/src/corelib/codecs/codecs.qdoc b/src/corelib/codecs/codecs.qdoc
index b88f016..3171f58 100644
--- a/src/corelib/codecs/codecs.qdoc
+++ b/src/corelib/codecs/codecs.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp
index f747bf7..031baa3 100644
--- a/src/corelib/codecs/qutfcodec.cpp
+++ b/src/corelib/codecs/qutfcodec.cpp
@@ -195,7 +195,7 @@ QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::Converte
// utf-8 bom composes into 0xfeff code point
bool nonCharacter;
if (!headerdone && uc == 0xfeff) {
- // dont do anything, just skip the BOM
+ // don't do anything, just skip the BOM
} else if (!(nonCharacter = isUnicodeNonCharacter(uc)) && uc > 0xffff && uc < 0x110000) {
// surrogate pair
Q_ASSERT((qch - (ushort*)result.unicode()) + 2 < result.length());
diff --git a/src/corelib/concurrent/qtconcurrentrunbase.h b/src/corelib/concurrent/qtconcurrentrunbase.h
index a6bbe3e..888d395 100644
--- a/src/corelib/concurrent/qtconcurrentrunbase.h
+++ b/src/corelib/concurrent/qtconcurrentrunbase.h
@@ -100,7 +100,18 @@ public:
this->reportFinished();
return;
}
- this->runFunctor();
+#ifndef QT_NO_EXCEPTIONS
+ try {
+#endif
+ this->runFunctor();
+#ifndef QT_NO_EXCEPTIONS
+ } catch (QtConcurrent::Exception &e) {
+ QFutureInterface<T>::reportException(e);
+ } catch (...) {
+ QFutureInterface<T>::reportException(QtConcurrent::UnhandledException());
+ }
+#endif
+
this->reportResult(result);
this->reportFinished();
}
@@ -117,7 +128,17 @@ public:
this->reportFinished();
return;
}
- this->runFunctor();
+#ifndef QT_NO_EXCEPTIONS
+ try {
+#endif
+ this->runFunctor();
+#ifndef QT_NO_EXCEPTIONS
+ } catch (QtConcurrent::Exception &e) {
+ QFutureInterface<void>::reportException(e);
+ } catch (...) {
+ QFutureInterface<void>::reportException(QtConcurrent::UnhandledException());
+ }
+#endif
this->reportFinished();
}
};
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index b7d6034..e946d5d 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -19,7 +19,14 @@ include(codecs/codecs.pri)
include(statemachine/statemachine.pri)
include(xml/xml.pri)
-mac|darwin:LIBS_PRIVATE += -framework ApplicationServices
+!qpa:mac|darwin:LIBS_PRIVATE += -framework ApplicationServices
+qpa:mac|darwin {
+ contains(QT_CONFIG, coreservices) {
+ LIBS_PRIVATE += -framework CoreServices
+ } else {
+ LIBS_PRIVATE += -framework CoreFoundation
+ }
+}
mac:lib_bundle:DEFINES += QT_NO_DEBUG_PLUGIN_CHECK
win32:DEFINES-=QT_NO_CAST_TO_ASCII
@@ -37,10 +44,3 @@ symbian: {
MMP_RULES -= PAGED
MMP_RULES *= UNPAGED
}
-
-neon {
- DEFINES += QT_HAVE_NEON
- QMAKE_CXXFLAGS *= -mfpu=neon
-}
-
-
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 4800716..47b82ef 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -13,13 +13,17 @@ SOURCES += \
global/qmalloc.cpp \
global/qnumeric.cpp
+nacl {
+ SOURCES += global/qnaclunimplemented.cpp
+}
+
# qlibraryinfo.cpp includes qconfig.cpp
INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global
# Only used on platforms with CONFIG += precompile_header
PRECOMPILED_HEADER = global/qt_pch.h
-linux*:!static:!linux-armcc:!linux-gcce {
+linux*:!static:!symbian-armcc:!symbian-gcce {
QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate
prog=$$quote(if (/program interpreter: (.*)]/) { print $1; })
DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\"
diff --git a/src/corelib/global/qconfig-minimal-system-dependencies.h b/src/corelib/global/qconfig-minimal-system-dependencies.h
new file mode 100644
index 0000000..63319b9
--- /dev/null
+++ b/src/corelib/global/qconfig-minimal-system-dependencies.h
@@ -0,0 +1,371 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#define QT_FONTS_ARE_RESOURCES
+
+/* Data structures */
+#ifndef QT_NO_QUUID_STRING
+# define QT_NO_QUUID_STRING
+#endif
+#ifndef QT_NO_STL
+# define QT_NO_STL
+#endif
+#ifndef QT_NO_TEXTDATE
+# define QT_NO_TEXTDATE
+#endif
+#ifndef QT_NO_DATESTRING
+# define QT_NO_DATESTRING
+#endif
+
+/* Dialogs */
+#ifndef QT_NO_FILEDIALOG
+# define QT_NO_FILEDIALOG
+#endif
+#ifndef QT_NO_PRINTDIALOG
+# define QT_NO_PRINTDIALOG
+#endif
+#ifndef QT_NO_PRINTPREVIEWDIALOG
+# define QT_NO_PRINTPREVIEWDIALOG
+#endif
+
+
+/* File I/O */
+#ifndef QT_NO_DOM
+# define QT_NO_DOM
+#endif
+#ifndef QT_NO_FILESYSTEMWATCHER
+# define QT_NO_FILESYSTEMWATCHER
+#endif
+#ifndef QT_NO_FSFILEENGINE
+# define QT_NO_FSFILEENGINE
+#endif
+#ifndef QT_NO_FILESYSTEMMODEL
+# define QT_NO_FILESYSTEMMODEL
+#endif
+#ifndef QT_NO_FILESYSTEMMODEL
+# define QT_NO_FILESYSTEMMODEL
+#endif
+#ifndef QT_NO_PROCESS
+# define QT_NO_PROCESS
+#endif
+#ifndef QT_NO_TEMPORARYFILE
+# define QT_NO_TEMPORARYFILE
+#endif
+#ifndef QT_NO_SETTINGS
+# define QT_NO_SETTINGS
+#endif
+#ifndef QT_NO_LIBRARY
+# define QT_NO_LIBRARY
+#endif
+
+/* Fonts */
+#ifndef QT_NO_QWS_QPF2
+# define QT_NO_QWS_QPF2
+#endif
+
+/* Images */
+#ifndef QT_NO_IMAGEFORMATPLUGIN
+# define QT_NO_IMAGEFORMATPLUGIN
+#endif
+#ifndef QT_NO_IMAGE_HEURISTIC_MASK
+# define QT_NO_IMAGE_HEURISTIC_MASK
+#endif
+#ifndef QT_NO_IMAGE_TEXT
+# define QT_NO_IMAGE_TEXT
+#endif
+#ifndef QT_NO_MOVIE
+# define QT_NO_MOVIE
+#endif
+
+/* Internationalization */
+#ifndef QT_NO_BIG_CODECS
+# define QT_NO_BIG_CODECS
+#endif
+#ifndef QT_NO_QWS_INPUTMETHODS
+# define QT_NO_QWS_INPUTMETHODS
+#endif
+#ifndef QT_NO_TEXTCODEC
+# define QT_NO_TEXTCODEC
+#endif
+#ifndef QT_NO_CODECS
+# define QT_NO_CODECS
+#endif
+#ifndef QT_NO_TEXTCODECPLUGIN
+# define QT_NO_TEXTCODECPLUGIN
+#endif
+#ifndef QT_NO_TRANSLATION
+# define QT_NO_TRANSLATION
+#endif
+#ifndef QT_NO_TRANSLATION_UTF8
+# define QT_NO_TRANSLATION_UTF8
+#endif
+
+/* ItemViews */
+
+#ifndef QT_NO_DIRMODEL
+# define QT_NO_DIRMODEL
+#endif
+
+/* Kernel */
+#ifndef QT_NO_CLIPBOARD
+# define QT_NO_CLIPBOARD
+#endif
+#ifndef QT_NO_CSSPARSER
+# define QT_NO_CSSPARSER
+#endif
+#ifndef QT_NO_CURSOR
+# define QT_NO_CURSOR
+#endif
+#ifndef QT_NO_DRAGANDDROP
+# define QT_NO_DRAGANDDROP
+#endif
+#ifndef QT_NO_EFFECTS
+# define QT_NO_EFFECTS
+#endif
+#ifndef QT_NO_SESSIONMANAGER
+# define QT_NO_SESSIONMANAGER
+#endif
+#ifndef QT_NO_SHAREDMEMORY
+# define QT_NO_SHAREDMEMORY
+#endif
+#ifndef QT_NO_SOUND
+# define QT_NO_SOUND
+#endif
+#ifndef QT_NO_SYSTEMLOCALE
+# define QT_NO_SYSTEMSEMAPHORE
+#endif
+#ifndef QT_NO_SYSTEMSEMAPHORE
+# define QT_NO_SYSTEMSEMAPHORE
+#endif
+#ifndef QT_NO_TABLETEVENT
+# define QT_NO_TABLETEVENT
+#endif
+#ifndef QT_NO_CRASHHANDLER
+# define QT_NO_CRASHHANDLER
+#endif
+#ifndef QT_NO_CONCURRENT
+# define QT_NO_CONCURRENT
+#endif
+#ifndef QT_NO_XMLSTREAM
+# define QT_NO_XMLSTREAM
+#endif
+#ifndef QT_NO_XMLSTREAMREADER
+# define QT_NO_XMLSTREAMREADER
+#endif
+#ifndef QT_NO_XMLSTREAMWRITER
+# define QT_NO_XMLSTREAMWRITER
+#endif
+
+/* Networking */
+#ifndef QT_NO_COP
+# define QT_NO_COP
+#endif
+#ifndef QT_NO_HOSTINFO
+# define QT_NO_HOSTINFO
+#endif
+#ifndef QT_NO_HTTP
+# define QT_NO_HTTP
+#endif
+#ifndef QT_NO_NETWORKPROXY
+# define QT_NO_NETWORKPROXY
+#endif
+#ifndef QT_NO_SOCKS5
+# define QT_NO_SOCKS5
+#endif
+#ifndef QT_NO_UDPSOCKET
+# define QT_NO_UDPSOCKET
+#endif
+#ifndef QT_NO_URLINFO
+# define QT_NO_URLINFO
+#endif
+#ifndef QT_NO_FTP
+# define QT_NO_FTP
+#endif
+
+/* Painting */
+#ifndef QT_NO_COLORNAMES
+# define QT_NO_COLORNAMES
+#endif
+#ifndef QT_NO_DIRECTPAINTER
+# define QT_NO_DIRECTPAINTER
+#endif
+#ifndef QT_NO_PAINTONSCREEN
+# define QT_NO_PAINTONSCREEN
+#endif
+#ifndef QT_NO_PAINT_DEBUG
+# define QT_NO_PAINT_DEBUG
+#endif
+#ifndef QT_NO_PICTURE
+# define QT_NO_PICTURE
+#endif
+#ifndef QT_NO_PRINTER
+# define QT_NO_PRINTER
+#endif
+#ifndef QT_NO_CUPS
+# define QT_NO_CUPS
+#endif
+
+/* Qt for Embedded Linux */
+#ifndef QT_NO_QWSEMBEDWIDGET
+# define QT_NO_QWSEMBEDWIDGET
+#endif
+#ifndef QT_NO_QWS_ALPHA_CURSOR
+# define QT_NO_QWS_ALPHA_CURSOR
+#endif
+#ifndef QT_NO_QWS_CURSOR
+# define QT_NO_QWS_CURSOR
+#endif
+#ifndef QT_NO_QWS_DECORATION_DEFAULT
+# define QT_NO_QWS_DECORATION_DEFAULT
+#endif
+#ifndef QT_NO_QWS_DECORATION_STYLED
+# define QT_NO_QWS_DECORATION_STYLED
+#endif
+#ifndef QT_NO_QWS_DECORATION_WINDOWS
+# define QT_NO_QWS_DECORATION_WINDOWS
+#endif
+#ifndef QT_NO_QWS_MANAGER
+# define QT_NO_QWS_MANAGER
+#endif
+#ifndef QT_NO_QWS_KEYBOARD
+# define QT_NO_QWS_KEYBOARD
+#endif
+#ifndef QT_NO_QWS_MOUSE
+# define QT_NO_QWS_MOUSE
+#endif
+#ifndef QT_NO_QWS_MOUSE_AUTO
+# define QT_NO_QWS_MOUSE_AUTO
+#endif
+#ifndef QT_NO_QWS_MOUSE_MANUAL
+# define QT_NO_QWS_MOUSE_MANUAL
+#endif
+#ifndef QT_NO_QWS_MULTIPROCESS
+# define QT_NO_QWS_MULTIPROCESS
+#endif
+#ifndef QT_NO_QWS_SOUNDSERVER
+# define QT_NO_QWS_SOUNDSERVER
+#endif
+#ifndef QT_NO_SXE
+# define QT_NO_SXE
+#endif
+#ifndef QT_NO_QWS_PROPERTIES
+# define QT_NO_QWS_PROPERTIES
+#endif
+#ifndef QT_NO_QWS_PROXYSCREEN
+# define QT_NO_QWS_PROXYSCREEN
+#endif
+#ifndef QT_NO_QWS_DYNAMICSCREENTRANSFORMATION
+# define QT_NO_QWS_DYNAMICSCREENTRANSFORMATION
+#endif
+#ifndef QT_NO_QWS_LINUXFB
+# define QT_NO_QWS_LINUXFB
+#endif
+#ifndef QT_NO_QWS_MOUSE_PC
+# define QT_NO_QWS_MOUSE_PC
+#endif
+#ifndef QT_NO_QWS_MOUSE_LINUXTP
+# define QT_NO_QWS_MOUSE_LINUXTP
+#endif
+#ifndef QT_NO_QWS_QPF
+# define QT_NO_QWS_QPF
+#endif
+
+/* SVG */
+#ifndef QT_NO_SVG
+# define QT_NO_SVG
+#endif
+#ifndef QT_NO_GRAPHICSSVGITEM
+# define QT_NO_GRAPHICSSVGITEM
+#endif
+#ifndef QT_NO_SVGGENERATOR
+# define QT_NO_SVGGENERATOR
+#endif
+#ifndef QT_NO_SVGRENDERER
+# define QT_NO_SVGRENDERER
+#endif
+#ifndef QT_NO_SVGWIDGET
+# define QT_NO_SVGWIDGET
+#endif
+
+/* Styles */
+#ifndef QT_NO_STYLE_MOTIF
+# define QT_NO_STYLE_MOTIF
+#endif
+#ifndef QT_NO_STYLE_CDE
+# define QT_NO_STYLE_CDE
+#endif
+#ifndef QT_NO_STYLE_STYLESHEET
+# define QT_NO_STYLE_STYLESHEET
+#endif
+#ifndef QT_NO_STYLE_WINDOWSCE
+# define QT_NO_STYLE_WINDOWSCE
+#endif
+#ifndef QT_NO_STYLE_WINDOWSMOBILE
+# define QT_NO_STYLE_WINDOWSMOBILE
+#endif
+#ifndef QT_NO_STYLE_WINDOWSVISTA
+# define QT_NO_STYLE_WINDOWSVISTA
+#endif
+#ifndef QT_NO_STYLE_WINDOWSXP
+# define QT_NO_STYLE_WINDOWSXP
+#endif
+
+/* Utilities */
+#ifndef QT_NO_ACCESSIBILITY
+# define QT_NO_ACCESSIBILITY
+#endif
+#ifndef QT_NO_COMPLETER
+# define QT_NO_COMPLETER
+#endif
+#ifndef QT_NO_DESKTOPSERVICES
+# define QT_NO_DESKTOPSERVICES
+#endif
+#ifndef QT_NO_SCRIPT
+# define QT_NO_SCRIPT
+#endif
+#ifndef QT_NO_SYSTEMTRAYICON
+# define QT_NO_SYSTEMTRAYICON
+#endif
+
+/* Windows */
+#ifndef QT_NO_WIN_ACTIVEQT
+# define QT_NO_WIN_ACTIVEQT
+#endif
diff --git a/src/corelib/global/qendian.qdoc b/src/corelib/global/qendian.qdoc
index 795ff81..ecdaf9f 100644
--- a/src/corelib/global/qendian.qdoc
+++ b/src/corelib/global/qendian.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h
index b606843..9710079 100644
--- a/src/corelib/global/qfeatures.h
+++ b/src/corelib/global/qfeatures.h
@@ -523,11 +523,6 @@
#define QT_NO_FTP
#endif
-// Hyper Text Transfer Protocol
-#if !defined(QT_NO_HTTP) && (defined(QT_NO_HOSTINFO))
-#define QT_NO_HTTP
-#endif
-
// QInputContext
#if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY))
#define QT_NO_IM
@@ -583,6 +578,11 @@
#define QT_NO_GRAPHICSVIEW
#endif
+// Hyper Text Transfer Protocol
+#if !defined(QT_NO_HTTP) && (defined(QT_NO_HOSTINFO) || defined(QT_NO_NETWORKPROXY))
+#define QT_NO_HTTP
+#endif
+
// QMdiArea
#if !defined(QT_NO_MDIAREA) && (defined(QT_NO_SCROLLAREA))
#define QT_NO_MDIAREA
diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt
index 4d938a9..f07fbd5 100644
--- a/src/corelib/global/qfeatures.txt
+++ b/src/corelib/global/qfeatures.txt
@@ -1050,7 +1050,7 @@ SeeAlso: ???
Feature: HTTP
Description: Supports HTTP file access.
Section: Networking
-Requires: HOSTINFO
+Requires: HOSTINFO NETWORKPROXY
Name: Hyper Text Transfer Protocol
SeeAlso: ???
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index e973688..9b597f6 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -74,7 +74,7 @@
# include <envLib.h>
#endif
-#if defined(Q_CC_MWERKS) && defined(Q_OS_MACX)
+#if defined(Q_OS_MACX) && !defined(QT_NO_CORESERVICES)
#include <CoreServices/CoreServices.h>
#endif
@@ -1232,7 +1232,7 @@ bool qSharedBuild()
Defined on Mac OS X.
- \sa Q_WS_WIN, Q_WS_X11, Q_WS_QWS, Q_WS_S60
+ \sa Q_WS_WIN, Q_WS_X11, Q_WS_QWS, Q_WS_QPA, Q_WS_S60
*/
/*!
@@ -1241,7 +1241,7 @@ bool qSharedBuild()
Defined on Windows.
- \sa Q_WS_MAC, Q_WS_X11, Q_WS_QWS, Q_WS_S60
+ \sa Q_WS_MAC, Q_WS_X11, Q_WS_QWS, Q_WS_QPA, Q_WS_S60
*/
/*!
@@ -1250,7 +1250,7 @@ bool qSharedBuild()
Defined on X11.
- \sa Q_WS_MAC, Q_WS_WIN, Q_WS_QWS, Q_WS_S60
+ \sa Q_WS_MAC, Q_WS_WIN, Q_WS_QWS, Q_WS_QPA, Q_WS_S60
*/
/*!
@@ -1259,7 +1259,16 @@ bool qSharedBuild()
Defined on Qt for Embedded Linux.
- \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_S60
+ \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_QPA, Q_WS_S60
+*/
+
+/*!
+ \macro Q_WS_QPA
+ \relates <QtGlobal>
+
+ Defined on Qt for Embedded Linux, Lite version.
+
+ \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_QWS, Q_WS_S60
*/
/*!
@@ -1634,7 +1643,7 @@ static const unsigned int qt_one = 1;
const int QSysInfo::ByteOrder = ((*((unsigned char *) &qt_one) == 0) ? BigEndian : LittleEndian);
#endif
-#if !defined(QWS) && defined(Q_OS_MAC)
+#if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC)
QT_BEGIN_INCLUDE_NAMESPACE
#include "private/qcore_mac_p.h"
@@ -1688,15 +1697,18 @@ Q_CORE_EXPORT void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding e
Q_CORE_EXPORT QString qt_mac_from_pascal_string(const Str255 pstr) {
return QCFString(CFStringCreateWithPascalString(0, pstr, CFStringGetSystemEncoding()));
}
+#endif //!defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC)
-
+#if !defined(QWS) && defined(Q_OS_MAC)
static QSysInfo::MacVersion macVersion()
{
+#ifndef QT_NO_CORESERVICES
SInt32 gestalt_version;
if (Gestalt(gestaltSystemVersion, &gestalt_version) == noErr) {
return QSysInfo::MacVersion(((gestalt_version & 0x00F0) >> 4) + 2);
}
+#endif
return QSysInfo::MV_Unknown;
}
const QSysInfo::MacVersion QSysInfo::MacintoshVersion = macVersion();
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 1b2a6a8..b75a3d8 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -64,6 +64,10 @@
#ifdef __cplusplus
+#ifndef QT_NO_STL
+#include <algorithm>
+#endif
+
#ifndef QT_NAMESPACE /* user namespace */
# define QT_PREPEND_NAMESPACE(name) ::name
@@ -216,6 +220,8 @@ namespace QT_NAMESPACE {}
# define Q_OS_ULTRIX
#elif defined(sinix)
# define Q_OS_RELIANT
+#elif defined(__native_client__)
+# define Q_OS_NACL
#elif defined(__linux__) || defined(__linux)
# define Q_OS_LINUX
#elif defined(__FreeBSD__) || defined(__DragonFly__)
@@ -284,7 +290,7 @@ namespace QT_NAMESPACE {}
# endif
#endif
-#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE)
+#if defined(Q_WS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) && !defined(QT_BOOTSTRAPPED)
#error "You are building a 64-bit application, but using a 32-bit version of Qt. Check your build configuration."
#endif
@@ -356,6 +362,7 @@ namespace QT_NAMESPACE {}
GCCE - GCCE (Symbian GCCE builds)
RVCT - ARM Realview Compiler Suite
NOKIAX86 - Nokia x86 (Symbian WINSCW builds)
+ CLANG - C++ front-end for the LLVM compiler
Should be sorted most to least authoritative.
@@ -452,6 +459,10 @@ namespace QT_NAMESPACE {}
# define Q_CC_INTEL
# define Q_NO_TEMPLATE_FRIENDS
# endif
+# if defined(__clang__)
+/* Clang also masquerades as GCC 4.2.1 */
+# define Q_CC_CLANG
+# endif
# ifdef __APPLE__
# define Q_NO_DEPRECATED_CONSTRUCTORS
# endif
@@ -817,7 +828,7 @@ namespace QT_NAMESPACE {}
# define Q_WS_PM
# error "Qt does not work with OS/2 Presentation Manager or Workplace Shell"
#elif defined(Q_OS_UNIX)
-# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS)
+# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
# define Q_WS_MAC
# define Q_WS_MACX
# if defined(Q_OS_MAC64)
@@ -829,7 +840,7 @@ namespace QT_NAMESPACE {}
# if !defined(QT_NO_S60)
# define Q_WS_S60
# endif
-# elif !defined(Q_WS_QWS)
+# elif !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
# define Q_WS_X11
# endif
#endif
@@ -1091,7 +1102,7 @@ redefine to built-in booleans to make autotests work properly */
typedef int QNoImplicitBoolCast;
-#if defined(QT_ARCH_ARM) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A)
+#if defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A)
#define QT_NO_FPU
#endif
@@ -2057,9 +2068,14 @@ Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS)
template <typename T>
inline void qSwap(T &value1, T &value2)
{
+#ifdef QT_NO_STL
const T t = value1;
value1 = value2;
value2 = t;
+#else
+ using std::swap;
+ swap(value1, value2);
+#endif
}
/*
@@ -2071,12 +2087,23 @@ inline void qSwap(T &value1, T &value2)
types must declare a 'bool isDetached(void) const;' member for this
to work.
*/
+#ifdef QT_NO_STL
+#define Q_DECLARE_SHARED_STL(TYPE)
+#else
+#define Q_DECLARE_SHARED_STL(TYPE) \
+QT_END_NAMESPACE \
+namespace std { \
+ template<> inline void swap<QT_PREPEND_NAMESPACE(TYPE)>(QT_PREPEND_NAMESPACE(TYPE) &value1, QT_PREPEND_NAMESPACE(TYPE) &value2) \
+ { swap(value1.data_ptr(), value2.data_ptr()); } \
+} \
+QT_BEGIN_NAMESPACE
+#endif
+
#define Q_DECLARE_SHARED(TYPE) \
template <> inline bool qIsDetached<TYPE>(TYPE &t) { return t.isDetached(); } \
template <> inline void qSwap<TYPE>(TYPE &value1, TYPE &value2) \
-{ \
- qSwap(value1.data_ptr(), value2.data_ptr()); \
-}
+{ qSwap(value1.data_ptr(), value2.data_ptr()); } \
+Q_DECLARE_SHARED_STL(TYPE)
/*
QTypeInfo primitive specializations
@@ -2644,6 +2671,10 @@ QT_LICENSED_MODULE(DBus)
# define QT_NO_PROCESS
#endif
+#ifdef Q_OS_NACL
+#include <QtCore/qnaclunimplemented.h>
+#endif
+
#if defined (__ELF__)
# if defined (Q_OS_LINUX) || defined (Q_OS_SOLARIS) || defined (Q_OS_FREEBSD) || defined (Q_OS_OPENBSD) || defined (Q_OS_IRIX)
# define Q_OF_ELF
diff --git a/src/corelib/global/qmalloc.cpp b/src/corelib/global/qmalloc.cpp
index 090998c..028a0a5 100644
--- a/src/corelib/global/qmalloc.cpp
+++ b/src/corelib/global/qmalloc.cpp
@@ -90,8 +90,6 @@ void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t align
return newptr + 1;
}
- union { void *ptr; void **pptr; quintptr n; } real, faked;
-
// qMalloc returns pointers aligned at least at sizeof(size_t) boundaries
// but usually more (8- or 16-byte boundaries).
// So we overallocate by alignment-sizeof(size_t) bytes, so we're guaranteed to find a
@@ -100,19 +98,21 @@ void *qReallocAligned(void *oldptr, size_t newsize, size_t oldsize, size_t align
// However, we need to store the actual pointer, so we need to allocate actually size +
// alignment anyway.
- real.ptr = qRealloc(actualptr, newsize + alignment);
- if (!real.ptr)
+ void *real = qRealloc(actualptr, newsize + alignment);
+ if (!real)
return 0;
- faked.n = real.n + alignment;
- faked.n &= ~(alignment - 1);
+ quintptr faked = reinterpret_cast<quintptr>(real) + alignment;
+ faked &= ~(alignment - 1);
+
+ void **faked_ptr = reinterpret_cast<void **>(faked);
// now save the value of the real pointer at faked-sizeof(void*)
// by construction, alignment > sizeof(void*) and is a power of 2, so
// faked-sizeof(void*) is properly aligned for a pointer
- faked.pptr[-1] = real.ptr;
+ faked_ptr[-1] = real;
- return faked.ptr;
+ return faked_ptr;
}
void qFreeAligned(void *ptr)
diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp
new file mode 100644
index 0000000..1a89b8df
--- /dev/null
+++ b/src/corelib/global/qnaclunimplemented.cpp
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qnaclunimplemented.h"
+#include <pthread.h>
+#include <qglobal.h>
+
+/*
+ The purpose of this file is to stub out certain functions
+ that are not provided by the Native Client SDK. This is
+ done as an alterative to sprinkling the Qt sources with
+ NACL ifdefs.
+
+ There are two main classes of functions:
+
+ - Functions that are called but can have no effect:
+ For these we simply give an empty implementation
+
+ - Functions that are referenced in the source code, but
+ is not/must not be called at run-time:
+ These we either leave undefined or implement with a
+ qFatal.
+
+ This is a work in progress.
+*/
+
+extern "C" {
+
+void pthread_cleanup_push(void (*)(void *), void *)
+{
+
+}
+
+void pthread_cleanup_pop(int)
+{
+
+}
+
+int pthread_setcancelstate(int, int *)
+{
+ return 0;
+}
+
+int pthread_setcanceltype(int, int *)
+{
+ return 0;
+}
+
+void pthread_testcancel(void)
+{
+
+}
+
+
+int pthread_cancel(pthread_t)
+{
+ return 0;
+}
+
+int pthread_attr_setinheritsched(pthread_attr_t *,int)
+{
+ return 0;
+}
+
+
+int pthread_attr_getinheritsched(const pthread_attr_t *, int *)
+{
+ return 0;
+}
+
+// event dispatcher, select
+//struct fd_set;
+//struct timeval;
+
+int fcntl(int, int, ...)
+{
+ return 0;
+}
+
+int sigaction(int, const struct sigaction *, struct sigaction *)
+{
+ return 0;
+}
+
+int open(const char *, int, ...)
+{
+ return 0;
+}
+
+int open64(const char *, int, ...)
+{
+ return 0;
+}
+
+int access(const char *, int)
+{
+ return 0;
+}
+
+typedef long off64_t;
+off64_t ftello64(void *)
+{
+ qFatal("ftello64 called");
+ return 0;
+}
+
+off64_t lseek64(int, off_t, int)
+{
+ qFatal("lseek64 called");
+ return 0;
+}
+
+} // Extern C
+
+int select(int, fd_set *, fd_set *, fd_set *, struct timeval *)
+{
+ return 0;
+}
diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h
new file mode 100644
index 0000000..2d3d426
--- /dev/null
+++ b/src/corelib/global/qnaclunimplemented.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QNACLUNIMPLEMENTED_H
+#define QNACLUNIMPLEMENTED_H
+
+#ifdef Q_OS_NACL
+
+// pthread
+#include <pthread.h>
+#define PTHREAD_CANCEL_DISABLE 1
+#define PTHREAD_CANCEL_ENABLE 2
+#define PTHREAD_INHERIT_SCHED 3
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Core)
+
+extern "C" {
+
+void pthread_cleanup_push(void (*handler)(void *), void *arg);
+void pthread_cleanup_pop(int execute);
+
+int pthread_setcancelstate(int state, int *oldstate);
+int pthread_setcanceltype(int type, int *oldtype);
+void pthread_testcancel(void);
+int pthread_cancel(pthread_t thread);
+
+int pthread_attr_setinheritsched(pthread_attr_t *attr,
+ int inheritsched);
+int pthread_attr_getinheritsched(const pthread_attr_t *attr,
+ int *inheritsched);
+
+// event dispatcher, select
+//struct fd_set;
+//struct timeval;
+int fcntl(int fildes, int cmd, ...);
+int sigaction(int sig, const struct sigaction * act, struct sigaction * oact);
+
+typedef long off64_t;
+off64_t ftello64(void *stream);
+off64_t lseek64(int fildes, off_t offset, int whence);
+int open64(const char *path, int oflag, ...);
+
+}
+
+int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, struct timeval * timeout);
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif //Q_OS_NACL
+
+#endif //QNACLUNIMPLEMENTED_H
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index a531009..3ed6291 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -1659,7 +1659,7 @@ public:
typedef void *HANDLE;
#elif defined(Q_WS_X11)
typedef unsigned long HANDLE;
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
typedef void * HANDLE;
#elif defined(Q_OS_SYMBIAN)
typedef unsigned long int HANDLE; // equivalent to TUint32
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 2bc33d3..f097f2a 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -466,15 +466,18 @@
\value TextWordWrap Breaks lines at appropriate points, e.g. at word
boundaries.
\value TextWrapAnywhere Breaks lines anywhere, even within words.
- \value TextHideMnemonic Same as Qt::TextShowMnemonic but doesn't draw the underlines.
- \value TextDontPrint Treat this text as "hidden" and don't print
- it.
- \value IncludeTrailingSpaces When this option is set, QTextLine::naturalTextWidth() and naturalTextRect() will
- return a value that includes the width of trailing spaces in the text; otherwise
- this width is excluded.
+ \value TextHideMnemonic Same as Qt::TextShowMnemonic but doesn't draw
+ the underlines.
+ \value TextDontPrint Treat this text as "hidden" and don't print it.
+ \value IncludeTrailingSpaces When this option is set,
+ QTextLine::naturalTextWidth() and naturalTextRect() will
+ return a value that includes the width of trailing spaces in the
+ text; otherwise this width is excluded.
\value TextIncludeTrailingSpaces Same as IncludeTrailingSpaces
\value TextJustificationForced Ensures that text lines are justified.
+ \omitvalue TextLongestVariant Ensures that the longest variant is always used
+ when computing the size of a multi-variant string. (Internal)
\omitvalue TextBypassShaping
\omitvalue BreakAnywhere
\omitvalue DontClip
@@ -487,7 +490,6 @@
\omitvalue WordBreak
\omitvalue TextForceLeftToRight
\omitvalue TextForceRightToLeft
- \omitvalue TextLongestVariant Always use the longest variant when computing the size of a multi-variant string.
You can use as many modifier flags as you want, except that
Qt::TextSingleLine and Qt::TextWordWrap cannot be combined.
@@ -514,9 +516,11 @@
delivery at a later time.
\value AutoConnection
- (default) Same as DirectConnection, if the emitter and
- receiver are in the same thread. Same as QueuedConnection,
- if the emitter and receiver are in different threads.
+ (default) If the signal is emitted from a different thread than the
+ receiving object, the signal is queued, behaving as
+ Qt::QueuedConnection. Otherwise, the slot is invoked directly,
+ behaving as Qt::DirectConnection. The type of connection is
+ determined when the signal is emitted.
\value DirectConnection
The slot is invoked immediately, when the signal is
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index f81ffaf..4d4ae21 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -83,7 +83,7 @@ win32 {
SOURCES += io/qprocess_unix.cpp
SOURCES += io/qfilesystemiterator_unix.cpp
}
- macx-*: {
+ !nacl:macx-*: {
HEADERS += io/qfilesystemwatcher_fsevents_p.h
SOURCES += io/qfilesystemengine_mac.cpp
SOURCES += io/qsettings_mac.cpp io/qfilesystemwatcher_fsevents.cpp
@@ -99,9 +99,11 @@ win32 {
io/qfilesystemwatcher_dnotify_p.h
}
- freebsd-*|macx-*|darwin-*|openbsd-*:{
- SOURCES += io/qfilesystemwatcher_kqueue.cpp
- HEADERS += io/qfilesystemwatcher_kqueue_p.h
+ !nacl {
+ freebsd-*|macx-*|darwin-*|openbsd-*:{
+ SOURCES += io/qfilesystemwatcher_kqueue.cpp
+ HEADERS += io/qfilesystemwatcher_kqueue_p.h
+ }
}
symbian {
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.cpp b/src/corelib/io/qfilesystemwatcher_fsevents.cpp
index d3276bd..0f96792 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents.cpp
+++ b/src/corelib/io/qfilesystemwatcher_fsevents.cpp
@@ -45,6 +45,8 @@
#include "qfilesystemwatcher.h"
#include "qfilesystemwatcher_fsevents_p.h"
+#ifndef QT_NO_FILESYSTEMWATCHER
+
#include <qdebug.h>
#include <qfile.h>
#include <qdatetime.h>
@@ -487,3 +489,4 @@ void QFSEventsFileSystemWatcherEngine::run()
}
QT_END_NAMESPACE
+#endif //QT_NO_FILESYSTEMWATCHER
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents_p.h b/src/corelib/io/qfilesystemwatcher_fsevents_p.h
index b0462b6..c888c61 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents_p.h
+++ b/src/corelib/io/qfilesystemwatcher_fsevents_p.h
@@ -56,6 +56,8 @@
#include "qfilesystemwatcher_p.h"
+#ifndef QT_NO_FILESYSTEMWATCHER
+
#include <QtCore/qmutex.h>
#include <QtCore/qwaitcondition.h>
#include <QtCore/qthread.h>
@@ -123,6 +125,8 @@ private:
#endif
};
+#endif //QT_NO_FILESYSTEMWATCHER
+
#endif
QT_END_NAMESPACE
diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp
index 4740a89..dc18ae7 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify.cpp
+++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp
@@ -353,24 +353,24 @@ void QInotifyFileSystemWatcherEngine::readFromInotify()
ioctl(inotifyFd, FIONREAD, (char *) &buffSize);
QVarLengthArray<char, 4096> buffer(buffSize);
buffSize = read(inotifyFd, buffer.data(), buffSize);
- const char *at = buffer.data();
- const char * const end = at + buffSize;
+ char *at = buffer.data();
+ char * const end = at + buffSize;
- QMap<int, inotify_event> eventForId;
+ QMap<int, inotify_event *> eventForId;
while (at < end) {
- const inotify_event *event = reinterpret_cast<const inotify_event *>(at);
+ inotify_event *event = reinterpret_cast<inotify_event *>(at);
if (eventForId.contains(event->wd))
- eventForId[event->wd].mask |= event->mask;
+ eventForId[event->wd]->mask |= event->mask;
else
- eventForId.insert(event->wd, *event);
+ eventForId.insert(event->wd, event);
at += sizeof(inotify_event) + event->len;
}
- QMap<int, inotify_event>::const_iterator it = eventForId.constBegin();
+ QMap<int, inotify_event *>::const_iterator it = eventForId.constBegin();
while (it != eventForId.constEnd()) {
- inotify_event event = *it;
+ const inotify_event &event = **it;
++it;
// qDebug() << "inotify event, wd" << event.wd << "mask" << hex << event.mask;
diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
index 378ad20..7960792 100644
--- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp
+++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
@@ -45,6 +45,8 @@
#include "qfilesystemwatcher_kqueue_p.h"
#include "private/qcore_unix_p.h"
+#ifndef QT_NO_FILESYSTEMWATCHER
+
#include <qdebug.h>
#include <qfile.h>
#include <qsocketnotifier.h>
@@ -343,4 +345,6 @@ process_next_event:
}
}
+#endif //QT_NO_FILESYSTEMWATCHER
+
QT_END_NAMESPACE
diff --git a/src/corelib/io/qfilesystemwatcher_kqueue_p.h b/src/corelib/io/qfilesystemwatcher_kqueue_p.h
index eda646b..edc20ae 100644
--- a/src/corelib/io/qfilesystemwatcher_kqueue_p.h
+++ b/src/corelib/io/qfilesystemwatcher_kqueue_p.h
@@ -60,6 +60,7 @@
#include <QtCore/qthread.h>
#include <QtCore/qvector.h>
+#ifndef QT_NO_FILESYSTEMWATCHER
struct kevent;
QT_BEGIN_NAMESPACE
@@ -92,4 +93,5 @@ private:
QT_END_NAMESPACE
+#endif //QT_NO_FILESYSTEMWATCHER
#endif // FILEWATCHER_KQUEUE_P_H
diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h
index 1dd51ea..8b77da5 100644
--- a/src/corelib/io/qiodevice_p.h
+++ b/src/corelib/io/qiodevice_p.h
@@ -68,7 +68,7 @@ QT_BEGIN_NAMESPACE
#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
#endif
-// This is QIODevice's read buffer, optimised for read(), isEmpty() and getChar()
+// This is QIODevice's read buffer, optimized for read(), isEmpty() and getChar()
class QIODevicePrivateLinearBuffer
{
public:
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index 929885c..98b1dcc 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -580,7 +580,7 @@ QResource::addSearchPath(const QString &path)
\obsolete
Use QDir::searchPaths() instead.
-
+
Returns the current search path list. This list is consulted when
creating a relative resource.
@@ -928,7 +928,7 @@ public:
}
};
-#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN) && ! defined (Q_OS_NACL)
#define QT_USE_MMAP
#endif
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index f25c272..7235459 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -88,6 +88,12 @@
#define CSIDL_APPDATA 0x001a // <username>\Application Data
#endif
+#ifdef Q_AUTOTEST_EXPORT
+# define Q_AUTOTEST_EXPORT_HELPER Q_AUTOTEST_EXPORT
+#else
+# define Q_AUTOTEST_EXPORT_HELPER static
+#endif
+
// ************************************************************************
// QConfFile
@@ -134,7 +140,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
# include <sys/mount.h>
QT_END_INCLUDE_NAMESPACE
-static bool isLikelyToBeNfs(int handle)
+Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle)
{
struct statfs buf;
if (fstatfs(handle, &buf) != 0)
@@ -160,7 +166,7 @@ QT_END_INCLUDE_NAMESPACE
# define AUTOFSNG_SUPER_MAGIC 0x7d92b1a0
# endif
-static bool isLikelyToBeNfs(int handle)
+Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle)
{
struct statfs buf;
if (fstatfs(handle, &buf) != 0)
@@ -177,7 +183,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
# include <sys/statvfs.h>
QT_END_INCLUDE_NAMESPACE
-static bool isLikelyToBeNfs(int handle)
+Q_AUTOTEST_EXPORT_HELPER bool qIsLikelyToBeNfs(int handle)
{
struct statvfs buf;
if (fstatvfs(handle, &buf) != 0)
@@ -189,7 +195,7 @@ static bool isLikelyToBeNfs(int handle)
#endif
}
#else
-static inline bool isLikelyToBeNfs(int /* handle */)
+Q_AUTOTEST_EXPORT_HELPER inline bool qIsLikelyToBeNfs(int /* handle */)
{
return true;
}
@@ -203,7 +209,7 @@ static bool unixLock(int handle, int lockType)
now is to disable locking when we detect NFS (or AutoFS or
CacheFS, which are probably wrapping NFS).
*/
- if (isLikelyToBeNfs(handle))
+ if (qIsLikelyToBeNfs(handle))
return false;
struct flock fl;
@@ -1124,7 +1130,7 @@ static void initDefaultPaths(QMutexLocker *locker)
if (env == 0) {
userPath = homePath;
userPath += QLatin1Char('/');
-#ifdef Q_WS_QWS
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
userPath += QLatin1String("Settings");
#else
userPath += QLatin1String(".config");
@@ -1229,16 +1235,21 @@ QConfFileSettingsPrivate::~QConfFileSettingsPrivate()
if (confFiles[i] && !confFiles[i]->ref.deref()) {
if (confFiles[i]->size == 0) {
delete confFiles[i].take();
- } else if (unusedCache) {
+ } else {
if (usedHash)
usedHash->remove(confFiles[i]->name);
- QT_TRY {
- // compute a better size?
- unusedCache->insert(confFiles[i]->name, confFiles[i].data(),
- 10 + (confFiles[i]->originalKeys.size() / 4));
- confFiles[i].take();
- } QT_CATCH(...) {
- // out of memory. Do not cache the file.
+ if (unusedCache) {
+ QT_TRY {
+ // compute a better size?
+ unusedCache->insert(confFiles[i]->name, confFiles[i].data(),
+ 10 + (confFiles[i]->originalKeys.size() / 4));
+ confFiles[i].take();
+ } QT_CATCH(...) {
+ // out of memory. Do not cache the file.
+ delete confFiles[i].take();
+ }
+ } else {
+ // unusedCache is gone - delete the entry to prevent a memory leak
delete confFiles[i].take();
}
}
@@ -3504,7 +3515,7 @@ void QSettings::setPath(Format format, Scope scope, const QString &path)
\threadsafe
Registers a custom storage format. On success, returns a special
- Format value that can then be passed to the QSettings constuctor.
+ Format value that can then be passed to the QSettings constructor.
On failure, returns InvalidFormat.
The \a extension is the file
diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h
index ec345be..5ff4d96 100644
--- a/src/corelib/io/qsettings_p.h
+++ b/src/corelib/io/qsettings_p.h
@@ -70,7 +70,7 @@
QT_BEGIN_NAMESPACE
-#if defined(Q_WS_QWS)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
#define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER
#endif
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 6452c0f..6ec5562 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -6048,6 +6048,14 @@ QUrl &QUrl::operator =(const QString &url)
return *this;
}
+/*!
+ \fn void QUrl::swap(QUrl &other)
+ \since 4.8
+
+ Swaps URL \a other with this URL. This operation is very
+ fast and never fails.
+*/
+
/*! \internal
Forces a detach.
diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h
index 563be5f..63fe98d 100644
--- a/src/corelib/io/qurl.h
+++ b/src/corelib/io/qurl.h
@@ -100,6 +100,8 @@ public:
#endif
~QUrl();
+ inline void swap(QUrl &other) { qSwap(d, other.d); }
+
void setUrl(const QString &url);
void setUrl(const QString &url, ParsingMode mode);
// ### Qt 5: merge the two setUrl() functions, with mode = TolerantMode
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index bd674a5..93818d1 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -80,12 +80,12 @@ wince*: {
kernel/qfunctions_wince.h
}
-mac:!embedded {
+mac:!embedded:!qpa{
SOURCES += \
kernel/qcoreapplication_mac.cpp
}
-mac {
+mac:!nacl {
SOURCES += \
kernel/qcore_mac.cpp
}
diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp
index 4fc9792..7e1ed9d 100644
--- a/src/corelib/kernel/qabstractitemmodel.cpp
+++ b/src/corelib/kernel/qabstractitemmodel.cpp
@@ -1197,7 +1197,7 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent,
\l{QAbstractItemModel::}{endInsertRows()} must be called.
\sa {Model Classes}, {Model Subclassing Reference}, QModelIndex,
- QAbstractItemView, {Using drag & drop with item views},
+ QAbstractItemView, {Using drag and drop with item views},
{Simple DOM Model Example}, {Simple Tree Model Example},
{Editable Tree Model Example}, {Fetch More Example}
*/
@@ -1336,14 +1336,13 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent,
layoutChanged(). In other words, when the structure changes:
\list
- \o Call beginLayoutChanged()
+ \o emit layoutAboutToBeChanged
\o Remember the QModelIndex that will change
\o Update your internal data
\o Call changePersistentIndex()
- \o Call endLayoutChanged()
+ \o emit layoutChanged
\endlist
-
\sa layoutAboutToBeChanged(), dataChanged(), headerDataChanged(), modelReset(),
changePersistentIndex()
*/
@@ -1761,7 +1760,7 @@ QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
where to place the data. This can occur in a tree when data is dropped on
a parent. Models will usually append the data to the parent in this case.
- \sa supportedDropActions(), {Using drag & drop with item views}
+ \sa supportedDropActions(), {Using drag and drop with item views}
*/
bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent)
@@ -1798,7 +1797,7 @@ bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction acti
reimplement the dropMimeData() function to handle the additional
operations.
- \sa dropMimeData(), Qt::DropActions, {Using drag & drop with item
+ \sa dropMimeData(), Qt::DropActions, {Using drag and drop with item
views}
*/
Qt::DropActions QAbstractItemModel::supportedDropActions() const
@@ -1815,7 +1814,7 @@ Qt::DropActions QAbstractItemModel::supportedDropActions() const
supportedDragActions() is used by QAbstractItemView::startDrag() as the
default values when a drag occurs.
- \sa Qt::DropActions, {Using drag & drop with item views}
+ \sa Qt::DropActions, {Using drag and drop with item views}
*/
Qt::DropActions QAbstractItemModel::supportedDragActions() const
{
@@ -1831,7 +1830,7 @@ Qt::DropActions QAbstractItemModel::supportedDragActions() const
Sets the supported drag \a actions for the items in the model.
- \sa supportedDragActions(), {Using drag & drop with item views}
+ \sa supportedDragActions(), {Using drag and drop with item views}
*/
void QAbstractItemModel::setSupportedDragActions(Qt::DropActions actions)
{
@@ -2637,8 +2636,6 @@ void QAbstractItemModel::endMoveRows()
QAbstractItemModelPrivate::Change insertChange = d->changes.pop();
QAbstractItemModelPrivate::Change removeChange = d->changes.pop();
- d->itemsMoved(removeChange.parent, removeChange.first, removeChange.last, insertChange.parent, insertChange.first, Qt::Vertical);
-
QModelIndex adjustedSource = removeChange.parent;
QModelIndex adjustedDestination = insertChange.parent;
@@ -2649,6 +2646,8 @@ void QAbstractItemModel::endMoveRows()
if (removeChange.needsAdjust)
adjustedSource = createIndex(adjustedSource.row() + numMoved, adjustedSource.column(), adjustedSource.internalPointer());
+ d->itemsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, Qt::Vertical);
+
emit rowsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first);
emit layoutChanged();
}
@@ -2861,8 +2860,6 @@ void QAbstractItemModel::endMoveColumns()
QAbstractItemModelPrivate::Change insertChange = d->changes.pop();
QAbstractItemModelPrivate::Change removeChange = d->changes.pop();
- d->itemsMoved(removeChange.parent, removeChange.first, removeChange.last, insertChange.parent, insertChange.first, Qt::Horizontal);
-
QModelIndex adjustedSource = removeChange.parent;
QModelIndex adjustedDestination = insertChange.parent;
@@ -2873,6 +2870,8 @@ void QAbstractItemModel::endMoveColumns()
if (removeChange.needsAdjust)
adjustedSource = createIndex(adjustedSource.row(), adjustedSource.column() + numMoved, adjustedSource.internalPointer());
+ d->itemsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first, Qt::Horizontal);
+
emit columnsMoved(adjustedSource, removeChange.first, removeChange.last, adjustedDestination, insertChange.first);
emit layoutChanged();
}
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index 9591f08..22b6a36 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -68,7 +68,15 @@
# undef qDebug
#endif
+#if defined(QT_BUILD_QMAKE) || defined(QT_BOOTSTRAPPED)
#include <ApplicationServices/ApplicationServices.h>
+#else
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
+#ifndef QT_NO_CORESERVICES
+#include <CoreServices/CoreServices.h>
+#endif
#undef DEBUG
#ifdef OLD_DEBUG
diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp
index e0d92c0..685576b 100644
--- a/src/corelib/kernel/qcore_unix.cpp
+++ b/src/corelib/kernel/qcore_unix.cpp
@@ -42,7 +42,8 @@
#include "qcore_unix_p.h"
#include "qelapsedtimer.h"
-#ifndef Q_OS_VXWORKS
+#ifdef Q_OS_NACL
+#elif !defined (Q_OS_VXWORKS)
# if !defined(Q_OS_HPUX) || defined(__ia64)
# include <sys/select.h>
# endif
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 4abe0ae..0f95ee0 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -416,11 +416,10 @@ QString qAppName()
operations can call processEvents() to keep the application
responsive.
- Some Qt classes, such as QString, can be used without a
- QCoreApplication object. However, in general, we recommend that
- you create a QCoreApplication or a QApplication object in your \c
- main() function as early as possible. exit() will not return
- until the event loop exits; e.g., when quit() is called.
+ In general, we recommend that you create a QCoreApplication or
+ a QApplication object in your \c main() function as early as
+ possible. exit() will not return until the event loop exits;
+ e.g., when quit() is called.
Several static convenience functions are also provided. The
QCoreApplication object is available from instance(). Events can
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index 9d3513a..4c91aaf 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -328,6 +328,7 @@ private:
friend class QETWidget;
friend class QGraphicsView;
friend class QGraphicsViewPrivate;
+ friend class QGraphicsScene;
friend class QGraphicsScenePrivate;
#ifndef QT_NO_GESTURES
friend class QGestureManager;
diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp
index 8390275..8d25780 100644
--- a/src/corelib/kernel/qeventdispatcher_glib.cpp
+++ b/src/corelib/kernel/qeventdispatcher_glib.cpp
@@ -180,6 +180,8 @@ static gboolean timerSourceCheck(GSource *source)
static gboolean timerSourceDispatch(GSource *source, GSourceFunc, gpointer)
{
GTimerSource *timerSource = reinterpret_cast<GTimerSource *>(source);
+ if (timerSource->processEventsFlags & QEventLoop::X11ExcludeTimers)
+ return true;
timerSource->runWithIdlePriority = true;
(void) timerSource->timerList.activateTimers();
return true; // ??? don't remove, right again?
@@ -311,6 +313,10 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context)
}
}
+#if GLIB_CHECK_VERSION (2, 22, 0)
+ g_main_context_push_thread_default (mainContext);
+#endif
+
// setup post event source
postEventSource = reinterpret_cast<GPostEventSource *>(g_source_new(&postEventSourceFuncs,
sizeof(GPostEventSource)));
@@ -389,6 +395,9 @@ QEventDispatcherGlib::~QEventDispatcherGlib()
d->postEventSource = 0;
Q_ASSERT(d->mainContext != 0);
+#if GLIB_CHECK_VERSION (2, 22, 0)
+ g_main_context_pop_thread_default (d->mainContext);
+#endif
g_main_context_unref(d->mainContext);
d->mainContext = 0;
}
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 87d6a49..6154119 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -975,9 +975,7 @@ bool QEventDispatcherSymbian::sendPostedEvents()
inline void QEventDispatcherSymbian::addDeferredActiveObject(QActiveObject *object)
{
- if (m_deferredActiveObjects.isEmpty()) {
- m_completeDeferredAOs->complete();
- }
+ queueDeferredActiveObjectsCompletion();
m_deferredActiveObjects.append(object);
}
@@ -986,6 +984,11 @@ inline void QEventDispatcherSymbian::removeDeferredActiveObject(QActiveObject *o
m_deferredActiveObjects.removeAll(object);
}
+void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion()
+{
+ m_completeDeferredAOs->complete();
+}
+
void QEventDispatcherSymbian::reactivateDeferredActiveObjects()
{
while (!m_deferredActiveObjects.isEmpty()) {
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index 1486db5..3615996 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -247,7 +247,9 @@ public:
void addDeferredActiveObject(QActiveObject *object);
void removeDeferredActiveObject(QActiveObject *object);
- void reactivateDeferredActiveObjects();
+ void queueDeferredActiveObjectsCompletion();
+ // Can be overridden to activate local active objects too, but do call baseclass!
+ virtual void reactivateDeferredActiveObjects();
inline int iterationCount() const { return m_iterationCount; }
diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp
index f50994c..b2b9806 100644
--- a/src/corelib/kernel/qeventdispatcher_unix.cpp
+++ b/src/corelib/kernel/qeventdispatcher_unix.cpp
@@ -112,7 +112,9 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate()
bool pipefail = false;
// initialize the common parts of the event loop
-#if defined(Q_OS_INTEGRITY)
+#if defined(Q_OS_NACL)
+ // do nothing.
+#elif defined(Q_OS_INTEGRITY)
// INTEGRITY doesn't like a "select" on pipes, so use socketpair instead
if (socketpair(AF_INET, SOCK_STREAM, PF_INET, thread_pipe) == -1) {
perror("QEventDispatcherUNIXPrivate(): Unable to create socket pair");
@@ -157,7 +159,9 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate()
QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate()
{
-#if defined(Q_OS_VXWORKS)
+#if defined(Q_OS_NACL)
+ // do nothing.
+#elif defined(Q_OS_VXWORKS)
close(thread_pipe[0]);
char name[20];
@@ -312,7 +316,7 @@ int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags,
QTimerInfoList::QTimerInfoList()
{
-#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC)
+#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC) && !defined(Q_OS_NACL)
if (!QElapsedTimer::isMonotonic()) {
// not using monotonic timers, initialize the timeChanged() machinery
previousTime = qt_gettime();
@@ -364,6 +368,10 @@ timeval qAbs(const timeval &t)
*/
bool QTimerInfoList::timeChanged(timeval *delta)
{
+#ifdef Q_OS_NACL
+ Q_UNUSED(delta)
+ return false; // Calling "times" crashes.
+#endif
struct tms unused;
clock_t currentTicks = times(&unused);
diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h
index 060a163..e1b6b1d 100644
--- a/src/corelib/kernel/qeventdispatcher_unix_p.h
+++ b/src/corelib/kernel/qeventdispatcher_unix_p.h
@@ -64,7 +64,7 @@
# include <sys/times.h>
#else
# include <sys/time.h>
-# if !defined(Q_OS_HPUX) || defined(__ia64)
+# if (!defined(Q_OS_HPUX) || defined(__ia64)) && !defined(Q_OS_NACL)
# include <sys/select.h>
# endif
#endif
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index 153ccdf..aa7e32f 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -78,6 +78,8 @@ extern uint qGlobalPostedEventsCount();
#ifndef QT_NO_GESTURES
#ifndef WM_GESTURE
# define WM_GESTURE 0x0119
+#endif
+#ifndef WM_GESTURENOTIFY
# define WM_GESTURENOTIFY 0x011A
#endif
#endif // QT_NO_GESTURES
@@ -354,9 +356,6 @@ public:
// for controlling when to send posted events
QAtomicInt serialNumber;
int lastSerialNumber;
-#ifndef Q_OS_WINCE
- int lastMessageTime;
-#endif
QAtomicInt wakeUps;
// timers
@@ -381,11 +380,7 @@ public:
QEventDispatcherWin32Private::QEventDispatcherWin32Private()
: threadId(GetCurrentThreadId()), interrupt(false), internalHwnd(0), getMessageHook(0),
- serialNumber(0), lastSerialNumber(0),
-#ifndef Q_OS_WINCE
- lastMessageTime(0),
-#endif
- wakeUps(0)
+ serialNumber(0), lastSerialNumber(0), wakeUps(0)
{
resolveTimerAPI();
}
@@ -500,9 +495,6 @@ LRESULT QT_WIN_CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPA
int localSerialNumber = d->serialNumber;
if (localSerialNumber != d->lastSerialNumber) {
d->lastSerialNumber = localSerialNumber;
-#ifndef Q_OS_WINCE
- d->lastMessageTime = GetMessageTime();
-#endif
QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
}
return 0;
@@ -521,11 +513,7 @@ LRESULT QT_WIN_CALLBACK qt_GetMessageHook(int code, WPARAM wp, LPARAM lp)
int localSerialNumber = d->serialNumber;
MSG unused;
if ((HIWORD(GetQueueStatus(QS_INPUT | QS_RAWINPUT)) == 0
- && PeekMessage(&unused, 0, WM_TIMER, WM_TIMER, PM_NOREMOVE) == 0)
-#ifndef Q_OS_WINCE
- || GetMessageTime() - d->lastMessageTime >= 10
-#endif
- ) {
+ && PeekMessage(&unused, 0, WM_TIMER, WM_TIMER, PM_NOREMOVE) == 0)) {
// no more input or timer events in the message queue or more than 10ms has elapsed since
// we send posted events, we can allow posted events to be sent now
(void) d->wakeUps.fetchAndStoreRelease(0);
diff --git a/src/corelib/kernel/qmath.qdoc b/src/corelib/kernel/qmath.qdoc
index 48f74b6..2c03b9a 100644
--- a/src/corelib/kernel/qmath.qdoc
+++ b/src/corelib/kernel/qmath.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp
index bf4001a..899ca7b 100644
--- a/src/corelib/kernel/qmimedata.cpp
+++ b/src/corelib/kernel/qmimedata.cpp
@@ -249,7 +249,7 @@ QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QVariant::Ty
\o We can subclass QMimeData and reimplement hasFormat(),
formats(), and retrieveData().
- \o If the drag and drop operation occurs withing a single
+ \o If the drag and drop operation occurs within a single
application, we can subclass QMimeData and add extra data in
it, and use a qobject_cast() in the receiver's drop event
handler. For example:
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index ceffa66..7fe9c52 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -127,6 +127,7 @@ extern "C" Q_CORE_EXPORT void qt_removeObject(QObject *)
void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = 0;
void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = 0;
+void (*QAbstractDeclarativeData::objectNameChanged)(QAbstractDeclarativeData *, QObject *) = 0;
QObjectData::~QObjectData() {}
@@ -1067,7 +1068,12 @@ QString QObject::objectName() const
void QObject::setObjectName(const QString &name)
{
Q_D(QObject);
+ bool objectNameChanged = d->declarativeData && d->objectName != name;
+
d->objectName = name;
+
+ if (objectNameChanged)
+ d->declarativeData->objectNameChanged(d->declarativeData, this);
}
@@ -3502,9 +3508,7 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
// determine if this connection should be sent immediately or
// put into the event queue
- if ((c->connectionType == Qt::AutoConnection
- && (!receiverInSameThread
- || receiver->d_func()->threadData != sender->d_func()->threadData))
+ if ((c->connectionType == Qt::AutoConnection && !receiverInSameThread)
|| (c->connectionType == Qt::QueuedConnection)) {
queued_activate(sender, signal_absolute_index, c, argv ? argv : empty_argv);
continue;
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 82023d4..effd3e6 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -90,6 +90,7 @@ class Q_CORE_EXPORT QAbstractDeclarativeData
public:
static void (*destroyed)(QAbstractDeclarativeData *, QObject *);
static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *);
+ static void (*objectNameChanged)(QAbstractDeclarativeData *, QObject *);
};
class Q_CORE_EXPORT QObjectPrivate : public QObjectData
diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp
index 0782ffe..6d7c7a4 100644
--- a/src/corelib/kernel/qsharedmemory.cpp
+++ b/src/corelib/kernel/qsharedmemory.cpp
@@ -73,14 +73,13 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key,
QString part1 = key;
part1.replace(QRegExp(QLatin1String("[^A-Za-z]")), QString());
result.append(part1);
-#ifdef Q_OS_SYMBIAN
- return result.left(KMaxKernelName);
-#endif
QByteArray hex = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1).toHex();
result.append(QLatin1String(hex));
#ifdef Q_OS_WIN
return result;
+#elif defined(Q_OS_SYMBIAN)
+ return result.left(KMaxKernelName);
#else
return QDir::tempPath() + QLatin1Char('/') + result;
#endif
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index feb85ce..aa070f1 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -1808,6 +1808,14 @@ QVariant& QVariant::operator=(const QVariant &variant)
}
/*!
+ \fn void QVariant::swap(QVariant &other)
+ \since 4.8
+
+ Swaps variant \a other with this variant. This operation is very
+ fast and never fails.
+*/
+
+/*!
\fn void QVariant::detach()
\internal
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index b267954..611db8b 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -224,6 +224,8 @@ class Q_CORE_EXPORT QVariant
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QVariant &other) { qSwap(d, other.d); }
+
Type type() const;
int userType() const;
const char *typeName() const;
diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp
index 2e77ae7..c60b3d5 100644
--- a/src/corelib/plugin/qelfparser_p.cpp
+++ b/src/corelib/plugin/qelfparser_p.cpp
@@ -39,8 +39,11 @@
**
****************************************************************************/
-#include "qlibrary_p.h"
#include "qelfparser_p.h"
+
+#if defined (Q_OF_ELF) && defined(Q_CC_GNU)
+
+#include "qlibrary_p.h"
#include <qdebug.h>
QT_BEGIN_NAMESPACE
@@ -139,7 +142,7 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library
qelfhalf_t e_shtrndx = read<qelfhalf_t> (data);
data += sizeof(qelfhalf_t); // e_shtrndx
- if ((e_shnum * e_shentsize) > fdlen) {
+ if ((quint32)(e_shnum * e_shentsize) > fdlen) {
if (lib)
lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library)
.arg(QLatin1String("announced %2 sections, each %3 bytes, exceed file size"))
@@ -165,7 +168,7 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library
parseSectionHeader(dataStart + soff, &strtab);
m_stringTableFileOffset = strtab.offset;
- if ((m_stringTableFileOffset + e_shentsize) >= fdlen || m_stringTableFileOffset == 0) {
+ if ((quint32)(m_stringTableFileOffset + e_shentsize) >= fdlen || m_stringTableFileOffset == 0) {
if (lib)
lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library)
.arg(QLatin1String("string table seems to be at %1"))
@@ -232,3 +235,4 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library
QT_END_NAMESPACE
+#endif // defined(Q_OF_ELF) && defined(Q_CC_GNU)
diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h
index 380d5a1..8087da5 100644
--- a/src/corelib/plugin/qelfparser_p.h
+++ b/src/corelib/plugin/qelfparser_p.h
@@ -56,6 +56,8 @@
#include <qendian.h>
#include <qglobal.h>
+#if defined (Q_OF_ELF) && defined(Q_CC_GNU)
+
QT_BEGIN_NAMESPACE
class QString;
@@ -99,5 +101,6 @@ public:
QT_END_NAMESPACE
-#endif // QELFPARSER_P_H
+#endif // defined(Q_OF_ELF) && defined(Q_CC_GNU)
+#endif // QELFPARSER_P_H
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 5683c66..fc8721c 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -1,3 +1,4 @@
+
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
@@ -385,7 +386,7 @@ static bool qt_unix_query(const QString &library, uint *version, bool *debug, QB
}
} else if (r != QElfParser::Ok) {
if (lib && qt_debug_component()) {
- qWarning(qPrintable(lib->errorString));
+ qWarning("QElfParser: %s",qPrintable(lib->errorString));
}
return false;
}
diff --git a/src/corelib/plugin/qplugin.qdoc b/src/corelib/plugin/qplugin.qdoc
index b02cfbf..9183350 100644
--- a/src/corelib/plugin/qplugin.qdoc
+++ b/src/corelib/plugin/qplugin.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/plugin/qsystemlibrary.cpp b/src/corelib/plugin/qsystemlibrary.cpp
index 1b8d8fe..2386cd6 100644
--- a/src/corelib/plugin/qsystemlibrary.cpp
+++ b/src/corelib/plugin/qsystemlibrary.cpp
@@ -57,8 +57,8 @@
The search order is the same as the order in DLL Safe search mode Windows,
except that we don't search:
* The current directory
- * The 16-bit system directory. (normally c:\windows\system)
- * The Windows directory. (normally c:\windows)
+ * The 16-bit system directory. (normally \c{c:\windows\system})
+ * The Windows directory. (normally \c{c:\windows})
This means that the effective search order is:
1. Application path.
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index 09558a9..98f7931 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -178,7 +178,7 @@ QT_BEGIN_NAMESPACE
QStateMachinePrivate::QStateMachinePrivate()
{
- QAbstractStatePrivate::isMachine = true;
+ isMachine = true;
state = NotRunning;
_startState = 0;
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index 2c63dfc..69b70cb 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -667,9 +667,9 @@ QThread::Priority QThread::priority() const
to finish will be woken up.
\warning This function is dangerous and its use is discouraged.
- The thread can be terminate at any point in its code path.
+ The thread can be terminated at any point in its code path.
Threads can be terminated while modifying data. There is no
- chance for the thread to cleanup after itself, unlock any held
+ chance for the thread to clean up after itself, unlock any held
mutexes, etc. In short, use this function only if absolutely
necessary.
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index a7601b6..f508c0a 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -83,7 +83,9 @@
# define old_qDebug qDebug
# undef qDebug
# endif
+#ifndef QT_NO_CORESERVICES
# include <CoreServices/CoreServices.h>
+#endif //QT_NO_CORESERVICES
# ifdef old_qDebug
# undef qDebug
@@ -142,6 +144,39 @@ static void destroy_current_thread_data_key()
}
Q_DESTRUCTOR_FUNCTION(destroy_current_thread_data_key)
+
+// Utility functions for getting, setting and clearing thread specific data.
+// In Symbian, TLS access is significantly faster than pthread_getspecific.
+// However Symbian does not have the thread destruction cleanup functionality
+// that pthread has, so pthread_setspecific is also used.
+static QThreadData *get_thread_data()
+{
+#ifdef Q_OS_SYMBIAN
+ return reinterpret_cast<QThreadData *>(Dll::Tls());
+#else
+ pthread_once(&current_thread_data_once, create_current_thread_data_key);
+ return reinterpret_cast<QThreadData *>(pthread_getspecific(current_thread_data_key));
+#endif
+}
+
+static void set_thread_data(QThreadData *data)
+{
+#ifdef Q_OS_SYMBIAN
+ qt_symbian_throwIfError(Dll::SetTls(data));
+#endif
+ pthread_once(&current_thread_data_once, create_current_thread_data_key);
+ pthread_setspecific(current_thread_data_key, data);
+}
+
+static void clear_thread_data()
+{
+#ifdef Q_OS_SYMBIAN
+ Dll::FreeTls();
+#endif
+ pthread_setspecific(current_thread_data_key, 0);
+}
+
+
#ifdef Q_OS_SYMBIAN
static void init_symbian_thread_handle(RThread &thread)
{
@@ -158,26 +193,24 @@ static void init_symbian_thread_handle(RThread &thread)
QThreadData *QThreadData::current()
{
- pthread_once(&current_thread_data_once, create_current_thread_data_key);
-
- QThreadData *data = reinterpret_cast<QThreadData *>(pthread_getspecific(current_thread_data_key));
+ QThreadData *data = get_thread_data();
if (!data) {
void *a;
if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, &a)) {
QThread *adopted = static_cast<QThread*>(a);
Q_ASSERT(adopted);
data = QThreadData::get2(adopted);
- pthread_setspecific(current_thread_data_key, data);
+ set_thread_data(data);
adopted->d_func()->running = true;
adopted->d_func()->finished = false;
static_cast<QAdoptedThread *>(adopted)->init();
} else {
data = new QThreadData;
- pthread_setspecific(current_thread_data_key, data);
QT_TRY {
+ set_thread_data(data);
data->thread = new QAdoptedThread(data);
} QT_CATCH(...) {
- pthread_setspecific(current_thread_data_key, 0);
+ clear_thread_data();
data->deref();
data = 0;
QT_RETHROW;
@@ -268,8 +301,7 @@ void *QThreadPrivate::start(void *arg)
User::SetCritical(User::EProcessCritical);
#endif
- pthread_once(&current_thread_data_once, create_current_thread_data_key);
- pthread_setspecific(current_thread_data_key, data);
+ set_thread_data(data);
data->ref();
data->quitNow = false;
@@ -313,6 +345,7 @@ void QThreadPrivate::finish(void *arg)
emit thr->terminated();
d->terminated = false;
emit thr->finished();
+ QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
if (d->data->eventDispatcher) {
d->data->eventDispatcher->closingDown();
@@ -358,7 +391,7 @@ int QThread::idealThreadCount()
{
int cores = -1;
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_MAC) && !defined(Q_WS_QPA)
// Mac OS X
cores = MPProcessorsScheduled();
#elif defined(Q_OS_HPUX)
@@ -476,6 +509,7 @@ void QThread::usleep(unsigned long usecs)
// Does some magic and calculate the Unix scheduler priorities
// sched_policy is IN/OUT: it must be set to a valid policy before calling this function
// sched_priority is OUT only
+#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0)
static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_priority)
{
#ifdef SCHED_IDLE
@@ -503,6 +537,7 @@ static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_pr
*sched_priority = prio;
return true;
}
+#endif
void QThread::start(Priority priority)
{
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index f0cbe8d..4a967ed 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -332,6 +332,7 @@ void QThreadPrivate::finish(void *arg, bool lockAnyway)
emit thr->terminated();
d->terminated = false;
emit thr->finished();
+ QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
if (d->data->eventDispatcher) {
d->data->eventDispatcher->closingDown();
diff --git a/src/corelib/thread/qwaitcondition.qdoc b/src/corelib/thread/qwaitcondition.qdoc
index b21285e..aaed420 100644
--- a/src/corelib/thread/qwaitcondition.qdoc
+++ b/src/corelib/thread/qwaitcondition.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/tools/qalgorithms.qdoc b/src/corelib/tools/qalgorithms.qdoc
index 4a4f592..898f940 100644
--- a/src/corelib/tools/qalgorithms.qdoc
+++ b/src/corelib/tools/qalgorithms.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/tools/qbitarray.cpp b/src/corelib/tools/qbitarray.cpp
index 04018ba..a1ad787 100644
--- a/src/corelib/tools/qbitarray.cpp
+++ b/src/corelib/tools/qbitarray.cpp
@@ -418,6 +418,13 @@ void QBitArray::fill(bool value, int begin, int end)
this bit array.
*/
+/*! \fn void QBitArray::swap(QBitArray &other)
+ \since 4.8
+
+ Swaps bit array \a other with this bit array. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QBitArray::operator==(const QBitArray &other) const
Returns true if \a other is equal to this bit array; otherwise
diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h
index bd79904..ddda5e7 100644
--- a/src/corelib/tools/qbitarray.h
+++ b/src/corelib/tools/qbitarray.h
@@ -68,6 +68,8 @@ public:
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QBitArray &other) { qSwap(d, other.d); }
+
inline int size() const { return (d.size() << 3) - *d.constData(); }
inline int count() const { return (d.size() << 3) - *d.constData(); }
int count(bool on) const;
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 6be3416..f26d878 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -541,6 +541,11 @@ QByteArray qUncompress(const uchar* data, int nbytes)
forever {
ulong alloc = len;
+ if (len >= (1 << 31) - sizeof(QByteArray::Data)) {
+ //QByteArray does not support that huge size anyway.
+ qWarning("qUncompress: Input data is corrupted");
+ return QByteArray();
+ }
QByteArray::Data *p = static_cast<QByteArray::Data *>(qRealloc(d.data(), sizeof(QByteArray::Data) + alloc));
if (!p) {
// we are not allowed to crash here when compiling with QT_NO_EXCEPTIONS
@@ -556,6 +561,11 @@ QByteArray qUncompress(const uchar* data, int nbytes)
switch (res) {
case Z_OK:
if (len != alloc) {
+ if (len >= (1 << 31) - sizeof(QByteArray::Data)) {
+ //QByteArray does not support that huge size anyway.
+ qWarning("qUncompress: Input data is corrupted");
+ return QByteArray();
+ }
QByteArray::Data *p = static_cast<QByteArray::Data *>(qRealloc(d.data(), sizeof(QByteArray::Data) + len));
if (!p) {
// we are not allowed to crash here when compiling with QT_NO_EXCEPTIONS
@@ -904,6 +914,13 @@ QByteArray &QByteArray::operator=(const char *str)
return *this;
}
+/*! \fn void QByteArray::swap(QByteArray &other)
+ \since 4.8
+
+ Swaps byte array \a other with this byte array. This operation is very
+ fast and never fails.
+*/
+
/*! \fn int QByteArray::size() const
Returns the number of bytes in this byte array.
@@ -1816,7 +1833,7 @@ QByteArray &QByteArray::replace(int pos, int len, const QByteArray &after)
return *this;
} else {
QByteArray copy(after);
- // ### optimise me
+ // ### optimize me
remove(pos, len);
return insert(pos, copy);
}
@@ -1857,7 +1874,7 @@ QByteArray &QByteArray::replace(int pos, int len, const char *after, int alen)
}
}
-// ### optimise all other replace method, by offering
+// ### optimize all other replace method, by offering
// QByteArray::replace(const char *before, int blen, const char *after, int alen)
/*!
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 3cdcaab..b625f4c 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -149,6 +149,8 @@ public:
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QByteArray &other) { qSwap(d, other.d); }
+
inline int size() const;
bool isEmpty() const;
void resize(int size);
diff --git a/src/corelib/tools/qcache.qdoc b/src/corelib/tools/qcache.qdoc
index 71e0483..0a3c971 100644
--- a/src/corelib/tools/qcache.qdoc
+++ b/src/corelib/tools/qcache.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/tools/qcontiguouscache.cpp b/src/corelib/tools/qcontiguouscache.cpp
index 3ba5186..7880bd3 100644
--- a/src/corelib/tools/qcontiguouscache.cpp
+++ b/src/corelib/tools/qcontiguouscache.cpp
@@ -194,6 +194,13 @@ MyRecord record(int row) const
Assigns \a other to this cache and returns a reference to this cache.
*/
+/*! \fn void QContiguousCache::swap(QContiguousCache<T> &other)
+ \since 4.8
+
+ Swaps cache \a other with this cache. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QContiguousCache::operator==(const QContiguousCache<T> &other) const
Returns true if \a other is equal to this cache; otherwise returns false.
diff --git a/src/corelib/tools/qcontiguouscache.h b/src/corelib/tools/qcontiguouscache.h
index 4c1a846..3d0a159 100644
--- a/src/corelib/tools/qcontiguouscache.h
+++ b/src/corelib/tools/qcontiguouscache.h
@@ -114,6 +114,7 @@ public:
inline QContiguousCache<T> &operator=(QContiguousCache<T> &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QContiguousCache<T> &other) { qSwap(d, other.d); }
bool operator==(const QContiguousCache<T> &other) const;
inline bool operator!=(const QContiguousCache<T> &other) const { return !(*this == other); }
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index f21aa2e..6a20c7a 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -1630,6 +1630,7 @@ QString QTime::toString(Qt::DateFormat format) const
\endtable
If the datetime is invalid, an empty string will be returned.
+ If \a format is empty, the default format "hh:mm:ss" is used.
\sa QDate::toString() QDateTime::toString()
*/
diff --git a/src/corelib/tools/qelapsedtimer.cpp b/src/corelib/tools/qelapsedtimer.cpp
index 4adddf9..28d3450 100644
--- a/src/corelib/tools/qelapsedtimer.cpp
+++ b/src/corelib/tools/qelapsedtimer.cpp
@@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE
function, which can be used to determine if a certain number of
milliseconds has already elapsed:
- \snippet doc/src/snippets/qelapsedtimer/main.cpp 1
+ \snippet doc/src/snippets/qelapsedtimer/main.cpp 2
\section1 Reference clocks
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index 2971c06..3dc9c92 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -730,6 +730,20 @@ void QHashData::checkSanity()
Assigns \a other to this hash and returns a reference to this hash.
*/
+/*! \fn void QHash::swap(QHash<Key, T> &other)
+ \since 4.8
+
+ Swaps hash \a other with this hash. This operation is very
+ fast and never fails.
+*/
+
+/*! \fn void QMultiHash::swap(QMultiHash<Key, T> &other)
+ \since 4.8
+
+ Swaps hash \a other with this hash. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QHash::operator==(const QHash<Key, T> &other) const
Returns true if \a other is equal to this hash; otherwise returns
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index 992ff33..21fca2d 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -287,6 +287,7 @@ public:
inline QHash<Key, T> &operator=(QHash<Key, T> &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QHash<Key, T> &other) { qSwap(d, other.d); }
bool operator==(const QHash<Key, T> &other) const;
inline bool operator!=(const QHash<Key, T> &other) const { return !(*this == other); }
@@ -925,6 +926,7 @@ class QMultiHash : public QHash<Key, T>
public:
QMultiHash() {}
QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {}
+ inline void swap(QMultiHash<Key, T> &other) { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps
inline typename QHash<Key, T>::iterator replace(const Key &key, const T &value)
{ return QHash<Key, T>::insert(key, value); }
diff --git a/src/corelib/tools/qiterator.qdoc b/src/corelib/tools/qiterator.qdoc
index 1e7637b..9cec7ec 100644
--- a/src/corelib/tools/qiterator.qdoc
+++ b/src/corelib/tools/qiterator.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/tools/qlinkedlist.cpp b/src/corelib/tools/qlinkedlist.cpp
index 909d940..7b452fc 100644
--- a/src/corelib/tools/qlinkedlist.cpp
+++ b/src/corelib/tools/qlinkedlist.cpp
@@ -147,6 +147,13 @@ QLinkedListData QLinkedListData::shared_null = {
list.
*/
+/*! \fn void QLinkedList::swap(QLinkedList<T> &other)
+ \since 4.8
+
+ Swaps list \a other with this list. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QLinkedList::operator==(const QLinkedList<T> &other) const
Returns true if \a other is equal to this list; otherwise returns
@@ -254,7 +261,7 @@ QLinkedListData QLinkedListData::shared_null = {
\sa insert()
*/
-/*!
+/*!
\fn bool QLinkedList::removeOne(const T &value)
\since 4.4
@@ -830,7 +837,7 @@ QLinkedListData QLinkedListData::shared_null = {
QLinkedList\<T\>::const_iterator allows you to iterate over a
QLinkedList\<T\>. If you want modify the QLinkedList as you iterate
- over it, you must use QLinkedList::const_iterator instead. It is
+ over it, you must use QLinkedList::iterator instead. It is
generally good practice to use QLinkedList::const_iterator on a
non-const QLinkedList as well, unless you need to change the
QLinkedList through the iterator. Const iterators are slightly
diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h
index c087944..849bfd3 100644
--- a/src/corelib/tools/qlinkedlist.h
+++ b/src/corelib/tools/qlinkedlist.h
@@ -89,6 +89,7 @@ public:
inline QLinkedList<T> &operator=(QLinkedList<T> &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QLinkedList<T> &other) { qSwap(d, other.d); }
bool operator==(const QLinkedList<T> &l) const;
inline bool operator!=(const QLinkedList<T> &l) const { return !(*this == l); }
diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp
index 6cc6fc1..5706171 100644
--- a/src/corelib/tools/qlist.cpp
+++ b/src/corelib/tools/qlist.cpp
@@ -602,6 +602,13 @@ void **QListData::erase(void **xi)
list.
*/
+/*! \fn void QList::swap(QList<T> &other)
+ \since 4.8
+
+ Swaps list \a other with this list. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QList::operator==(const QList<T> &other) const
Returns true if \a other is equal to this list; otherwise returns
@@ -936,7 +943,7 @@ void **QListData::erase(void **xi)
This function requires the value type to have an implementation of
\c operator==().
- Note that QList uses 0-based indexes, just like C++ arrays. Negative
+ Note that QList uses 0-based indexes, just like C++ arrays. Negative
indexes are not supported with the exception of the value mentioned
above.
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 8f988d6..b1fcabf 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -126,6 +126,7 @@ public:
inline QList &operator=(QList &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QList<T> &other) { qSwap(d, other.d); }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QList(std::initializer_list<T> args) : d(&QListData::shared_null)
{ d->ref.ref(); qCopy(args.begin(), args.end(), std::back_inserter(*this)); }
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index 6b1de5e..83d6dcd 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -77,7 +77,7 @@ QT_END_NAMESPACE
#include <qdebug.h>
#include <time.h>
-#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
# include <fenv.h>
#endif
@@ -6637,7 +6637,7 @@ Q_CORE_EXPORT char *qdtoa ( double d, int mode, int ndigits, int *decpt, int *si
_control87(MCW_EM, MCW_EM);
#endif
-#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
fenv_t envp;
feholdexcept(&envp);
#endif
@@ -6653,7 +6653,7 @@ Q_CORE_EXPORT char *qdtoa ( double d, int mode, int ndigits, int *decpt, int *si
#endif //_M_X64
#endif //Q_OS_WIN
-#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
+#if defined(__GLIBC__) && !defined(__UCLIBC__)
fesetenv(&envp);
#endif
@@ -7308,6 +7308,7 @@ Q_CORE_EXPORT char *qdtoa( double d, int mode, int ndigits, int *decpt, int *sig
Q_CORE_EXPORT double qstrtod(const char *s00, const char **se, bool *ok)
{
+ errno = 0;
double ret = strtod((char*)s00, (char**)se);
if (ok) {
if((ret == 0.0l && errno == ERANGE)
diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h
index 8b424bb..1af2cb4 100644
--- a/src/corelib/tools/qlocale.h
+++ b/src/corelib/tools/qlocale.h
@@ -114,7 +114,7 @@ class Q_CORE_EXPORT QLocale
friend class QString;
friend class QByteArray;
friend class QIntValidator;
- friend class QDoubleValidator;
+ friend class QDoubleValidatorPrivate;
friend class QTextStream;
friend class QTextStreamPrivate;
diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp
index 3143ee4..5a5fffd 100644
--- a/src/corelib/tools/qmap.cpp
+++ b/src/corelib/tools/qmap.cpp
@@ -404,6 +404,20 @@ void QMapData::dump()
Assigns \a other to this map and returns a reference to this map.
*/
+/*! \fn void QMap::swap(QMap<Key, T> &other)
+ \since 4.8
+
+ Swaps map \a other with this map. This operation is very
+ fast and never fails.
+*/
+
+/*! \fn void QMultiMap::swap(QMultiMap<Key, T> &other)
+ \since 4.8
+
+ Swaps map \a other with this map. This operation is very
+ fast and never fails.
+*/
+
/*! \fn bool QMap::operator==(const QMap<Key, T> &other) const
Returns true if \a other is equal to this map; otherwise returns
diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index ce8fd75..2897529 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -189,6 +189,7 @@ public:
inline QMap<Key, T> &operator=(QMap<Key, T> &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QMap<Key, T> &other) { qSwap(d, other.d); }
#ifndef QT_NO_STL
explicit QMap(const typename std::map<Key, T> &other);
std::map<Key, T> toStdMap() const;
@@ -973,6 +974,7 @@ class QMultiMap : public QMap<Key, T>
public:
QMultiMap() {}
QMultiMap(const QMap<Key, T> &other) : QMap<Key, T>(other) {}
+ inline void swap(QMultiMap<Key, T> &other) { QMap<Key, T>::swap(other); }
inline typename QMap<Key, T>::iterator replace(const Key &key, const T &value)
{ return QMap<Key, T>::insert(key, value); }
diff --git a/src/corelib/tools/qpair.qdoc b/src/corelib/tools/qpair.qdoc
index d49c09e..4ef151e 100644
--- a/src/corelib/tools/qpair.qdoc
+++ b/src/corelib/tools/qpair.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp
index 66f06e9..c297709 100644
--- a/src/corelib/tools/qpoint.cpp
+++ b/src/corelib/tools/qpoint.cpp
@@ -438,8 +438,12 @@ QDebug operator<<(QDebug d, const QPointF &p)
/*!
\fn bool QPointF::isNull() const
- Returns true if both the x and y coordinates are set to 0.0,
+ Returns true if both the x and y coordinates are set to +0.0;
otherwise returns false.
+
+ \note Since this function treats +0.0 and -0.0 differently, points
+ with zero-valued coordinates where either or both values have a
+ negative sign are not defined to be null points.
*/
diff --git a/src/corelib/tools/qqueue.cpp b/src/corelib/tools/qqueue.cpp
index 849bb0b..3602695 100644
--- a/src/corelib/tools/qqueue.cpp
+++ b/src/corelib/tools/qqueue.cpp
@@ -91,6 +91,14 @@
*/
/*!
+ \fn void QQueue::swap(QQueue<T> &other)
+ \since 4.8
+
+ Swaps queue \a other with this queue. This operation is very
+ fast and never fails.
+*/
+
+/*!
\fn void QQueue::enqueue(const T& t)
Adds value \a t to the tail of the queue.
diff --git a/src/corelib/tools/qqueue.h b/src/corelib/tools/qqueue.h
index c29134b..4ef1a61 100644
--- a/src/corelib/tools/qqueue.h
+++ b/src/corelib/tools/qqueue.h
@@ -56,6 +56,7 @@ class QQueue : public QList<T>
public:
inline QQueue() {}
inline ~QQueue() {}
+ inline void swap(QQueue<T> &other) { QList<T>::swap(other); } // prevent QList<->QQueue swaps
inline void enqueue(const T &t) { QList<T>::append(t); }
inline T dequeue() { return QList<T>::takeFirst(); }
inline T &head() { return QList<T>::first(); }
diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp
index 7a26c4f..5d2a0e3 100644
--- a/src/corelib/tools/qregexp.cpp
+++ b/src/corelib/tools/qregexp.cpp
@@ -3858,6 +3858,14 @@ QRegExp &QRegExp::operator=(const QRegExp &rx)
}
/*!
+ \fn void QRegExp::swap(QRegExp &other)
+ \since 4.8
+
+ Swaps regular expression \a other with this regular
+ expression. This operation is very fast and never fails.
+*/
+
+/*!
Returns true if this regular expression is equal to \a rx;
otherwise returns false.
diff --git a/src/corelib/tools/qregexp.h b/src/corelib/tools/qregexp.h
index 0b4a702..4a74f90 100644
--- a/src/corelib/tools/qregexp.h
+++ b/src/corelib/tools/qregexp.h
@@ -80,6 +80,7 @@ public:
inline QRegExp &operator=(QRegExp &&other)
{ qSwap(priv,other.priv); return *this; }
#endif
+ inline void swap(QRegExp &other) { qSwap(priv, other.priv); }
bool operator==(const QRegExp &rx) const;
inline bool operator!=(const QRegExp &rx) const { return !operator==(rx); }
diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h
index 40d3851..b3a6db6 100644
--- a/src/corelib/tools/qscopedpointer.h
+++ b/src/corelib/tools/qscopedpointer.h
@@ -186,6 +186,18 @@ template <class T, class Cleanup>
Q_INLINE_TEMPLATE void qSwap(QScopedPointer<T, Cleanup> &p1, QScopedPointer<T, Cleanup> &p2)
{ p1.swap(p2); }
+#ifndef QT_NO_STL
+QT_END_NAMESPACE
+namespace std {
+ template <class T, class Cleanup>
+ Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QScopedPointer)<T, Cleanup> &p1, QT_PREPEND_NAMESPACE(QScopedPointer)<T, Cleanup> &p2)
+ { p1.swap(p2); }
+}
+QT_BEGIN_NAMESPACE
+#endif
+
+
+
namespace QtPrivate {
template <typename X, typename Y> struct QScopedArrayEnsureSameType;
template <typename X> struct QScopedArrayEnsureSameType<X,X> { typedef X* Type; };
diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h
index dc3c45a..472078f 100644
--- a/src/corelib/tools/qset.h
+++ b/src/corelib/tools/qset.h
@@ -65,6 +65,7 @@ public:
inline QSet<T> &operator=(QSet<T> &&other)
{ qSwap(q_hash, other.q_hash); return *this; }
#endif
+ inline void swap(QSet<T> &other) { q_hash.swap(other.q_hash); }
inline bool operator==(const QSet<T> &other) const
{ return q_hash == other.q_hash; }
diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc
index d1aca4c..57368f0 100644
--- a/src/corelib/tools/qset.qdoc
+++ b/src/corelib/tools/qset.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -123,6 +123,13 @@
*/
/*!
+ \fn void QSet::swap(QSet<T> &other)
+
+ Swaps set \a other with this set. This operation is very fast and
+ never fails.
+*/
+
+/*!
\fn bool QSet::operator==(const QSet<T> &other) const
Returns true if the \a other set is equal to this set; otherwise
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h
index b646a9d..45456fe 100644
--- a/src/corelib/tools/qshareddata.h
+++ b/src/corelib/tools/qshareddata.h
@@ -263,6 +263,20 @@ template <class T>
Q_INLINE_TEMPLATE void qSwap(QExplicitlySharedDataPointer<T> &p1, QExplicitlySharedDataPointer<T> &p2)
{ p1.swap(p2); }
+#ifndef QT_NO_STL
+QT_END_NAMESPACE
+namespace std {
+ template <class T>
+ Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QSharedDataPointer)<T> &p1, QT_PREPEND_NAMESPACE(QSharedDataPointer)<T> &p2)
+ { p1.swap(p2); }
+
+ template <class T>
+ Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QExplicitlySharedDataPointer)<T> &p1, QT_PREPEND_NAMESPACE(QExplicitlySharedDataPointer)<T> &p2)
+ { p1.swap(p2); }
+}
+QT_BEGIN_NAMESPACE
+#endif
+
QT_END_NAMESPACE
QT_END_HEADER
diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp
index 8f9559a..3cc9c45 100644
--- a/src/corelib/tools/qsharedpointer.cpp
+++ b/src/corelib/tools/qsharedpointer.cpp
@@ -395,7 +395,7 @@
\section1 Tracking QObject
- QWeakPointer can be used to track deletion classes derives from QObject,
+ QWeakPointer can be used to track deletion classes that derive from QObject,
even if they are not managed by QSharedPointer. When used in that role,
QWeakPointer replaces the older QPointer in all use-cases. QWeakPointer
is also more efficient than QPointer, so it should be preferred in all
@@ -1163,7 +1163,7 @@
\since 4.6
\brief The qSharedPointerObjectCast function is for casting a shared pointer.
-
+
Returns a shared pointer to the pointer held by \a other, using a
\l qobject_cast() to type \tt X to obtain an internal pointer of the
appropriate type. If the \tt qobject_cast fails, the object
@@ -1430,7 +1430,7 @@ void QtSharedPointer::internalSafetyCheckAdd2(const void *d_ptr, const volatile
Q_ASSERT(!kp->dPointers.contains(d_ptr));
//qDebug("Adding d=%p value=%p", d_ptr, ptr);
-
+
const void *other_d_ptr = kp->dataPointers.value(ptr, 0);
if (other_d_ptr) {
# ifdef BACKTRACE_SUPPORTED
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 20dda12..ef8c454 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -376,6 +376,13 @@ namespace QtSharedPointer {
inline ExternalRefCount() : d(0) { }
inline ExternalRefCount(Qt::Initialization i) : Basic<T>(i) { }
+
+ inline ExternalRefCount(T *ptr) : Basic<T>(Qt::Uninitialized) // throws
+ { internalConstruct(ptr); }
+ template <typename Deleter>
+ inline ExternalRefCount(T *ptr, Deleter deleter) : Basic<T>(Qt::Uninitialized) // throws
+ { internalConstruct(ptr, deleter); }
+
inline ExternalRefCount(const ExternalRefCount<T> &other) : Basic<T>(other), d(other.d)
{ if (d) ref(); }
template <class X>
@@ -453,11 +460,12 @@ public:
inline QSharedPointer() { }
// inline ~QSharedPointer() { }
- inline explicit QSharedPointer(T *ptr) : BaseClass(Qt::Uninitialized)
- { BaseClass::internalConstruct(ptr); }
+ inline explicit QSharedPointer(T *ptr) : BaseClass(ptr) // throws
+ { }
template <typename Deleter>
- inline QSharedPointer(T *ptr, Deleter d) { BaseClass::internalConstruct(ptr, d); }
+ inline QSharedPointer(T *ptr, Deleter d) : BaseClass(ptr, d) // throws
+ { }
inline QSharedPointer(const QSharedPointer<T> &other) : BaseClass(other) { }
inline QSharedPointer<T> &operator=(const QSharedPointer<T> &other)
@@ -776,6 +784,16 @@ inline void qSwap(QSharedPointer<T> &p1, QSharedPointer<T> &p2)
p1.swap(p2);
}
+#ifndef QT_NO_STL
+QT_END_NAMESPACE
+namespace std {
+ template <class T>
+ inline void swap(QT_PREPEND_NAMESPACE(QSharedPointer)<T> &p1, QT_PREPEND_NAMESPACE(QSharedPointer)<T> &p2)
+ { p1.swap(p2); }
+}
+QT_BEGIN_NAMESPACE
+#endif
+
namespace QtSharedPointer {
// helper functions:
template <class X, class T>
diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp
index b2fe2da..d44a9d0 100644
--- a/src/corelib/tools/qsimd.cpp
+++ b/src/corelib/tools/qsimd.cpp
@@ -72,7 +72,12 @@
QT_BEGIN_NAMESPACE
-#if defined (Q_OS_WINCE)
+#if defined (Q_OS_NACL)
+static inline uint detectProcessorFeatures()
+{
+ return 0;
+}
+#elif defined (Q_OS_WINCE)
static inline uint detectProcessorFeatures()
{
uint features = 0;
@@ -135,7 +140,7 @@ static inline uint detectProcessorFeatures()
#if defined(QT_HAVE_IWMMXT)
// runtime detection only available when running as a previlegied process
features = IWMMXT;
-#elif defined(QT_HAVE_NEON)
+#elif defined(QT_ALWAYS_HAVE_NEON)
features = NEON;
#endif
diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index 664543b..87fa770 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -105,7 +105,8 @@ QT_BEGIN_HEADER
#endif // defined(QT_HAVE_SSE2) && (defined(__SSE2__) || defined(Q_CC_MSVC))
// NEON intrinsics
-#if defined(QT_HAVE_NEON)
+#if defined __ARM_NEON__
+#define QT_ALWAYS_HAVE_NEON
#include <arm_neon.h>
#endif
diff --git a/src/corelib/tools/qsize.cpp b/src/corelib/tools/qsize.cpp
index 20ac344..12287ab 100644
--- a/src/corelib/tools/qsize.cpp
+++ b/src/corelib/tools/qsize.cpp
@@ -492,9 +492,13 @@ QDebug operator<<(QDebug dbg, const QSize &s) {
/*!
\fn bool QSizeF::isNull() const
- Returns true if both the width and height is 0; otherwise returns
+ Returns true if both the width and height are +0.0; otherwise returns
false.
+ \note Since this function treats +0.0 and -0.0 differently, sizes with
+ zero width and height where either or both values have a negative
+ sign are not defined to be null sizes.
+
\sa isValid(), isEmpty()
*/
diff --git a/src/corelib/tools/qstack.cpp b/src/corelib/tools/qstack.cpp
index fa14900..b42fe3b 100644
--- a/src/corelib/tools/qstack.cpp
+++ b/src/corelib/tools/qstack.cpp
@@ -91,6 +91,14 @@
*/
/*!
+ \fn void QStack::swap(QStack<T> &other)
+ \since 4.8
+
+ Swaps stack \a other with this stack. This operation is very fast and
+ never fails.
+*/
+
+/*!
\fn void QStack::push(const T& t)
Adds element \a t to the top of the stack.
diff --git a/src/corelib/tools/qstack.h b/src/corelib/tools/qstack.h
index 526c705..6ddc381 100644
--- a/src/corelib/tools/qstack.h
+++ b/src/corelib/tools/qstack.h
@@ -56,6 +56,7 @@ class QStack : public QVector<T>
public:
inline QStack() {}
inline ~QStack() {}
+ inline void swap(QStack<T> &other) { QVector<T>::swap(other); } // prevent QVector<->QStack swaps
inline void push(const T &t) { QVector<T>::append(t); }
T pop();
T &top();
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index cfffc4a..bb496c6 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -579,7 +579,7 @@ const QString::Null QString::null = { };
strings from a string list that contain a particular substring or
that match a particular QRegExp using the QStringList::filter()
function.
-:
+
\section1 Querying String Data
If you want to see if a QString starts or ends with a particular
@@ -1174,6 +1174,13 @@ QString::QString(QChar ch)
*/
+/*! \fn void QString::swap(QString &other)
+ \since 4.8
+
+ Swaps string \a other with this string. This operation is very fast and
+ never fails.
+*/
+
/*! \fn void QString::detach()
\internal
@@ -3599,7 +3606,7 @@ static QByteArray toLatin1_helper(const QChar *data, int length)
}
length = length % 16;
}
-#elif QT_HAVE_NEON
+#elif QT_ALWAYS_HAVE_NEON
// Refer to the documentation of the SSE2 implementation
// this use eactly the same method as for SSE except:
// 1) neon has unsigned comparison
@@ -3906,7 +3913,7 @@ QString QString::fromLocal8Bit(const char *str, int size)
/*!
Returns a QString initialized with the first \a size characters
- of the 8-bit string \a str.
+ from the string \a str.
If \a size is -1 (default), it is taken to be qstrlen(\a
str).
@@ -4290,7 +4297,7 @@ QString& QString::fill(QChar ch, int size)
Returns the number of characters in this string. Equivalent to
size().
- \sa setLength()
+ \sa resize()
*/
/*!
@@ -7460,31 +7467,17 @@ QDataStream &operator<<(QDataStream &out, const QString &str)
out << str.toLatin1();
} else {
if (!str.isNull() || out.version() < 3) {
- int byteOrder = out.byteOrder();
- const QChar* ub = str.unicode();
- static const uint auto_size = 1024;
- char t[auto_size];
- char *b;
- if (str.length()*sizeof(QChar) > auto_size) {
- b = new char[str.length()*sizeof(QChar)];
+ if ((out.byteOrder() == QDataStream::BigEndian) == (QSysInfo::ByteOrder == QSysInfo::BigEndian)) {
+ out.writeBytes(reinterpret_cast<const char *>(str.unicode()), sizeof(QChar) * str.length());
} else {
- b = t;
- }
- int l = str.length();
- char *c=b;
- while (l--) {
- if (byteOrder == QDataStream::BigEndian) {
- *c++ = (char)ub->row();
- *c++ = (char)ub->cell();
- } else {
- *c++ = (char)ub->cell();
- *c++ = (char)ub->row();
+ QVarLengthArray<ushort> buffer(str.length());
+ const ushort *data = reinterpret_cast<const ushort *>(str.constData());
+ for (int i = 0; i < str.length(); i++) {
+ buffer[i] = qbswap(*data);
+ ++data;
}
- ub++;
+ out.writeBytes(reinterpret_cast<const char *>(buffer.data()), sizeof(ushort) * buffer.size());
}
- out.writeBytes(b, sizeof(QChar)*str.length());
- if (str.length()*sizeof(QChar) > auto_size)
- delete [] b;
} else {
// write null marker
out << (quint32)0xffffffff;
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 589fdc2..07f43ca 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -108,6 +108,7 @@ public:
inline QString &operator=(QString &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QString &other) { qSwap(d, other.d); }
inline int size() const { return d->size; }
inline int count() const { return d->size; }
inline int length() const;
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 4a6bb4b..3882323 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -44,7 +44,10 @@
#include <QtCore/qcontainerfwd.h>
#include <QtCore/qglobal.h>
+#include <QtCore/qalgorithms.h>
+
#include <new>
+#include <string.h>
QT_BEGIN_HEADER
@@ -123,6 +126,18 @@ public:
}
}
void append(const T *buf, int size);
+ inline QVarLengthArray<T, Prealloc> &operator<<(const T &t)
+ { append(t); return *this; }
+ inline QVarLengthArray<T, Prealloc> &operator+=(const T &t)
+ { append(t); return *this; }
+
+ void prepend(const T &t);
+ void insert(int i, const T &t);
+ void insert(int i, int n, const T &t);
+ void replace(int i, const T &t);
+ void remove(int i);
+ void remove(int i, int n);
+
inline T *data() { return ptr; }
inline const T *data() const { return ptr; }
@@ -135,6 +150,21 @@ public:
typedef const value_type &const_reference;
typedef qptrdiff difference_type;
+
+ typedef T* iterator;
+ typedef const T* const_iterator;
+
+ inline iterator begin() { return ptr; }
+ inline const_iterator begin() const { return ptr; }
+ inline const_iterator constBegin() const { return ptr; }
+ inline iterator end() { return ptr + s; }
+ inline const_iterator end() const { return ptr + s; }
+ inline const_iterator constEnd() const { return ptr + s; }
+ iterator insert(iterator before, int n, const T &x);
+ inline iterator insert(iterator before, const T &x) { return insert(before, 1, x); }
+ iterator erase(iterator begin, iterator end);
+ inline iterator erase(iterator pos) { return erase(pos, pos+1); }
+
private:
friend class QPodList<T, Prealloc>;
void realloc(int size, int alloc);
@@ -272,6 +302,100 @@ Q_OUTOFLINE_TEMPLATE T QVarLengthArray<T, Prealloc>::value(int i, const T &defau
return (i < 0 || i >= size()) ? defaultValue : at(i);
}
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::insert(int i, const T &t)
+{ Q_ASSERT_X(i >= 0 && i <= s, "QVarLengthArray::insert", "index out of range");
+ insert(begin() + i, 1, t); }
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::insert(int i, int n, const T &t)
+{ Q_ASSERT_X(i >= 0 && i <= s, "QVarLengthArray::insert", "index out of range");
+ insert(begin() + i, n, t); }
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::remove(int i, int n)
+{ Q_ASSERT_X(i >= 0 && n >= 0 && i + n <= s, "QVarLengthArray::remove", "index out of range");
+ erase(begin() + i, begin() + i + n); }
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::remove(int i)
+{ Q_ASSERT_X(i >= 0 && i < s, "QVarLengthArray::remove", "index out of range");
+ erase(begin() + i, begin() + i + 1); }
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::prepend(const T &t)
+{ insert(begin(), 1, t); }
+
+template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::replace(int i, const T &t)
+{
+ Q_ASSERT_X(i >= 0 && i < s, "QVarLengthArray::replace", "index out of range");
+ const T copy(t);
+ data()[i] = copy;
+}
+
+
+template <class T, int Prealloc>
+Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(iterator before, size_type n, const T &t)
+{
+ int offset = int(before - ptr);
+ if (n != 0) {
+ resize(s + n);
+ const T copy(t);
+ if (QTypeInfo<T>::isStatic) {
+ T *b = ptr + offset;
+ T *j = ptr + s;
+ T *i = j - n;
+ while (i != b)
+ *--j = *--i;
+ i = b + n;
+ while (i != b)
+ *--i = copy;
+ } else {
+ T *b = ptr + offset;
+ T *i = b + n;
+ memmove(i, b, (s - offset - n) * sizeof(T));
+ while (i != b)
+ new (--i) T(copy);
+ }
+ }
+ return ptr + offset;
+}
+
+template <class T, int Prealloc>
+Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::erase(iterator abegin, iterator aend)
+{
+ int f = int(abegin - ptr);
+ int l = int(aend - ptr);
+ int n = l - f;
+ if (QTypeInfo<T>::isComplex) {
+ qCopy(ptr + l, ptr + s, ptr + f);
+ T *i = ptr + s;
+ T *b = ptr + s - n;
+ while (i != b) {
+ --i;
+ i->~T();
+ }
+ } else {
+ memmove(ptr + f, ptr + l, (s - l) * sizeof(T));
+ }
+ s -= n;
+ return ptr + f;
+}
+
+template <typename T, int Prealloc1, int Prealloc2>
+bool operator==(const QVarLengthArray<T, Prealloc1> &l, const QVarLengthArray<T, Prealloc2> &r)
+{
+ if (l.size() != r.size())
+ return false;
+ for (int i = 0; i < l.size(); i++) {
+ if (l.at(i) != r.at(i))
+ return false;
+ }
+ return true;
+}
+
+template <typename T, int Prealloc1, int Prealloc2>
+bool operator!=(const QVarLengthArray<T, Prealloc1> &l, const QVarLengthArray<T, Prealloc2> &r)
+{
+ return !(l == r);
+}
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc
index cbd81c7..4d5d5d1 100644
--- a/src/corelib/tools/qvarlengtharray.qdoc
+++ b/src/corelib/tools/qvarlengtharray.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
@@ -337,3 +337,211 @@
Typedef for const T &. Provided for STL compatibility.
*/
+/*! \fn void QVarLengthArray::prepend(const T &value)
+
+ \since 4.8
+ Inserts \a value at the beginning of the array.
+
+
+ This is the same as vector.insert(0, \a value).
+
+ For large arrays, this operation can be slow (\l{linear time}),
+ because it requires moving all the items in the vector by one
+ position further in memory. If you want a container class that
+ provides a fast prepend() function, use QList or QLinkedList
+ instead.
+
+ \sa append(), insert()
+*/
+
+/*! \fn void QVarLengthArray::replace(int i, const T &value)
+
+ \since 4.8
+ Replaces the item at index position \a i with \a value.
+
+ \a i must be a valid index position in the array (i.e., 0 <= \a
+ i < size()).
+
+ \sa operator[](), remove()
+*/
+
+/*! \fn void QVarLengthArray::remove(int i)
+
+ \overload
+ \since 4.8
+
+ Removes the element at index position \a i.
+
+ \sa insert(), replace()
+*/
+
+/*! \fn void QVarLengthArray::remove(int i, int count)
+
+ \overload
+ \since 4.8
+
+ Removes \a count elements from the middle of the array, starting at
+ index position \a i.
+
+ \sa insert(), replace()
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::begin()
+ \since 4.8
+
+ Returns an \l{STL-style iterator} pointing to the first item in
+ the array.
+
+ \sa constBegin(), end()
+*/
+
+/*! \fn QVarLengthArray::const_iterator QVarLengthArray::begin() const
+ \since 4.8
+ \overload
+*/
+
+/*! \fn QVarLengthArray::const_iterator QVarLengthArray::constBegin() const
+ \since 4.8
+
+ Returns a const \l{STL-style iterator} pointing to the first item
+ in the array.
+
+ \sa begin(), constEnd()
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::end()
+ \since 4.8
+
+ Returns an \l{STL-style iterator} pointing to the imaginary item
+ after the last item in the array.
+
+ \sa begin(), constEnd()
+*/
+
+/*! \fn QVarLengthArray::const_iterator QVarLengthArray::end() const
+ \since 4.8
+
+ \overload
+*/
+
+/*! \fn QVarLengthArray::const_iterator QVarLengthArray::constEnd() const
+ \since 4.8
+
+ Returns a const \l{STL-style iterator} pointing to the imaginary
+ item after the last item in the array.
+
+ \sa constBegin(), end()
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::erase(iterator pos)
+ \since 4.8
+
+ Removes the item pointed to by the iterator \a pos from the
+ vector, and returns an iterator to the next item in the vector
+ (which may be end()).
+
+ \sa insert(), remove()
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::erase(iterator begin, iterator end)
+
+ \overload
+ \since 4.8
+
+ Removes all the items from \a begin up to (but not including) \a
+ end. Returns an iterator to the same item that \a end referred to
+ before the call.
+*/
+
+/*! \fn void QVarLengthArray::insert(int i, const T &value)
+ \since 4.8
+
+ Inserts \a value at index position \a i in the array. If \a i is
+ 0, the value is prepended to the vector. If \a i is size(), the
+ value is appended to the vector.
+
+ For large arrays, this operation can be slow (\l{linear time}),
+ because it requires moving all the items at indexes \a i and
+ above by one position further in memory. If you want a container
+ class that provides a fast insert() function, use QLinkedList
+ instead.
+
+ \sa remove()
+*/
+
+/*! \fn void QVarLengthArray::insert(int i, int count, const T &value)
+
+ \overload
+ \since 4.8
+
+ Inserts \a count copies of \a value at index position \a i in the
+ vector.
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::insert(iterator before, const T &value)
+
+ \overload
+ \since 4.8
+
+ Inserts \a value in front of the item pointed to by the iterator
+ \a before. Returns an iterator pointing at the inserted item.
+*/
+
+/*! \fn QVarLengthArray::iterator QVarLengthArray::insert(iterator before, int count, const T &value)
+
+ \since 4.8
+ Inserts \a count copies of \a value in front of the item pointed to
+ by the iterator \a before. Returns an iterator pointing at the
+ first of the inserted items.
+*/
+
+
+
+/*! \fn bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
+
+ \relates QVarLengthArray
+ \since 4.8
+ Returns true if the two array are equal;
+
+ Two arrays are considered equal if they contain the same values
+ in the same order.
+
+ This function requires the value type to have an implementation
+ of \c operator==().
+
+ \sa operator!=()
+*/
+
+/*! \fn bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
+
+ \relates QVarLengthArray
+ \since 4.8
+ Returns true if the two array are different;
+
+ Two arrays are considered equal if they contain the same values
+ in the same order.
+
+ This function requires the value type to have an implementation
+ of \c operator==().
+
+ \sa operator==()
+*/
+
+/*! \fn QVarLengthArray &QVarLengthArray::operator<<(const T &value)
+
+ \since 4.8
+ Appends \a value to the array and returns a reference to this
+ vector.
+
+ \sa append(), operator+=()
+*/
+
+/*! \fn QVarLengthArray &QVarLengthArray::operator+=(const T &value)
+
+ \since 4.8
+ Appends \a value to the array and returns a reference to this
+ vector.
+
+ \sa append(), operator<<()
+*/
+
diff --git a/src/corelib/tools/qvector.cpp b/src/corelib/tools/qvector.cpp
index 3a13540..0497211 100644
--- a/src/corelib/tools/qvector.cpp
+++ b/src/corelib/tools/qvector.cpp
@@ -285,6 +285,13 @@ int QVectorData::grow(int sizeofTypedData, int size, int sizeofT, bool excessive
vector.
*/
+/*! \fn void QVector::swap(QVector<T> &other)
+ \since 4.8
+
+ Swaps vector \a other with this vector. This operation is very fast and
+ never fails.
+*/
+
/*! \fn bool QVector::operator==(const QVector<T> &other) const
Returns true if \a other is equal to this vector; otherwise
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index c16aefb..0f7db88 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -125,6 +125,7 @@ public:
inline QVector<T> operator=(QVector<T> &&other)
{ qSwap(p, other.p); return *this; }
#endif
+ inline void swap(QVector<T> &other) { qSwap(d, other.d); }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QVector(std::initializer_list<T> args);
#endif
@@ -303,7 +304,7 @@ public:
#ifndef QT_NO_STL
static inline QVector<T> fromStdVector(const std::vector<T> &vector)
- { QVector<T> tmp; tmp.reserve(vector.size()); qCopy(vector.begin(), vector.end(), std::back_inserter(tmp)); return tmp; }
+ { QVector<T> tmp; tmp.reserve(int(vector.size())); qCopy(vector.begin(), vector.end(), std::back_inserter(tmp)); return tmp; }
inline std::vector<T> toStdVector() const
{ std::vector<T> tmp; tmp.reserve(size()); qCopy(constBegin(), constEnd(), std::back_inserter(tmp)); return tmp; }
#endif
@@ -439,9 +440,9 @@ QVector<T>::QVector(int asize, const T &t)
template <typename T>
QVector<T>::QVector(std::initializer_list<T> args)
{
- d = malloc(args.size());
+ d = malloc(int(args.size()));
d->ref = 1;
- d->alloc = d->size = args.size();
+ d->alloc = d->size = int(args.size());
d->sharable = true;
d->capacity = false;
T* i = p->array + d->size;
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index d81ab04..03bb32d 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -83,7 +83,7 @@ SOURCES += \
symbian:SOURCES+=tools/qlocale_symbian.cpp
-mac:SOURCES += tools/qelapsedtimer_mac.cpp
+!nacl:mac:SOURCES += tools/qelapsedtimer_mac.cpp
else:symbian:SOURCES += tools/qelapsedtimer_symbian.cpp
else:unix:SOURCES += tools/qelapsedtimer_unix.cpp
else:win32:SOURCES += tools/qelapsedtimer_win.cpp
diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h
index 402afa3..d7143bd 100644
--- a/src/corelib/xml/qxmlstream.h
+++ b/src/corelib/xml/qxmlstream.h
@@ -169,6 +169,7 @@ Q_DECLARE_TYPEINFO(QXmlStreamAttribute, Q_MOVABLE_TYPE);
class Q_XMLSTREAM_EXPORT QXmlStreamAttributes : public QVector<QXmlStreamAttribute>
{
public:
+ inline QXmlStreamAttributes() {}
QStringRef value(const QString &namespaceUri, const QString &name) const;
QStringRef value(const QString &namespaceUri, const QLatin1String &name) const;
QStringRef value(const QLatin1String &namespaceUri, const QLatin1String &name) const;
diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp
index 9ff0ff1..943b965 100644
--- a/src/dbus/qdbusabstractinterface.cpp
+++ b/src/dbus/qdbusabstractinterface.cpp
@@ -560,7 +560,7 @@ void QDBusAbstractInterface::connectNotify(const char *signal)
if (!d->isValid)
return;
- // we end up recursing here, so optimise away
+ // we end up recursing here, so optimize away
if (qstrcmp(signal + 1, "destroyed(QObject*)") == 0)
return;
diff --git a/src/dbus/qdbusargument.h b/src/dbus/qdbusargument.h
index 30f2cda..84d0349 100644
--- a/src/dbus/qdbusargument.h
+++ b/src/dbus/qdbusargument.h
@@ -172,7 +172,7 @@ template<typename T> inline T qdbus_cast(const QVariant &v
return qvariant_cast<T>(v);
}
-// specialise for QVariant, allowing it to be used in place of QDBusVariant
+// specialize for QVariant, allowing it to be used in place of QDBusVariant
template<> inline QVariant qdbus_cast<QVariant>(const QDBusArgument &arg, QVariant *)
{
QDBusVariant item;
diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp
index bf771a8..f68a8ca 100644
--- a/src/dbus/qdbusconnection.cpp
+++ b/src/dbus/qdbusconnection.cpp
@@ -140,9 +140,9 @@ void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionP
\fn QDBusConnection &QDBusConnection::sessionBus()
\relates QDBusConnection
- Returns a QDBusConnection object opened with the session bus. The object reference returned
- by this function is valid until the QCoreApplication's destructor is run, when the
- connection will be closed and the object, deleted.
+ Returns a QDBusConnection object opened with the session bus. The object
+ reference returned by this function is valid until the application terminates,
+ at which point the connection will be closed and the object deleted.
*/
/*!
\fn QDBusConnection &QDBusConnection::systemBus()
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 35979d6..c7f62aa 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -801,7 +801,7 @@ bool QDBusConnectionPrivate::activateCall(QObject* object, int flags, const QDBu
++cacheIt;
if (cacheIt == slotCache.hash.constEnd() || cacheIt.key() != cacheKey)
{
- // not cached, analyse the meta object
+ // not cached, analyze the meta object
const QMetaObject *mo = object->metaObject();
QByteArray memberName = msg.member().toUtf8();
diff --git a/src/dbus/qdbusmarshaller.cpp b/src/dbus/qdbusmarshaller.cpp
index 8b174a1..e620152 100644
--- a/src/dbus/qdbusmarshaller.cpp
+++ b/src/dbus/qdbusmarshaller.cpp
@@ -507,7 +507,7 @@ bool QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller *demarshaller)
if (code == DBUS_TYPE_ARRAY) {
int element = q_dbus_message_iter_get_element_type(&demarshaller->iterator);
if (q_dbus_type_is_fixed(element)) {
- // another optimisation: fixed size arrays
+ // another optimization: fixed size arrays
// code is exactly like QDBusDemarshaller::toByteArray
DBusMessageIter sub;
q_dbus_message_iter_recurse(&demarshaller->iterator, &sub);
diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp
index d838e37..10b2768 100644
--- a/src/dbus/qdbusmessage.cpp
+++ b/src/dbus/qdbusmessage.cpp
@@ -292,7 +292,7 @@ QDBusMessage QDBusMessagePrivate::makeLocal(const QDBusConnectionPrivate &conn,
}
// no complex types seen
- // optimise by using the variant list itself
+ // optimize by using the variant list itself
QDBusMessage retval;
QDBusMessagePrivate *d = retval.d_ptr;
d->arguments = asSent.d_ptr->arguments;
@@ -452,7 +452,7 @@ QDBusMessage QDBusMessage::createReply(const QVariantList &arguments) const
d_ptr->localReply = new QDBusMessage(reply); // keep an internal copy
}
- // the reply must have a msg or be a local-loop optimisation
+ // the reply must have a msg or be a local-loop optimization
Q_ASSERT(reply.d_ptr->reply || reply.d_ptr->localMessage);
return reply;
}
@@ -471,7 +471,7 @@ QDBusMessage QDBusMessage::createErrorReply(const QString name, const QString &m
d_ptr->localReply = new QDBusMessage(reply); // keep an internal copy
}
- // the reply must have a msg or be a local-loop optimisation
+ // the reply must have a msg or be a local-loop optimization
Q_ASSERT(reply.d_ptr->reply || reply.d_ptr->localMessage);
return reply;
}
diff --git a/src/dbus/qdbusmetatype.cpp b/src/dbus/qdbusmetatype.cpp
index cb377cb..821a227 100644
--- a/src/dbus/qdbusmetatype.cpp
+++ b/src/dbus/qdbusmetatype.cpp
@@ -242,7 +242,7 @@ bool QDBusMetaType::marshall(QDBusArgument &arg, int id, const void *data)
QReadLocker locker(customTypesLock());
QVector<QDBusCustomTypeInfo> *ct = customTypes();
if (id >= ct->size())
- return false; // non-existant
+ return false; // non-existent
const QDBusCustomTypeInfo &info = (*ct).at(id);
if (!info.marshall) {
@@ -271,7 +271,7 @@ bool QDBusMetaType::demarshall(const QDBusArgument &arg, int id, void *data)
QReadLocker locker(customTypesLock());
QVector<QDBusCustomTypeInfo> *ct = customTypes();
if (id >= ct->size())
- return false; // non-existant
+ return false; // non-existent
const QDBusCustomTypeInfo &info = (*ct).at(id);
if (!info.demarshall) {
diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h
index 61e561e..918a46c 100644
--- a/src/dbus/qdbuspendingreply.h
+++ b/src/dbus/qdbuspendingreply.h
@@ -85,7 +85,7 @@ namespace QDBusPendingReplyTypes {
template<typename T1> inline int metaTypeFor(T1 * = 0)
{ return qMetaTypeId<T1>(); }
- // specialise for QVariant, allowing it to be used in place of QDBusVariant
+ // specialize for QVariant, allowing it to be used in place of QDBusVariant
template<> inline int metaTypeFor<QVariant>(QVariant *)
{ return qMetaTypeId<QDBusVariant>(); }
diff --git a/src/dbus/qdbusutil.cpp b/src/dbus/qdbusutil.cpp
index 2fcdc73..b7b0407 100644
--- a/src/dbus/qdbusutil.cpp
+++ b/src/dbus/qdbusutil.cpp
@@ -309,7 +309,7 @@ namespace QDBusUtil
Returns true if \a connName is a valid unique connection name.
Unique connection names start with a colon (":") and are followed by a list of dot-separated
- components composed of ASCII letters, digits, the hypen or the underscore ("_") character.
+ components composed of ASCII letters, digits, the hyphen or the underscore ("_") character.
*/
bool isValidUniqueConnectionName(const QString &connName)
{
diff --git a/src/declarative/debugger/qdeclarativedebug_p.h b/src/declarative/debugger/qdeclarativedebug_p.h
index 3d83e8a..9b8572b 100644
--- a/src/declarative/debugger/qdeclarativedebug_p.h
+++ b/src/declarative/debugger/qdeclarativedebug_p.h
@@ -45,6 +45,8 @@
#include <QtCore/qurl.h>
#include <QtCore/qvariant.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -65,7 +67,7 @@ class QDeclarativeDebugObjectReference;
class QDeclarativeDebugFileReference;
class QDeclarativeDebugEngineReference;
class QDeclarativeEngineDebugPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeEngineDebug : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeEngineDebug : public QObject
{
Q_OBJECT
public:
@@ -111,7 +113,7 @@ private:
Q_DECLARE_PRIVATE(QDeclarativeEngineDebug)
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugWatch : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugWatch : public QObject
{
Q_OBJECT
public:
@@ -142,7 +144,7 @@ private:
int m_objectDebugId;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugPropertyWatch : public QDeclarativeDebugWatch
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugPropertyWatch : public QDeclarativeDebugWatch
{
Q_OBJECT
public:
@@ -155,7 +157,7 @@ private:
QString m_name;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugObjectExpressionWatch : public QDeclarativeDebugWatch
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugObjectExpressionWatch : public QDeclarativeDebugWatch
{
Q_OBJECT
public:
@@ -170,7 +172,7 @@ private:
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugQuery : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugQuery : public QObject
{
Q_OBJECT
public:
@@ -194,7 +196,7 @@ private:
State m_state;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugFileReference
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugFileReference
{
public:
QDeclarativeDebugFileReference();
@@ -215,7 +217,7 @@ private:
int m_columnNumber;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugEngineReference
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugEngineReference
{
public:
QDeclarativeDebugEngineReference();
@@ -232,7 +234,7 @@ private:
QString m_name;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugObjectReference
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugObjectReference
{
public:
QDeclarativeDebugObjectReference();
@@ -263,7 +265,7 @@ private:
QList<QDeclarativeDebugObjectReference> m_children;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugContextReference
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugContextReference
{
public:
QDeclarativeDebugContextReference();
@@ -284,7 +286,7 @@ private:
QList<QDeclarativeDebugContextReference> m_contexts;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugPropertyReference
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugPropertyReference
{
public:
QDeclarativeDebugPropertyReference();
@@ -309,7 +311,7 @@ private:
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugEnginesQuery : public QDeclarativeDebugQuery
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugEnginesQuery : public QDeclarativeDebugQuery
{
Q_OBJECT
public:
@@ -324,7 +326,7 @@ private:
QList<QDeclarativeDebugEngineReference> m_engines;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugRootContextQuery : public QDeclarativeDebugQuery
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugRootContextQuery : public QDeclarativeDebugQuery
{
Q_OBJECT
public:
@@ -339,7 +341,7 @@ private:
QDeclarativeDebugContextReference m_context;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugObjectQuery : public QDeclarativeDebugQuery
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugObjectQuery : public QDeclarativeDebugQuery
{
Q_OBJECT
public:
@@ -355,7 +357,7 @@ private:
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugExpressionQuery : public QDeclarativeDebugQuery
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugExpressionQuery : public QDeclarativeDebugQuery
{
Q_OBJECT
public:
diff --git a/src/declarative/debugger/qdeclarativedebugclient.cpp b/src/declarative/debugger/qdeclarativedebugclient.cpp
index 977e58e..f5c5751 100644
--- a/src/declarative/debugger/qdeclarativedebugclient.cpp
+++ b/src/declarative/debugger/qdeclarativedebugclient.cpp
@@ -93,7 +93,7 @@ QDeclarativeDebugConnectionPrivate::QDeclarativeDebugConnectionPrivate(QDeclarat
void QDeclarativeDebugConnectionPrivate::advertisePlugins()
{
- if (!q->isConnected() || !gotHello)
+ if (!q->isConnected())
return;
QPacket pack;
diff --git a/src/declarative/debugger/qdeclarativedebugclient_p.h b/src/declarative/debugger/qdeclarativedebugclient_p.h
index 8d1706d..47f87a5 100644
--- a/src/declarative/debugger/qdeclarativedebugclient_p.h
+++ b/src/declarative/debugger/qdeclarativedebugclient_p.h
@@ -44,6 +44,8 @@
#include <QtNetwork/qtcpsocket.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -51,7 +53,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeDebugConnectionPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugConnection : public QTcpSocket
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugConnection : public QTcpSocket
{
Q_OBJECT
Q_DISABLE_COPY(QDeclarativeDebugConnection)
@@ -67,7 +69,7 @@ private:
};
class QDeclarativeDebugClientPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugClient : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugClient : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeDebugClient)
diff --git a/src/declarative/debugger/qdeclarativedebuggerstatus_p.h b/src/declarative/debugger/qdeclarativedebuggerstatus_p.h
index a3ba40a..a1499d8 100644
--- a/src/declarative/debugger/qdeclarativedebuggerstatus_p.h
+++ b/src/declarative/debugger/qdeclarativedebuggerstatus_p.h
@@ -44,13 +44,15 @@
#include <QtCore/qobject.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class Q_DECLARATIVE_EXPORT QDeclarativeDebuggerStatus
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebuggerStatus
{
public:
virtual ~QDeclarativeDebuggerStatus();
diff --git a/src/declarative/debugger/qdeclarativedebughelper.cpp b/src/declarative/debugger/qdeclarativedebughelper.cpp
index 207ad2b..b003c12 100644
--- a/src/declarative/debugger/qdeclarativedebughelper.cpp
+++ b/src/declarative/debugger/qdeclarativedebughelper.cpp
@@ -48,6 +48,7 @@
#include <private/qdeclarativeengine_p.h>
#include <private/qabstractanimation_p.h>
+#include <private/qdeclarativeengine_p.h>
QT_BEGIN_NAMESPACE
@@ -63,4 +64,11 @@ void QDeclarativeDebugHelper::setAnimationSlowDownFactor(qreal factor)
timer->setSlowdownFactor(factor);
}
+void QDeclarativeDebugHelper::enableDebugging() {
+ if (!QDeclarativeEnginePrivate::qml_debugging_enabled) {
+ qWarning("Qml debugging is enabled. Only use this in a safe environment!");
+ }
+ QDeclarativeEnginePrivate::qml_debugging_enabled = true;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebughelper_p.h b/src/declarative/debugger/qdeclarativedebughelper_p.h
index c9cb839..fcd7115 100644
--- a/src/declarative/debugger/qdeclarativedebughelper_p.h
+++ b/src/declarative/debugger/qdeclarativedebughelper_p.h
@@ -44,6 +44,8 @@
#include <QtCore/qglobal.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -58,6 +60,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeDebugHelper
public:
static QScriptEngine *getScriptEngine(QDeclarativeEngine *engine);
static void setAnimationSlowDownFactor(qreal factor);
+
+ // Enables remote debugging functionality
+ // Only use this for debugging in a safe environment!
+ static void enableDebugging();
};
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index b98cd5d..8c86ae8 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -42,6 +42,7 @@
#include "private/qdeclarativedebugservice_p.h"
#include "private/qpacketprotocol_p.h"
+#include "private/qdeclarativeengine_p.h"
#include <QtCore/qdebug.h>
#include <QtNetwork/qtcpserver.h>
@@ -204,13 +205,19 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
bool ok = false;
// format: qmljsdebugger=port:3768[,block]
- if (!appD->qmljsDebugArguments.isEmpty()) {
+ if (!appD->qmljsDebugArgumentsString().isEmpty()) {
+ if (!QDeclarativeEnginePrivate::qml_debugging_enabled) {
+ qWarning() << QString::fromLatin1("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
+ "Debugging has not been enabled.").arg(
+ appD->qmljsDebugArgumentsString()).toAscii().constData();
+ return 0;
+ }
- if (appD->qmljsDebugArguments.indexOf(QLatin1String("port:")) == 0) {
- int separatorIndex = appD->qmljsDebugArguments.indexOf(QLatin1Char(','));
- port = appD->qmljsDebugArguments.mid(5, separatorIndex - 5).toInt(&ok);
+ if (appD->qmljsDebugArgumentsString().indexOf(QLatin1String("port:")) == 0) {
+ int separatorIndex = appD->qmljsDebugArgumentsString().indexOf(QLatin1Char(','));
+ port = appD->qmljsDebugArgumentsString().mid(5, separatorIndex - 5).toInt(&ok);
}
- block = appD->qmljsDebugArguments.contains(QLatin1String("block"));
+ block = appD->qmljsDebugArgumentsString().contains(QLatin1String("block"));
if (ok) {
server = new QDeclarativeDebugServer(port);
@@ -221,7 +228,7 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
} else {
qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
"Format is -qmljsdebugger=port:<port>[,block]").arg(
- appD->qmljsDebugArguments).toAscii().constData());
+ appD->qmljsDebugArgumentsString()).toAscii().constData());
}
}
#endif
diff --git a/src/declarative/debugger/qdeclarativedebugservice_p.h b/src/declarative/debugger/qdeclarativedebugservice_p.h
index 0cadbe5..da27b9a 100644
--- a/src/declarative/debugger/qdeclarativedebugservice_p.h
+++ b/src/declarative/debugger/qdeclarativedebugservice_p.h
@@ -44,6 +44,8 @@
#include <QtCore/qobject.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -51,7 +53,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeDebugServicePrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDebugService : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDebugService : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeDebugService)
diff --git a/src/declarative/debugger/qpacketprotocol_p.h b/src/declarative/debugger/qpacketprotocol_p.h
index cfdce4e..d153833 100644
--- a/src/declarative/debugger/qpacketprotocol_p.h
+++ b/src/declarative/debugger/qpacketprotocol_p.h
@@ -45,6 +45,8 @@
#include <QtCore/qobject.h>
#include <QtCore/qdatastream.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -57,7 +59,7 @@ class QPacket;
class QPacketAutoSend;
class QPacketProtocolPrivate;
-class Q_DECLARATIVE_EXPORT QPacketProtocol : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QPacketProtocol : public QObject
{
Q_OBJECT
public:
@@ -87,7 +89,7 @@ private:
};
-class Q_DECLARATIVE_EXPORT QPacket : public QDataStream
+class Q_DECLARATIVE_PRIVATE_EXPORT QPacket : public QDataStream
{
public:
QPacket();
@@ -104,7 +106,7 @@ protected:
QBuffer * buf;
};
-class Q_DECLARATIVE_EXPORT QPacketAutoSend : public QPacket
+class Q_DECLARATIVE_PRIVATE_EXPORT QPacketAutoSend : public QPacket
{
public:
virtual ~QPacketAutoSend();
diff --git a/src/declarative/graphicsitems/qdeclarativeanchors.cpp b/src/declarative/graphicsitems/qdeclarativeanchors.cpp
index 26fb97f..c96ca0e 100644
--- a/src/declarative/graphicsitems/qdeclarativeanchors.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeanchors.cpp
@@ -272,7 +272,7 @@ void QDeclarativeAnchorsPrivate::addDepend(QGraphicsObject *item)
} else if(itemPrivate->isWidget) {
Q_Q(QDeclarativeAnchors);
QGraphicsWidget *widget = static_cast<QGraphicsWidget *>(item);
- QObject::connect(widget, SIGNAL(destroyed(QObject *)), q, SLOT(_q_widgetDestroyed(QObject *)));
+ QObject::connect(widget, SIGNAL(destroyed(QObject*)), q, SLOT(_q_widgetDestroyed(QObject*)));
QObject::connect(widget, SIGNAL(geometryChanged()), q, SLOT(_q_widgetGeometryChanged()));
}
}
@@ -289,7 +289,7 @@ void QDeclarativeAnchorsPrivate::remDepend(QGraphicsObject *item)
} else if(itemPrivate->isWidget) {
Q_Q(QDeclarativeAnchors);
QGraphicsWidget *widget = static_cast<QGraphicsWidget *>(item);
- QObject::disconnect(widget, SIGNAL(destroyed(QObject *)), q, SLOT(_q_widgetDestroyed(QObject *)));
+ QObject::disconnect(widget, SIGNAL(destroyed(QObject*)), q, SLOT(_q_widgetDestroyed(QObject*)));
QObject::disconnect(widget, SIGNAL(geometryChanged()), q, SLOT(_q_widgetGeometryChanged()));
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativeanchors_p.h b/src/declarative/graphicsitems/qdeclarativeanchors_p.h
index c929797..8223b17 100644
--- a/src/declarative/graphicsitems/qdeclarativeanchors_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeanchors_p.h
@@ -48,6 +48,8 @@
#include <QtCore/QObject>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -56,7 +58,7 @@ QT_MODULE(Declarative)
class QDeclarativeAnchorsPrivate;
class QDeclarativeAnchorLine;
-class Q_DECLARATIVE_EXPORT QDeclarativeAnchors : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAnchors : public QObject
{
Q_OBJECT
diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
index c58a08d..649c8fb 100644
--- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
@@ -361,6 +361,8 @@ QDeclarativeScaleGrid *QDeclarativeBorderImage::border()
\o BorderImage.Repeat - Tile the image until there is no more space. May crop the last image.
\o BorderImage.Round - Like Repeat, but scales the images down to ensure that the last image is not cropped.
\endlist
+
+ The default tile mode for each property is BorderImage.Stretch.
*/
QDeclarativeBorderImage::TileMode QDeclarativeBorderImage::horizontalTileMode() const
{
diff --git a/src/declarative/graphicsitems/qdeclarativeevents.cpp b/src/declarative/graphicsitems/qdeclarativeevents.cpp
index dbfb3fb..61fd562 100644
--- a/src/declarative/graphicsitems/qdeclarativeevents.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeevents.cpp
@@ -113,11 +113,13 @@ Item {
\qmlclass MouseEvent QDeclarativeMouseEvent
\since 4.7
\ingroup qml-event-elements
-
+
\brief The MouseEvent object provides information about a mouse event.
- The position of the mouse can be found via the x and y properties.
- The button that caused the event is available via the button property.
+ The position of the mouse can be found via the \l x and \l y properties.
+ The button that caused the event is available via the \l button property.
+
+ \sa MouseArea
*/
/*!
@@ -129,7 +131,7 @@ Item {
\qmlproperty int MouseEvent::x
\qmlproperty int MouseEvent::y
- These properties hold the position of the mouse event.
+ These properties hold the coordinates of the position supplied by the mouse event.
*/
@@ -186,7 +188,7 @@ Item {
It contains a bitwise combination of:
\list
\o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
+ \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
\o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
\o Qt.AltModifier - An Alt key on the keyboard is pressed.
\o Qt.MetaModifier - A Meta key on the keyboard is pressed.
@@ -195,9 +197,12 @@ Item {
For example, to react to a Shift key + Left mouse button click:
\qml
-MouseArea {
- onClicked: { if (mouse.button == Qt.LeftButton && mouse.modifiers & Qt.ShiftModifier) doSomething(); }
-}
+ MouseArea {
+ onClicked: {
+ if (mouse.button == Qt.LeftButton && mouse.modifiers & Qt.ShiftModifier)
+ doSomething();
+ }
+ }
\endqml
*/
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index 7c43e5b..0f786e3 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -53,9 +53,6 @@ QT_BEGIN_NAMESPACE
// before we perform a flick.
static const int FlickThreshold = 20;
-// Really slow flicks can be annoying.
-static const int MinimumFlickVelocity = 75;
-
QDeclarativeFlickableVisibleArea::QDeclarativeFlickableVisibleArea(QDeclarativeFlickable *parent)
: QObject(parent), flickable(parent), m_xPosition(0.), m_widthRatio(0.)
, m_yPosition(0.), m_heightRatio(0.)
@@ -85,7 +82,11 @@ qreal QDeclarativeFlickableVisibleArea::yPosition() const
void QDeclarativeFlickableVisibleArea::updateVisible()
{
QDeclarativeFlickablePrivate *p = static_cast<QDeclarativeFlickablePrivate *>(QGraphicsItemPrivate::get(flickable));
- bool pageChange = false;
+
+ bool changeX = false;
+ bool changeY = false;
+ bool changeWidth = false;
+ bool changeHeight = false;
// Vertical
const qreal viewheight = flickable->height();
@@ -95,11 +96,11 @@ void QDeclarativeFlickableVisibleArea::updateVisible()
if (pageSize != m_heightRatio) {
m_heightRatio = pageSize;
- pageChange = true;
+ changeHeight = true;
}
if (pagePos != m_yPosition) {
m_yPosition = pagePos;
- pageChange = true;
+ changeY = true;
}
// Horizontal
@@ -110,14 +111,21 @@ void QDeclarativeFlickableVisibleArea::updateVisible()
if (pageSize != m_widthRatio) {
m_widthRatio = pageSize;
- pageChange = true;
+ changeWidth = true;
}
if (pagePos != m_xPosition) {
m_xPosition = pagePos;
- pageChange = true;
+ changeX = true;
}
- if (pageChange)
- emit pageChanged();
+
+ if (changeX)
+ emit xPositionChanged(m_xPosition);
+ if (changeY)
+ emit yPositionChanged(m_yPosition);
+ if (changeWidth)
+ emit widthRatioChanged(m_widthRatio);
+ if (changeHeight)
+ emit heightRatioChanged(m_heightRatio);
}
@@ -466,15 +474,15 @@ QDeclarativeFlickable::~QDeclarativeFlickable()
qreal QDeclarativeFlickable::contentX() const
{
Q_D(const QDeclarativeFlickable);
- return -d->hData.move.value();
+ return -d->contentItem->x();
}
void QDeclarativeFlickable::setContentX(qreal pos)
{
Q_D(QDeclarativeFlickable);
- pos = qRound(pos);
d->timeline.reset(d->hData.move);
d->vTime = d->timeline.time();
+ movementXEnding();
if (-pos != d->hData.move.value()) {
d->hData.move.setValue(-pos);
viewportMoved();
@@ -484,15 +492,15 @@ void QDeclarativeFlickable::setContentX(qreal pos)
qreal QDeclarativeFlickable::contentY() const
{
Q_D(const QDeclarativeFlickable);
- return -d->vData.move.value();
+ return -d->contentItem->y();
}
void QDeclarativeFlickable::setContentY(qreal pos)
{
Q_D(QDeclarativeFlickable);
- pos = qRound(pos);
d->timeline.reset(d->vData.move);
d->vTime = d->timeline.time();
+ movementYEnding();
if (-pos != d->vData.move.value()) {
d->vData.move.setValue(-pos);
viewportMoved();
@@ -979,8 +987,8 @@ void QDeclarativeFlickable::viewportMoved()
{
Q_D(QDeclarativeFlickable);
- qreal prevY = d->lastFlickablePosition.x();
- qreal prevX = d->lastFlickablePosition.y();
+ qreal prevX = d->lastFlickablePosition.x();
+ qreal prevY = d->lastFlickablePosition.y();
d->velocityTimeline.clear();
if (d->pressed || d->calcVelocity) {
int elapsed = QDeclarativeItemPrivate::restart(d->velocityTime);
@@ -1001,7 +1009,7 @@ void QDeclarativeFlickable::viewportMoved()
}
}
- d->lastFlickablePosition = QPointF(d->vData.move.value(), d->hData.move.value());
+ d->lastFlickablePosition = QPointF(d->hData.move.value(), d->vData.move.value());
d->vTime = d->timeline.time();
d->updateBeginningEnd();
@@ -1021,6 +1029,13 @@ void QDeclarativeFlickable::geometryChanged(const QRectF &newGeometry,
d->contentItem->setWidth(width());
emit contentWidthChanged();
}
+ // Make sure that we're entirely in view.
+ if (!d->pressed && !d->movingHorizontally && !d->movingVertically) {
+ int oldDuration = d->fixupDuration;
+ d->fixupDuration = 0;
+ d->fixupX();
+ d->fixupDuration = oldDuration;
+ }
}
if (newGeometry.height() != oldGeometry.height()) {
if (yflick())
@@ -1029,6 +1044,13 @@ void QDeclarativeFlickable::geometryChanged(const QRectF &newGeometry,
d->contentItem->setHeight(height());
emit contentHeightChanged();
}
+ // Make sure that we're entirely in view.
+ if (!d->pressed && !d->movingHorizontally && !d->movingVertically) {
+ int oldDuration = d->fixupDuration;
+ d->fixupDuration = 0;
+ d->fixupY();
+ d->fixupDuration = oldDuration;
+ }
}
if (changed)
@@ -1150,19 +1172,18 @@ void QDeclarativeFlickable::setBoundsBehavior(BoundsBehavior b)
\qmlproperty real Flickable::contentWidth
\qmlproperty real Flickable::contentHeight
- The dimensions of the content (the surface controlled by Flickable). Typically this
- should be set to the combined size of the items placed in the Flickable. Note this
- can be set automatically using \l {Item::childrenRect.width}{childrenRect.width}
- and \l {Item::childrenRect.height}{childrenRect.height}. For example:
+ The dimensions of the content (the surface controlled by Flickable).
+ This should typically be set to the combined size of the items placed in the
+ Flickable.
- \code
- Flickable {
- width: 320; height: 480
- contentWidth: childrenRect.width; contentHeight: childrenRect.height
+ The following snippet shows how these properties are used to display
+ an image that is larger than the Flickable item itself:
- Image { id: image; source: "bigImage.png" }
- }
- \endcode
+ \snippet doc/src/snippets/declarative/flickable.qml document
+
+ In some cases, the the content dimensions can be automatically set
+ using the \l {Item::childrenRect.width}{childrenRect.width}
+ and \l {Item::childrenRect.height}{childrenRect.height} properties.
*/
qreal QDeclarativeFlickable::contentWidth() const
{
@@ -1484,6 +1505,15 @@ void QDeclarativeFlickable::movementStarting()
void QDeclarativeFlickable::movementEnding()
{
Q_D(QDeclarativeFlickable);
+ movementXEnding();
+ movementYEnding();
+ d->hData.smoothVelocity.setValue(0);
+ d->vData.smoothVelocity.setValue(0);
+}
+
+void QDeclarativeFlickable::movementXEnding()
+{
+ Q_D(QDeclarativeFlickable);
if (d->flickingHorizontally) {
d->flickingHorizontally = false;
emit flickingChanged();
@@ -1491,13 +1521,6 @@ void QDeclarativeFlickable::movementEnding()
if (!d->flickingVertically)
emit flickEnded();
}
- if (d->flickingVertically) {
- d->flickingVertically = false;
- emit flickingChanged();
- emit flickingVerticallyChanged();
- if (!d->flickingHorizontally)
- emit flickEnded();
- }
if (!d->pressed && !d->stealMouse) {
if (d->movingHorizontally) {
d->movingHorizontally = false;
@@ -1507,6 +1530,20 @@ void QDeclarativeFlickable::movementEnding()
if (!d->movingVertically)
emit movementEnded();
}
+ }
+}
+
+void QDeclarativeFlickable::movementYEnding()
+{
+ Q_D(QDeclarativeFlickable);
+ if (d->flickingVertically) {
+ d->flickingVertically = false;
+ emit flickingChanged();
+ emit flickingVerticallyChanged();
+ if (!d->flickingHorizontally)
+ emit flickEnded();
+ }
+ if (!d->pressed && !d->stealMouse) {
if (d->movingVertically) {
d->movingVertically = false;
d->vMoved = false;
@@ -1516,8 +1553,6 @@ void QDeclarativeFlickable::movementEnding()
emit movementEnded();
}
}
- d->hData.smoothVelocity.setValue(0);
- d->vData.smoothVelocity.setValue(0);
}
void QDeclarativeFlickablePrivate::updateVelocity()
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p.h
index 44f2bcf..6e4d8ed 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeflickable_p.h
@@ -163,7 +163,6 @@ Q_SIGNALS:
void horizontalVelocityChanged();
void verticalVelocityChanged();
void isAtBoundaryChanged();
- void pageChanged();
void flickableDirectionChanged();
void interactiveChanged();
void boundsBehaviorChanged();
@@ -191,6 +190,8 @@ protected Q_SLOTS:
void movementEnding();
protected:
+ void movementXEnding();
+ void movementYEnding();
virtual qreal minXExtent() const;
virtual qreal minYExtent() const;
virtual qreal maxXExtent() const;
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
index beee741..92cf748 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
@@ -66,6 +66,9 @@
QT_BEGIN_NAMESPACE
+// Really slow flicks can be annoying.
+const qreal MinimumFlickVelocity = 75.0;
+
class QDeclarativeFlickableVisibleArea;
class QDeclarativeFlickablePrivate : public QDeclarativeItemPrivate, public QDeclarativeItemChangeListener
{
@@ -182,10 +185,10 @@ class QDeclarativeFlickableVisibleArea : public QObject
{
Q_OBJECT
- Q_PROPERTY(qreal xPosition READ xPosition NOTIFY pageChanged)
- Q_PROPERTY(qreal yPosition READ yPosition NOTIFY pageChanged)
- Q_PROPERTY(qreal widthRatio READ widthRatio NOTIFY pageChanged)
- Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY pageChanged)
+ Q_PROPERTY(qreal xPosition READ xPosition NOTIFY xPositionChanged)
+ Q_PROPERTY(qreal yPosition READ yPosition NOTIFY yPositionChanged)
+ Q_PROPERTY(qreal widthRatio READ widthRatio NOTIFY widthRatioChanged)
+ Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY heightRatioChanged)
public:
QDeclarativeFlickableVisibleArea(QDeclarativeFlickable *parent=0);
@@ -198,7 +201,10 @@ public:
void updateVisible();
signals:
- void pageChanged();
+ void xPositionChanged(qreal xPosition);
+ void yPositionChanged(qreal yPosition);
+ void widthRatioChanged(qreal widthRatio);
+ void heightRatioChanged(qreal heightRatio);
private:
QDeclarativeFlickable *flickable;
diff --git a/src/declarative/graphicsitems/qdeclarativeflipable.cpp b/src/declarative/graphicsitems/qdeclarativeflipable.cpp
index 4ecf87b..f118a85 100644
--- a/src/declarative/graphicsitems/qdeclarativeflipable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflipable.cpp
@@ -83,27 +83,28 @@ public:
\section1 Example Usage
- \beginfloatright
- \inlineimage flipable.gif
- \endfloat
-
The following example shows a Flipable item that flips whenever it is
clicked, rotating about the y-axis.
- The \l Rotation element is used to specify the angle and axis of the flip.
- When \c flipped is true, the item changes to the "back" state, where
- the angle is changed to 180 degrees to produce the flipping effect.
+ This flipable item has a \c flipped boolean property that is toggled
+ whenever the MouseArea within the flipable is clicked. When
+ \c flipped is true, the item changes to the "back" state; in this
+ state, the \c angle of the \l Rotation item is changed to 180
+ degrees to produce the flipping effect. When \c flipped is false, the
+ item reverts to the default state, in which the \c angle value is 0.
+
+ \snippet doc/src/snippets/declarative/flipable/flipable.qml 0
- \clearfloat
- \snippet doc/src/snippets/declarative/flipable/flipable-snippet.qml 0
+ \image flipable.gif
- The \l Transition creates the animation that changes the angle over the
- duration of one second. When the item changes between its "back" and
+ The \l Transition creates the animation that changes the angle over
+ four seconds. When the item changes between its "back" and
default states, the NumberAnimation animates the angle between
its old and new values.
- See the \l {QML States} and \l {QML Animation} documentation for more
- details on state changes and how animations work within transitions.
+ See \l {QML States} for details on state changes and the default
+ state, and \l {QML Animation} for more information on how animations
+ work within transitions.
\sa {declarative/ui-components/flipable}{Flipable example}
*/
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 8216ab7..6f38f63 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -112,7 +112,7 @@ public:
, bufferMode(BufferBefore | BufferAfter), snapMode(QDeclarativeGridView::NoSnap)
, ownModel(false), wrap(false), autoHighlight(true)
, fixCurrentVisibility(false), lazyRelease(false), layoutScheduled(false)
- , deferredRelease(false), haveHighlightRange(false) {}
+ , deferredRelease(false), haveHighlightRange(false), currentIndexCleared(false) {}
void init();
void clear();
@@ -218,7 +218,14 @@ public:
return visibleItems.last()->rowPos() + rows * rowSize();
}
} else {
- return (modelIndex / columns) * rowSize();
+ qreal pos = (modelIndex / columns) * rowSize();
+ if (header) {
+ qreal headerSize = flow == QDeclarativeGridView::LeftToRight
+ ? header->item->height()
+ : header->item->width();
+ pos += headerSize;
+ }
+ return pos;
}
return 0;
}
@@ -385,6 +392,7 @@ public:
bool layoutScheduled : 1;
bool deferredRelease : 1;
bool haveHighlightRange : 1;
+ bool currentIndexCleared : 1;
};
void QDeclarativeGridViewPrivate::init()
@@ -723,6 +731,8 @@ void QDeclarativeGridViewPrivate::createHighlight()
QDeclarative_setParent_noEvent(item, q->contentItem());
item->setParentItem(q->contentItem());
highlight = new FxGridItem(item, q);
+ if (currentItem)
+ highlight->setPosition(currentItem->colPos(), currentItem->rowPos());
highlightXAnimator = new QSmoothedAnimation(q);
highlightXAnimator->target = QDeclarativeProperty(highlight->item, QLatin1String("x"));
highlightXAnimator->userDuration = highlightMoveDuration;
@@ -764,8 +774,11 @@ void QDeclarativeGridViewPrivate::updateCurrent(int modelIndex)
currentItem->attached->setIsCurrentItem(false);
releaseItem(currentItem);
currentItem = 0;
- currentIndex = -1;
+ currentIndex = modelIndex;
+ emit q->currentIndexChanged();
updateHighlight();
+ } else if (currentIndex != modelIndex) {
+ currentIndex = modelIndex;
emit q->currentIndexChanged();
}
return;
@@ -1204,7 +1217,7 @@ void QDeclarativeGridView::setModel(const QVariant &model)
disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
}
d->clear();
@@ -1229,7 +1242,7 @@ void QDeclarativeGridView::setModel(const QVariant &model)
d->bufferMode = QDeclarativeGridViewPrivate::BufferBefore | QDeclarativeGridViewPrivate::BufferAfter;
if (isComponentComplete()) {
refill();
- if (d->currentIndex >= d->model->count() || d->currentIndex < 0) {
+ if ((d->currentIndex >= d->model->count() || d->currentIndex < 0) && !d->currentIndexCleared) {
setCurrentIndex(0);
} else {
d->moveReason = QDeclarativeGridViewPrivate::SetIndex;
@@ -1245,7 +1258,7 @@ void QDeclarativeGridView::setModel(const QVariant &model)
connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
emit countChanged();
}
@@ -1317,7 +1330,8 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate)
\qmlproperty Item GridView::currentItem
The \c currentIndex property holds the index of the current item, and
- \c currentItem holds the current item.
+ \c currentItem holds the current item. Setting the currentIndex to -1
+ will clear the highlight and set currentItem to null.
If highlightFollowsCurrentItem is \c true, setting either of these
properties will smoothly scroll the GridView so that the current
@@ -1337,10 +1351,13 @@ void QDeclarativeGridView::setCurrentIndex(int index)
Q_D(QDeclarativeGridView);
if (d->requestedIndex >= 0) // currently creating item
return;
- if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) {
+ d->currentIndexCleared = (index == -1);
+ if (index == d->currentIndex)
+ return;
+ if (isComponentComplete() && d->isValid()) {
d->moveReason = QDeclarativeGridViewPrivate::SetIndex;
d->updateCurrent(index);
- } else if (index != d->currentIndex) {
+ } else {
d->currentIndex = index;
emit currentIndexChanged();
}
@@ -1815,6 +1832,8 @@ void QDeclarativeGridView::viewportMoved()
{
Q_D(QDeclarativeGridView);
QDeclarativeFlickable::viewportMoved();
+ if (!d->itemCount)
+ return;
d->lazyRelease = true;
if (d->flickingHorizontally || d->flickingVertically) {
if (yflick()) {
@@ -1976,22 +1995,25 @@ void QDeclarativeGridView::keyPressEvent(QKeyEvent *event)
Move the currentIndex up one item in the view.
The current index will wrap if keyNavigationWraps is true and it
- is currently at the end.
+ is currently at the end. This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeGridView::moveCurrentIndexUp()
{
Q_D(QDeclarativeGridView);
+ const int count = d->model ? d->model->count() : 0;
+ if (!count)
+ return;
if (d->flow == QDeclarativeGridView::LeftToRight) {
if (currentIndex() >= d->columns || d->wrap) {
int index = currentIndex() - d->columns;
- setCurrentIndex(index >= 0 ? index : d->model->count()-1);
+ setCurrentIndex((index >= 0 && index < count) ? index : count-1);
}
} else {
if (currentIndex() > 0 || d->wrap) {
int index = currentIndex() - 1;
- setCurrentIndex(index >= 0 ? index : d->model->count()-1);
+ setCurrentIndex((index >= 0 && index < count) ? index : count-1);
}
}
}
@@ -2001,22 +2023,25 @@ void QDeclarativeGridView::moveCurrentIndexUp()
Move the currentIndex down one item in the view.
The current index will wrap if keyNavigationWraps is true and it
- is currently at the end.
+ is currently at the end. This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeGridView::moveCurrentIndexDown()
{
Q_D(QDeclarativeGridView);
+ const int count = d->model ? d->model->count() : 0;
+ if (!count)
+ return;
if (d->flow == QDeclarativeGridView::LeftToRight) {
- if (currentIndex() < d->model->count() - d->columns || d->wrap) {
+ if (currentIndex() < count - d->columns || d->wrap) {
int index = currentIndex()+d->columns;
- setCurrentIndex(index < d->model->count() ? index : 0);
+ setCurrentIndex((index >= 0 && index < count) ? index : 0);
}
} else {
- if (currentIndex() < d->model->count() - 1 || d->wrap) {
+ if (currentIndex() < count - 1 || d->wrap) {
int index = currentIndex() + 1;
- setCurrentIndex(index < d->model->count() ? index : 0);
+ setCurrentIndex((index >= 0 && index < count) ? index : 0);
}
}
}
@@ -2026,22 +2051,25 @@ void QDeclarativeGridView::moveCurrentIndexDown()
Move the currentIndex left one item in the view.
The current index will wrap if keyNavigationWraps is true and it
- is currently at the end.
+ is currently at the end. This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeGridView::moveCurrentIndexLeft()
{
Q_D(QDeclarativeGridView);
+ const int count = d->model ? d->model->count() : 0;
+ if (!count)
+ return;
if (d->flow == QDeclarativeGridView::LeftToRight) {
if (currentIndex() > 0 || d->wrap) {
int index = currentIndex() - 1;
- setCurrentIndex(index >= 0 ? index : d->model->count()-1);
+ setCurrentIndex((index >= 0 && index < count) ? index : count-1);
}
} else {
if (currentIndex() >= d->columns || d->wrap) {
int index = currentIndex() - d->columns;
- setCurrentIndex(index >= 0 ? index : d->model->count()-1);
+ setCurrentIndex((index >= 0 && index < count) ? index : count-1);
}
}
}
@@ -2051,22 +2079,25 @@ void QDeclarativeGridView::moveCurrentIndexLeft()
Move the currentIndex right one item in the view.
The current index will wrap if keyNavigationWraps is true and it
- is currently at the end.
+ is currently at the end. This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeGridView::moveCurrentIndexRight()
{
Q_D(QDeclarativeGridView);
+ const int count = d->model ? d->model->count() : 0;
+ if (!count)
+ return;
if (d->flow == QDeclarativeGridView::LeftToRight) {
- if (currentIndex() < d->model->count() - 1 || d->wrap) {
+ if (currentIndex() < count - 1 || d->wrap) {
int index = currentIndex() + 1;
- setCurrentIndex(index < d->model->count() ? index : 0);
+ setCurrentIndex((index >= 0 && index < count) ? index : 0);
}
} else {
- if (currentIndex() < d->model->count() - d->columns || d->wrap) {
+ if (currentIndex() < count - d->columns || d->wrap) {
int index = currentIndex()+d->columns;
- setCurrentIndex(index < d->model->count() ? index : 0);
+ setCurrentIndex((index >= 0 && index < count) ? index : 0);
}
}
}
@@ -2194,7 +2225,7 @@ void QDeclarativeGridView::componentComplete()
if (d->isValid()) {
refill();
d->moveReason = QDeclarativeGridViewPrivate::SetIndex;
- if (d->currentIndex < 0)
+ if (d->currentIndex < 0 && !d->currentIndexCleared)
d->updateCurrent(0);
else
d->updateCurrent(d->currentIndex);
@@ -2269,13 +2300,13 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count)
return;
if (!d->visibleItems.count() || d->model->count() <= 1) {
d->scheduleLayout();
- if (d->currentIndex >= modelIndex) {
+ if (d->itemCount && d->currentIndex >= modelIndex) {
// adjust current item index
d->currentIndex += count;
if (d->currentItem)
d->currentItem->index = d->currentIndex;
emit currentIndexChanged();
- } else if (d->currentIndex < 0) {
+ } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) {
d->updateCurrent(0);
}
d->itemCount += count;
@@ -2383,7 +2414,7 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count)
}
}
- if (d->currentIndex >= modelIndex) {
+ if (d->itemCount && d->currentIndex >= modelIndex) {
// adjust current item index
d->currentIndex += count;
if (d->currentItem) {
@@ -2470,8 +2501,8 @@ void QDeclarativeGridView::itemsRemoved(int modelIndex, int count)
if (removedVisible && d->visibleItems.isEmpty()) {
d->timeline.clear();
- d->setPosition(0);
if (d->itemCount == 0) {
+ d->setPosition(0);
d->updateHeader();
d->updateFooter();
update();
diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp
index 08d237f..3b08a9b 100644
--- a/src/declarative/graphicsitems/qdeclarativeimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp
@@ -259,8 +259,10 @@ void QDeclarativeImage::setFillMode(FillMode mode)
\qmlproperty real Image::paintedHeight
These properties hold the size of the image that is actually painted.
- In most cases it is the same as \c width and \c height, but when using a \c fillMode like
- \c PreserveAspectFit \c paintedWidth or \c paintedHeight can be smaller than \c width and \c height.
+ In most cases it is the same as \c width and \c height, but when using a
+ \c fillMode \c PreserveAspectFit or \c fillMode \c PreserveAspectCrop
+ \c paintedWidth or \c paintedHeight can be smaller or larger than
+ \c width and \c height of the Image element.
*/
qreal QDeclarativeImage::paintedWidth() const
{
@@ -288,23 +290,25 @@ qreal QDeclarativeImage::paintedHeight() const
Use this status to provide an update or respond to the status change in some way.
For example, you could:
- \e {Trigger a state change:}
- \qml
- State { name: 'loaded'; when: image.status = Image.Ready }
+ \list
+ \o Trigger a state change:
+ \qml
+ State { name: 'loaded'; when: image.status == Image.Ready }
\endqml
- \e {Implement an \c onStatusChanged signal handler:}
- \qml
+ \o Implement an \c onStatusChanged signal handler:
+ \qml
Image {
id: image
onStatusChanged: if (image.status == Image.Ready) console.log('Loaded')
}
\endqml
- \e {Bind to the status value:}
+ \o Bind to the status value:
\qml
- Text { text: image.status != Image.Ready ? 'Not Loaded' : 'Loaded' }
+ Text { text: image.status == Image.Ready ? 'Loaded' : 'Not loaded' }
\endqml
+ \endlist
\sa progress
*/
@@ -397,6 +401,19 @@ void QDeclarativeImage::updatePaintedGeometry()
if (heightValid() && !widthValid()) {
setImplicitWidth(d->paintedWidth);
}
+ } else if (d->fillMode == PreserveAspectCrop) {
+ if (!d->pix.width() || !d->pix.height())
+ return;
+ qreal widthScale = width() / qreal(d->pix.width());
+ qreal heightScale = height() / qreal(d->pix.height());
+ if (widthScale < heightScale) {
+ widthScale = heightScale;
+ } else if(heightScale < widthScale) {
+ heightScale = widthScale;
+ }
+
+ d->paintedHeight = heightScale * qreal(d->pix.height());
+ d->paintedWidth = widthScale * qreal(d->pix.width());
} else {
d->paintedWidth = width();
d->paintedHeight = height();
@@ -410,6 +427,12 @@ void QDeclarativeImage::geometryChanged(const QRectF &newGeometry, const QRectF
updatePaintedGeometry();
}
+QRectF QDeclarativeImage::boundingRect() const
+{
+ Q_D(const QDeclarativeImage);
+ return QRectF(0, 0, qMax(d->mWidth, d->paintedWidth), qMax(d->mHeight, d->paintedHeight));
+}
+
/*!
\qmlproperty url Image::source
@@ -494,7 +517,7 @@ void QDeclarativeImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWi
}
if (clip()) {
p->save();
- p->setClipRect(boundingRect(), Qt::IntersectClip);
+ p->setClipRect(QRectF(0, 0, d->mWidth, d->mHeight), Qt::IntersectClip);
}
scale.scale(widthScale, heightScale);
QTransform old = p->transform();
diff --git a/src/declarative/graphicsitems/qdeclarativeimage_p.h b/src/declarative/graphicsitems/qdeclarativeimage_p.h
index c8bb30b..0e8034e 100644
--- a/src/declarative/graphicsitems/qdeclarativeimage_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeimage_p.h
@@ -76,6 +76,7 @@ public:
qreal paintedHeight() const;
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+ QRectF boundingRect() const;
Q_SIGNALS:
void fillModeChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
index 02b4807..c3bac2d 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
@@ -46,8 +46,6 @@
#include <qdeclarativeinfo.h>
#include <qdeclarativepixmapcache_p.h>
-#include <QFile>
-
QT_BEGIN_NAMESPACE
QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, QDeclarativeItem *parent)
@@ -115,6 +113,7 @@ void QDeclarativeImageBase::setSourceSize(const QSize& size)
return;
d->sourcesize = size;
+ d->explicitSourceSize = true;
emit sourceSizeChanged();
if (isComponentComplete())
load();
@@ -123,7 +122,10 @@ void QDeclarativeImageBase::setSourceSize(const QSize& size)
QSize QDeclarativeImageBase::sourceSize() const
{
Q_D(const QDeclarativeImageBase);
- return d->sourcesize.isValid() ? d->sourcesize : QSize(implicitWidth(),implicitHeight());
+
+ int width = d->sourcesize.width();
+ int height = d->sourcesize.height();
+ return QSize(width != -1 ? width : implicitWidth(), height != -1 ? height : implicitHeight());
}
void QDeclarativeImageBase::load()
@@ -141,7 +143,7 @@ void QDeclarativeImageBase::load()
pixmapChange();
update();
} else {
- d->pix.load(qmlEngine(this), d->url, d->sourcesize, d->async);
+ d->pix.load(qmlEngine(this), d->url, d->explicitSourceSize ? sourceSize() : QSize(), d->async);
if (d->pix.isLoading()) {
d->progress = 0.0;
@@ -186,11 +188,8 @@ void QDeclarativeImageBase::requestFinished()
setImplicitWidth(d->pix.width());
setImplicitHeight(d->pix.height());
- if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height()) {
- d->sourcesize.setWidth(d->pix.width());
- d->sourcesize.setHeight(d->pix.height());
+ if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
emit sourceSizeChanged();
- }
if (d->status != oldStatus)
emit statusChanged(d->status);
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
index aee8b28..3d23ba9 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
@@ -69,6 +69,7 @@ public:
QDeclarativeImageBasePrivate()
: status(QDeclarativeImageBase::Null),
progress(0.0),
+ explicitSourceSize(false),
async(false)
{
QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
@@ -79,6 +80,7 @@ public:
QUrl url;
qreal progress;
QSize sourcesize;
+ bool explicitSourceSize : 1;
bool async : 1;
};
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 250a43b..e0df751 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -56,7 +56,6 @@
#include <QDebug>
#include <QPen>
-#include <QFile>
#include <QEvent>
#include <QGraphicsSceneMouseEvent>
#include <QtCore/qnumeric.h>
@@ -729,41 +728,39 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event, bool post)
\since 4.7
\brief The Keys attached property provides key handling to Items.
- All visual primitives support key handling via the \e Keys
- attached property. Keys can be handled via the \e onPressed
- and \e onReleased signal properties.
+ All visual primitives support key handling via the Keys
+ attached property. Keys can be handled via the onPressed
+ and onReleased signal properties.
The signal properties have a \l KeyEvent parameter, named
\e event which contains details of the event. If a key is
handled \e event.accepted should be set to true to prevent the
event from propagating up the item hierarchy.
- \code
- Item {
- focus: true
- Keys.onPressed: {
- if (event.key == Qt.Key_Left) {
- console.log("move left");
- event.accepted = true;
- }
- }
- }
- \endcode
+ \section1 Example Usage
+
+ The following example shows how the general onPressed handler can
+ be used to test for a certain key; in this case, the left cursor
+ key:
+
+ \snippet doc/src/snippets/declarative/keys/keys-pressed.qml key item
Some keys may alternatively be handled via specific signal properties,
for example \e onSelectPressed. These handlers automatically set
\e event.accepted to true.
- \code
- Item {
- focus: true
- Keys.onLeftPressed: console.log("move left")
- }
- \endcode
+ \snippet doc/src/snippets/declarative/keys/keys-handler.qml key item
+
+ See \l{Qt::Key}{Qt.Key} for the list of keyboard codes.
- See \l {Qt::Key}{Qt.Key} for the list of keyboard codes.
+ \section1 Key Handling Priorities
- If priority is Keys.BeforeItem (default) the order of key event processing is:
+ The Keys attached property can be configured to handle key events
+ before or after the item it is attached to. This makes it possible
+ to intercept events in order to override an item's default behavior,
+ or act as a fallback for keys not handled by the item.
+
+ If \l priority is Keys.BeforeItem (default) the order of key event processing is:
\list 1
\o Items specified in \c forwardTo
@@ -774,6 +771,7 @@ void QDeclarativeKeyNavigationAttached::keyReleased(QKeyEvent *event, bool post)
\endlist
If priority is Keys.AfterItem the order of key event processing is:
+
\list 1
\o Item specific key handling, e.g. TextInput key handling
\o Items specified in \c forwardTo
@@ -1181,7 +1179,7 @@ void QDeclarativeKeysAttached::keyPressed(QKeyEvent *event, bool post)
d->inPress = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
+ if (i && i->isVisible()) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->inPress = false;
@@ -1223,7 +1221,7 @@ void QDeclarativeKeysAttached::keyReleased(QKeyEvent *event, bool post)
d->inRelease = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
+ if (i && i->isVisible()) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->inRelease = false;
@@ -1248,7 +1246,7 @@ void QDeclarativeKeysAttached::inputMethodEvent(QInputMethodEvent *event, bool p
d->inIM = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
+ if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->imeItem = i;
@@ -1276,7 +1274,7 @@ QVariant QDeclarativeKeysAttached::inputMethodQuery(Qt::InputMethodQuery query)
if (d->item) {
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
+ if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
QVariant v = static_cast<QDeclarativeItemAccessor *>(i)->doInputMethodQuery(query);
if (v.userType() == QVariant::RectF)
v = d->item->mapRectFromItem(i, v.toRectF()); //### cost?
@@ -1957,12 +1955,8 @@ void QDeclarativeItem::geometryChanged(const QRectF &newGeometry,
change.listener->itemGeometryChanged(this, newGeometry, oldGeometry);
}
- if (newGeometry.x() != oldGeometry.x())
- emit xChanged();
if (newGeometry.width() != oldGeometry.width())
emit widthChanged();
- if (newGeometry.y() != oldGeometry.y())
- emit yChanged();
if (newGeometry.height() != oldGeometry.height())
emit heightChanged();
}
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 6b46bc5..6be49ba 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -124,8 +124,8 @@ public:
}
qreal endPosition() const {
return (view->orientation() == QDeclarativeListView::Vertical
- ? item->y() + (item->height() > 0 ? item->height() : 1)
- : item->x() + (item->width() > 0 ? item->width() : 1)) - 1;
+ ? item->y() + (item->height() >= 1.0 ? item->height() : 1)
+ : item->x() + (item->width() >= 1.0 ? item->width() : 1)) - 1;
}
void setPosition(qreal pos) {
if (view->orientation() == QDeclarativeListView::Vertical) {
@@ -182,7 +182,8 @@ public:
, bufferMode(BufferBefore | BufferAfter)
, ownModel(false), wrap(false), autoHighlight(true), haveHighlightRange(false)
, correctFlick(false), inFlickCorrection(false), lazyRelease(false)
- , deferredRelease(false), layoutScheduled(false), minExtentDirty(true), maxExtentDirty(true)
+ , deferredRelease(false), layoutScheduled(false), currentIndexCleared(false)
+ , minExtentDirty(true), maxExtentDirty(true)
{}
void init();
@@ -333,28 +334,9 @@ public:
return model && model->count() && model->isValid();
}
- int snapIndex() {
- int index = currentIndex;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem *item = visibleItems[i];
- if (item->index == -1)
- continue;
- qreal itemTop = item->position();
- if (itemTop >= highlight->position()-item->size()/2 && itemTop < highlight->position()+item->size()/2)
- return item->index;
- }
- return index;
- }
-
qreal snapPosAt(qreal pos) {
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem *item = visibleItems[i];
- if (item->index == -1)
- continue;
- qreal itemTop = item->position();
- if (itemTop+item->size()/2 >= pos && itemTop <= pos)
- return item->position();
- }
+ if (FxListItem *snapItem = snapItemAt(pos))
+ return snapItem->position();
if (visibleItems.count()) {
qreal firstPos = visibleItems.first()->position();
qreal endPos = visibleItems.last()->position();
@@ -367,17 +349,18 @@ public:
}
FxListItem *snapItemAt(qreal pos) {
+ FxListItem *snapItem = 0;
for (int i = 0; i < visibleItems.count(); ++i) {
FxListItem *item = visibleItems[i];
if (item->index == -1)
continue;
qreal itemTop = item->position();
- if (item->index == model->count()-1 || (itemTop+item->size()/2 >= pos))
+ if (highlight && itemTop >= pos && item->endPosition() <= pos + highlight->size() - 1)
return item;
+ if (itemTop+item->size()/2 >= pos && itemTop-item->size()/2 < pos)
+ snapItem = item;
}
- if (visibleItems.count() && visibleItems.first()->position() <= pos)
- return visibleItems.first();
- return 0;
+ return snapItem;
}
int lastVisibleIndex() const {
@@ -393,44 +376,19 @@ public:
}
// map a model index to visibleItems index.
- // These may differ if removed items are still present in the visible list,
- // e.g. doing a removal animation
int mapFromModel(int modelIndex) const {
if (modelIndex < visibleIndex || modelIndex >= visibleIndex + visibleItems.count())
return -1;
for (int i = 0; i < visibleItems.count(); ++i) {
FxListItem *listItem = visibleItems.at(i);
if (listItem->index == modelIndex)
- return i + visibleIndex;
+ return i;
if (listItem->index > modelIndex)
return -1;
}
return -1; // Not in visibleList
}
- bool mapRangeFromModel(int &index, int &count) const {
- if (index + count < visibleIndex)
- return false;
-
- int lastIndex = -1;
- for (int i = visibleItems.count()-1; i >= 0; --i) {
- FxListItem *listItem = visibleItems.at(i);
- if (listItem->index != -1) {
- lastIndex = listItem->index;
- break;
- }
- }
-
- if (index > lastIndex)
- return false;
-
- int last = qMin(index + count - 1, lastIndex);
- index = qMax(index, visibleIndex);
- count = last - index + 1;
-
- return true;
- }
-
void updateViewport() {
Q_Q(QDeclarativeListView);
if (orient == QDeclarativeListView::Vertical) {
@@ -544,6 +502,7 @@ public:
bool lazyRelease : 1;
bool deferredRelease : 1;
bool layoutScheduled : 1;
+ bool currentIndexCleared : 1;
mutable bool minExtentDirty : 1;
mutable bool maxExtentDirty : 1;
};
@@ -775,10 +734,9 @@ void QDeclarativeListViewPrivate::layout()
setPosition(0);
return;
}
- updateSections();
if (!visibleItems.isEmpty()) {
qreal oldEnd = visibleItems.last()->endPosition();
- qreal pos = visibleItems.first()->endPosition() + spacing + 1;
+ qreal pos = visibleItems.first()->position() + visibleItems.first()->size() + spacing;
for (int i=1; i < visibleItems.count(); ++i) {
FxListItem *item = visibleItems.at(i);
item->setPosition(pos);
@@ -792,8 +750,10 @@ void QDeclarativeListViewPrivate::layout()
minExtentDirty = true;
maxExtentDirty = true;
updateHighlight();
- fixupPosition();
- q->refill();
+ if (!q->isMoving() && !q->isFlicking()) {
+ fixupPosition();
+ q->refill();
+ }
if (header)
updateHeader();
if (footer)
@@ -882,6 +842,7 @@ void QDeclarativeListViewPrivate::createHighlight()
} else {
highlight->item->setWidth(currentItem->item->width());
}
+ highlight->setPosition(currentItem->itemPosition());
}
QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
@@ -934,6 +895,7 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem)
return;
if (listItem->attached->m_prevSection != listItem->attached->m_section) {
if (!listItem->section) {
+ qreal pos = listItem->position();
int i = sectionCacheSize-1;
while (i >= 0 && !sectionCache[i])
--i;
@@ -961,8 +923,10 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem)
delete context;
}
}
+ listItem->setPosition(pos);
}
} else if (listItem->section) {
+ qreal pos = listItem->position();
int i = 0;
do {
if (!sectionCache[i]) {
@@ -975,12 +939,13 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem)
} while (i < sectionCacheSize);
delete listItem->section;
listItem->section = 0;
+ listItem->setPosition(pos);
}
}
void QDeclarativeListViewPrivate::updateSections()
{
- if (sectionCriteria) {
+ if (sectionCriteria && !visibleItems.isEmpty()) {
QString prevSection;
if (visibleIndex > 0)
prevSection = sectionAt(visibleIndex-1);
@@ -990,6 +955,8 @@ void QDeclarativeListViewPrivate::updateSections()
if (visibleItems.at(i)->index != -1) {
QDeclarativeListViewAttached *attached = visibleItems.at(i)->attached;
attached->setPrevSection(prevSection);
+ QString propValue = model->stringValue(visibleItems.at(i)->index, sectionCriteria->property());
+ attached->setSection(sectionCriteria->sectionString(propValue));
if (prevAtt)
prevAtt->setNextSection(attached->section());
createSection(visibleItems.at(i));
@@ -1009,18 +976,27 @@ void QDeclarativeListViewPrivate::updateSections()
void QDeclarativeListViewPrivate::updateCurrentSection()
{
+ Q_Q(QDeclarativeListView);
if (!sectionCriteria || visibleItems.isEmpty()) {
- currentSection.clear();
+ if (!currentSection.isEmpty()) {
+ currentSection.clear();
+ emit q->currentSectionChanged();
+ }
return;
}
int index = 0;
while (index < visibleItems.count() && visibleItems.at(index)->endPosition() < position())
++index;
+ QString newSection = currentSection;
if (index < visibleItems.count())
- currentSection = visibleItems.at(index)->attached->section();
+ newSection = visibleItems.at(index)->attached->section();
else
- currentSection = visibleItems.first()->attached->section();
+ newSection = visibleItems.first()->attached->section();
+ if (newSection != currentSection) {
+ currentSection = newSection;
+ emit q->currentSectionChanged();
+ }
}
void QDeclarativeListViewPrivate::updateCurrent(int modelIndex)
@@ -1031,8 +1007,11 @@ void QDeclarativeListViewPrivate::updateCurrent(int modelIndex)
currentItem->attached->setIsCurrentItem(false);
releaseItem(currentItem);
currentItem = 0;
- currentIndex = -1;
+ currentIndex = modelIndex;
+ emit q->currentIndexChanged();
updateHighlight();
+ } else if (currentIndex != modelIndex) {
+ currentIndex = modelIndex;
emit q->currentIndexChanged();
}
return;
@@ -1178,33 +1157,39 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m
|| (orient == QDeclarativeListView::Vertical && &data == &hData))
return;
+ correctFlick = false;
int oldDuration = fixupDuration;
fixupDuration = moveReason == Mouse ? fixupDuration : 0;
- if (snapMode != QDeclarativeListView::NoSnap) {
+ if (currentItem && haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) {
+ updateHighlight();
+ qreal pos = currentItem->itemPosition();
+ qreal viewPos = position();
+ if (viewPos < pos + currentItem->itemSize() - highlightRangeEnd)
+ viewPos = pos + currentItem->itemSize() - highlightRangeEnd;
+ if (viewPos > pos - highlightRangeStart)
+ viewPos = pos - highlightRangeStart;
+
+ timeline.reset(data.move);
+ if (viewPos != position()) {
+ if (fixupDuration)
+ timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
+ else
+ timeline.set(data.move, -viewPos);
+ }
+ vTime = timeline.time();
+ } else if (snapMode != QDeclarativeListView::NoSnap) {
FxListItem *topItem = snapItemAt(position()+highlightRangeStart);
FxListItem *bottomItem = snapItemAt(position()+highlightRangeEnd);
qreal pos;
- if (topItem && bottomItem && haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) {
- qreal topPos = qMin(topItem->position() - highlightRangeStart, -maxExtent);
- qreal bottomPos = qMax(bottomItem->position() - highlightRangeEnd, -minExtent);
- pos = qAbs(data.move + topPos) < qAbs(data.move + bottomPos) ? topPos : bottomPos;
- } else if (topItem) {
+ if (topItem) {
pos = qMax(qMin(topItem->position() - highlightRangeStart, -maxExtent), -minExtent);
} else if (bottomItem) {
- pos = qMax(qMin(bottomItem->position() - highlightRangeStart, -maxExtent), -minExtent);
+ pos = qMax(qMin(bottomItem->position() - highlightRangeStart, -maxExtent), -minExtent);
} else {
fixupDuration = oldDuration;
return;
}
- if (currentItem && haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) {
- updateHighlight();
- qreal currPos = currentItem->itemPosition();
- if (pos < currPos + currentItem->itemSize() - highlightRangeEnd)
- pos = currPos + currentItem->itemSize() - highlightRangeEnd;
- if (pos > currPos - highlightRangeStart)
- pos = currPos - highlightRangeStart;
- }
qreal dist = qAbs(data.move + pos);
if (dist > 0) {
@@ -1215,25 +1200,6 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m
timeline.set(data.move, -pos);
vTime = timeline.time();
}
- } else if (haveHighlightRange && highlightRange == QDeclarativeListView::StrictlyEnforceRange) {
- if (currentItem) {
- updateHighlight();
- qreal pos = currentItem->itemPosition();
- qreal viewPos = position();
- if (viewPos < pos + currentItem->itemSize() - highlightRangeEnd)
- viewPos = pos + currentItem->itemSize() - highlightRangeEnd;
- if (viewPos > pos - highlightRangeStart)
- viewPos = pos - highlightRangeStart;
-
- timeline.reset(data.move);
- if (viewPos != position()) {
- if (fixupDuration)
- timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- else
- timeline.set(data.move, -viewPos);
- }
- vTime = timeline.time();
- }
} else {
QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent);
}
@@ -1355,12 +1321,15 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
qreal newtarget = data.flickTarget;
if (snapMode != QDeclarativeListView::NoSnap || highlightRange == QDeclarativeListView::StrictlyEnforceRange)
newtarget = -snapPosAt(-(data.flickTarget - highlightRangeStart)) + highlightRangeStart;
- if (velocity < 0 && newtarget < maxExtent)
- newtarget = maxExtent;
- else if (velocity > 0 && newtarget > minExtent)
- newtarget = minExtent;
- if (newtarget == data.flickTarget) // boundary unchanged - nothing to do
+ if (velocity < 0 && newtarget <= maxExtent)
+ newtarget = maxExtent - overshootDist;
+ else if (velocity > 0 && newtarget >= minExtent)
+ newtarget = minExtent + overshootDist;
+ if (newtarget == data.flickTarget) { // boundary unchanged - nothing to do
+ if (qAbs(velocity) < MinimumFlickVelocity)
+ correctFlick = false;
return;
+ }
data.flickTarget = newtarget;
qreal dist = -newtarget + data.move.value();
if ((v < 0 && dist < 0) || (v > 0 && dist > 0)) {
@@ -1370,7 +1339,7 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
return;
}
timeline.reset(data.move);
- timeline.accelDistance(data.move, v, -dist + (v < 0 ? -overshootDist : overshootDist));
+ timeline.accelDistance(data.move, v, -dist);
timeline.callback(QDeclarativeTimeLineCallback(&data.move, fixupCallback, this));
}
} else {
@@ -1551,8 +1520,9 @@ void QDeclarativeListView::setModel(const QVariant &model)
disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
+ disconnect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int)));
disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
}
d->clear();
@@ -1581,8 +1551,9 @@ void QDeclarativeListView::setModel(const QVariant &model)
if (d->model) {
d->bufferMode = QDeclarativeListViewPrivate::BufferBefore | QDeclarativeListViewPrivate::BufferAfter;
if (isComponentComplete()) {
+ updateSections();
refill();
- if (d->currentIndex >= d->model->count() || d->currentIndex < 0) {
+ if ((d->currentIndex >= d->model->count() || d->currentIndex < 0) && !d->currentIndexCleared) {
setCurrentIndex(0);
} else {
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
@@ -1596,8 +1567,9 @@ void QDeclarativeListView::setModel(const QVariant &model)
connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
+ connect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int)));
connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
emit countChanged();
}
@@ -1653,6 +1625,7 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
d->visibleItems.clear();
d->releaseItem(d->currentItem);
d->currentItem = 0;
+ updateSections();
refill();
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
d->updateCurrent(d->currentIndex);
@@ -1670,7 +1643,8 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
\qmlproperty Item ListView::currentItem
The \c currentIndex property holds the index of the current item, and
- \c currentItem holds the current item.
+ \c currentItem holds the current item. Setting the currentIndex to -1
+ will clear the highlight and set currentItem to null.
If highlightFollowsCurrentItem is \c true, setting either of these
properties will smoothly scroll the ListView so that the current
@@ -1690,10 +1664,13 @@ void QDeclarativeListView::setCurrentIndex(int index)
Q_D(QDeclarativeListView);
if (d->requestedIndex >= 0) // currently creating item
return;
- if (isComponentComplete() && d->isValid() && index != d->currentIndex && index < d->model->count() && index >= 0) {
+ d->currentIndexCleared = (index == -1);
+ if (index == d->currentIndex)
+ return;
+ if (isComponentComplete() && d->isValid()) {
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
d->updateCurrent(index);
- } else if (index != d->currentIndex) {
+ } else if (d->currentIndex != index) {
d->currentIndex = index;
emit currentIndexChanged();
}
@@ -2066,8 +2043,10 @@ void QDeclarativeListView::setCacheBuffer(int b)
QDeclarativeViewSection *QDeclarativeListView::sectionCriteria()
{
Q_D(QDeclarativeListView);
- if (!d->sectionCriteria)
+ if (!d->sectionCriteria) {
d->sectionCriteria = new QDeclarativeViewSection(this);
+ connect(d->sectionCriteria, SIGNAL(propertyChanged()), this, SLOT(updateSections()));
+ }
return d->sectionCriteria;
}
@@ -2300,6 +2279,8 @@ void QDeclarativeListView::viewportMoved()
{
Q_D(QDeclarativeListView);
QDeclarativeFlickable::viewportMoved();
+ if (!d->itemCount)
+ return;
d->lazyRelease = true;
refill();
if (d->flickingHorizontally || d->flickingVertically || d->movingHorizontally || d->movingVertically)
@@ -2316,9 +2297,10 @@ void QDeclarativeListView::viewportMoved()
d->highlight->setPosition(qRound(pos));
// update current index
- int idx = d->snapIndex();
- if (idx >= 0 && idx != d->currentIndex)
- d->updateCurrent(idx);
+ if (FxListItem *snapItem = d->snapItemAt(d->highlight->position())) {
+ if (snapItem->index >= 0 && snapItem->index != d->currentIndex)
+ d->updateCurrent(snapItem->index);
+ }
}
}
@@ -2503,16 +2485,18 @@ void QDeclarativeListView::geometryChanged(const QRectF &newGeometry,
Increments the current index. The current index will wrap
if keyNavigationWraps is true and it is currently at the end.
+ This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeListView::incrementCurrentIndex()
{
Q_D(QDeclarativeListView);
- if (currentIndex() < d->model->count() - 1 || d->wrap) {
+ int count = d->model ? d->model->count() : 0;
+ if (count && (currentIndex() < count - 1 || d->wrap)) {
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
int index = currentIndex()+1;
- d->updateCurrent(index < d->model->count() ? index : 0);
+ setCurrentIndex((index >= 0 && index < count) ? index : 0);
}
}
@@ -2521,16 +2505,18 @@ void QDeclarativeListView::incrementCurrentIndex()
Decrements the current index. The current index will wrap
if keyNavigationWraps is true and it is currently at the beginning.
+ This method has no effect if the \l count is zero.
\bold Note: methods should only be called after the Component has completed.
*/
void QDeclarativeListView::decrementCurrentIndex()
{
Q_D(QDeclarativeListView);
- if (currentIndex() > 0 || d->wrap) {
+ int count = d->model ? d->model->count() : 0;
+ if (count && (currentIndex() > 0 || d->wrap)) {
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
int index = currentIndex()-1;
- d->updateCurrent(index >= 0 ? index : d->model->count()-1);
+ setCurrentIndex((index >= 0 && index < count) ? index : count-1);
}
}
@@ -2660,10 +2646,11 @@ void QDeclarativeListView::componentComplete()
{
Q_D(QDeclarativeListView);
QDeclarativeFlickable::componentComplete();
+ updateSections();
if (d->isValid()) {
refill();
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
- if (d->currentIndex < 0)
+ if (d->currentIndex < 0 && !d->currentIndexCleared)
d->updateCurrent(0);
else
d->updateCurrent(d->currentIndex);
@@ -2676,6 +2663,18 @@ void QDeclarativeListView::componentComplete()
}
}
+void QDeclarativeListView::updateSections()
+{
+ Q_D(QDeclarativeListView);
+ if (isComponentComplete() && d->model) {
+ QList<QByteArray> roles;
+ if (d->sectionCriteria && !d->sectionCriteria->property().isEmpty())
+ roles << d->sectionCriteria->property().toUtf8();
+ d->model->setWatchedRoles(roles);
+ d->updateSections();
+ }
+}
+
void QDeclarativeListView::refill()
{
Q_D(QDeclarativeListView);
@@ -2751,13 +2750,13 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
d->moveReason = QDeclarativeListViewPrivate::Other;
if (!d->visibleItems.count() || d->model->count() <= 1) {
d->scheduleLayout();
- if (d->currentIndex >= modelIndex) {
+ if (d->itemCount && d->currentIndex >= modelIndex) {
// adjust current item index
d->currentIndex += count;
if (d->currentItem)
d->currentItem->index = d->currentIndex;
emit currentIndexChanged();
- } else if (d->currentIndex < 0) {
+ } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) {
d->updateCurrent(0);
}
d->itemCount += count;
@@ -2765,15 +2764,15 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
return;
}
- int overlapCount = count;
- if (!d->mapRangeFromModel(modelIndex, overlapCount)) {
+ int index = d->mapFromModel(modelIndex);
+ if (index < 0) {
int i = d->visibleItems.count() - 1;
while (i > 0 && d->visibleItems.at(i)->index == -1)
--i;
if (d->visibleItems.at(i)->index + 1 == modelIndex
&& d->visibleItems.at(i)->endPosition() < d->buffer+d->position()+d->size()-1) {
// Special case of appending an item to the model.
- modelIndex = d->visibleIndex + d->visibleItems.count();
+ index = d->visibleItems.count();
} else {
if (modelIndex < d->visibleIndex) {
// Insert before visible items
@@ -2800,7 +2799,6 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
// At least some of the added items will be visible
- int index = modelIndex - d->visibleIndex;
// index can be the next item past the end of the visible items list (i.e. appended)
int pos = index < d->visibleItems.count() ? d->visibleItems.at(index)->position()
: d->visibleItems.at(index-1)->endPosition()+d->spacing+1;
@@ -2864,7 +2862,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
}
diff = pos - initialPos;
}
- if (d->currentIndex >= modelIndex) {
+ if (d->itemCount && d->currentIndex >= modelIndex) {
// adjust current item index
d->currentIndex += count;
if (d->currentItem) {
@@ -2885,6 +2883,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count)
for (int j = 0; j < added.count(); ++j)
added.at(j)->attached->emitAdd();
+ d->updateSections();
d->itemCount += count;
emit countChanged();
}
@@ -2977,6 +2976,7 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count)
}
}
+ d->updateSections();
emit countChanged();
}
@@ -3098,6 +3098,14 @@ void QDeclarativeListView::itemsMoved(int from, int to, int count)
// Ensure we don't cause an ugly list scroll.
d->visibleItems.first()->setPosition(d->visibleItems.first()->position() + moveBy);
+ d->updateSections();
+ d->layout();
+}
+
+void QDeclarativeListView::itemsChanged(int, int)
+{
+ Q_D(QDeclarativeListView);
+ d->updateSections();
d->layout();
}
diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h
index 735b248..2678b90 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h
@@ -250,11 +250,13 @@ protected:
virtual void componentComplete();
private Q_SLOTS:
+ void updateSections();
void refill();
void trackedPositionChanged();
void itemsInserted(int index, int count);
void itemsRemoved(int index, int count);
void itemsMoved(int from, int to, int count);
+ void itemsChanged(int index, int count);
void modelReset();
void destroyRemoved();
void createdItem(int index, QDeclarativeItem *item);
diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp
index 5647b14..1119b92 100644
--- a/src/declarative/graphicsitems/qdeclarativeloader.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp
@@ -129,15 +129,41 @@ void QDeclarativeLoaderPrivate::initResize()
The loaded item can be accessed using the \l item property.
- Loader is like any other visual item and must be positioned and sized
- accordingly to become visible. Once the component is loaded, the Loader
- is automatically resized to the size of the component.
-
If the \l source or \l sourceComponent changes, any previously instantiated
items are destroyed. Setting \l source to an empty string or setting
\l sourceComponent to \c undefined destroys the currently loaded item,
freeing resources and leaving the Loader empty.
+ \section2 Loader sizing behavior
+
+ Loader is like any other visual item and must be positioned and sized
+ accordingly to become visible.
+
+ \list
+ \o If an explicit size is not specified for the Loader, the Loader
+ is automatically resized to the size of the loaded item once the
+ component is loaded.
+ \o If the size of the Loader is specified explicitly by setting
+ the width, height or by anchoring, the loaded item will be resized
+ to the size of the Loader.
+ \endlist
+
+ In both scenarios the size of the item and the Loader are identical.
+ This ensures that anchoring to the Loader is equivalent to anchoring
+ to the loaded item.
+
+ \table
+ \row
+ \o sizeloader.qml
+ \o sizeitem.qml
+ \row
+ \o \snippet doc/src/snippets/declarative/loader/sizeloader.qml 0
+ \o \snippet doc/src/snippets/declarative/loader/sizeitem.qml 0
+ \row
+ \o The red rectangle will be sized to the size of the root item.
+ \o The red rectangle will be 50x50, centered in the root item.
+ \endtable
+
\section2 Receiving signals from loaded items
@@ -216,7 +242,8 @@ QDeclarativeLoader::~QDeclarativeLoader()
cannot load non-visual components.
To unload the currently loaded item, set this property to an empty string,
- or set \l sourceComponent to \c undefined.
+ or set \l sourceComponent to \c undefined. Setting \c source to a
+ new URL will also cause the item created by the previous URL to be unloaded.
\sa sourceComponent, status, progress
*/
@@ -342,12 +369,14 @@ void QDeclarativeLoaderPrivate::_q_sourceLoaded()
QDeclarativeContext *ctxt = new QDeclarativeContext(creationContext);
ctxt->setContextObject(q);
- QDeclarativeComponent *c = component;
- QObject *obj = component->create(ctxt);
+ QDeclarativeGuard<QDeclarativeComponent> c = component;
+ QObject *obj = component->beginCreate(ctxt);
if (component != c) {
// component->create could trigger a change in source that causes
// component to be set to something else. In that case we just
// need to cleanup.
+ if (c)
+ c->completeCreate();
delete obj;
delete ctxt;
return;
@@ -372,6 +401,7 @@ void QDeclarativeLoaderPrivate::_q_sourceLoaded()
delete ctxt;
source = QUrl();
}
+ component->completeCreate();
emit q->sourceChanged();
emit q->statusChanged();
emit q->progressChanged();
@@ -394,23 +424,25 @@ void QDeclarativeLoaderPrivate::_q_sourceLoaded()
Use this status to provide an update or respond to the status change in some way.
For example, you could:
- \e {Trigger a state change:}
- \qml
- State { name: 'loaded'; when: loader.status = Loader.Ready }
+ \list
+ \o Trigger a state change:
+ \qml
+ State { name: 'loaded'; when: loader.status == Loader.Ready }
\endqml
- \e {Implement an \c onStatusChanged signal handler:}
- \qml
+ \o Implement an \c onStatusChanged signal handler:
+ \qml
Loader {
id: loader
onStatusChanged: if (loader.status == Loader.Ready) console.log('Loaded')
}
\endqml
- \e {Bind to the status value:}
+ \o Bind to the status value:
\qml
- Text { text: loader.status != Loader.Ready ? 'Not Loaded' : 'Loaded' }
+ Text { text: loader.status == Loader.Ready ? 'Loaded' : 'Not loaded' }
\endqml
+ \endlist
Note that if the source is a local file, the status will initially be Ready (or Error). While
there will be no onStatusChanged signal in that case, the onLoaded will still be invoked.
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index a0208ef..d9edd11 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -335,7 +335,7 @@ QDeclarativeMouseAreaPrivate::~QDeclarativeMouseAreaPrivate()
If the \e accepted property of the \l {MouseEvent}{mouse} parameter is set to false
in the handler, the onPressed/onReleased/onClicked handlers will be called for the second
- click; otherwise they are supressed. The accepted property defaults to true.
+ click; otherwise they are suppressed. The accepted property defaults to true.
*/
/*!
@@ -557,6 +557,7 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
ungrabMouse();
setKeepMouseGrab(false);
}
+ d->doubleClick = false;
}
void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
@@ -565,14 +566,13 @@ void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even
if (!d->absorb) {
QDeclarativeItem::mouseDoubleClickEvent(event);
} else {
+ if (d->isDoubleClickConnected())
+ d->doubleClick = true;
d->saveEvent(event);
QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
me.setAccepted(d->isDoubleClickConnected());
emit this->doubleClicked(&me);
- if (!me.isAccepted()) {
- // Only deliver the press event if we haven't accepted the double click.
- QDeclarativeItem::mouseDoubleClickEvent(event);
- }
+ QDeclarativeItem::mouseDoubleClickEvent(event);
}
}
@@ -841,7 +841,8 @@ bool QDeclarativeMouseArea::setPressed(bool p)
d->pressed = p;
QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress);
if (d->pressed) {
- emit pressed(&me);
+ if (!d->doubleClick)
+ emit pressed(&me);
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
emit mousePositionChanged(&me);
@@ -849,7 +850,7 @@ bool QDeclarativeMouseArea::setPressed(bool p)
emit released(&me);
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
- if (isclick && !d->longPress)
+ if (isclick && !d->longPress && !d->doubleClick)
emit clicked(&me);
}
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
index 48a56d9..06a01d3 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
@@ -68,7 +68,7 @@ class QDeclarativeMouseAreaPrivate : public QDeclarativeItemPrivate
public:
QDeclarativeMouseAreaPrivate()
: absorb(true), hovered(false), pressed(false), longPress(false),
- moved(false), stealMouse(false), drag(0)
+ moved(false), stealMouse(false), doubleClick(false), drag(0)
{
}
@@ -109,6 +109,7 @@ public:
bool dragX : 1;
bool dragY : 1;
bool stealMouse : 1;
+ bool doubleClick : 1;
QDeclarativeDrag *drag;
QPointF startScene;
qreal startX;
diff --git a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
index a6db1fa..b470b3a 100644
--- a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
@@ -44,7 +44,6 @@
#include <QDebug>
#include <QPen>
-#include <QFile>
#include <QEvent>
#include <QApplication>
#include <QGraphicsSceneMouseEvent>
diff --git a/src/declarative/graphicsitems/qdeclarativepath.cpp b/src/declarative/graphicsitems/qdeclarativepath.cpp
index d526688..966c51b 100644
--- a/src/declarative/graphicsitems/qdeclarativepath.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepath.cpp
@@ -871,7 +871,7 @@ void QDeclarativePathCubic::addToPath(QPainterPath &path)
*/
/*!
- \qmlproperty real value
+ \qmlproperty real PathPercent::value
The proporation of items that should be laid out up to this point.
This value should always be higher than the last value specified
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index 31943b2..7c79afe 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -373,7 +373,21 @@ void QDeclarativePathViewPrivate::regenerate()
opacity of the items as they rotate. This additional code can be seen in the
PathAttribute documentation.)
- The \c focus can be set to \c true to enable keyboard navigation.
+ PathView does not automatically handle keyboard navigation. This is because
+ the keys to use for navigation will depend upon the shape of the path. Navigation
+ can be added quite simply by setting \c focus to \c true and calling
+ \l decrementCurrentIndex() or \l incrementCurrentIndex(), for example to navigate
+ using the left and right arrow keys:
+
+ \code
+ PathView {
+ ...
+ focus: true
+ Keys.onLeftPressed: decrementCurrentIndex()
+ Keys.onRightPressed: incrementCurrentIndex()
+ }
+ \endcode
+
The path view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details).
Delegates are instantiated as needed and may be destroyed at any time.
@@ -467,7 +481,7 @@ void QDeclarativePathView::setModel(const QVariant &model)
disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
for (int i=0; i<d->items.count(); i++){
QDeclarativeItem *p = d->items[i];
d->model->release(p);
@@ -498,7 +512,7 @@ void QDeclarativePathView::setModel(const QVariant &model)
connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
d->modelCount = d->model->count();
if (d->model->count())
d->offset = qmlMod(d->offset, qreal(d->model->count()));
@@ -523,7 +537,6 @@ int QDeclarativePathView::count() const
/*!
\qmlproperty Path PathView::path
- \default
This property holds the path used to lay out the items.
For more information see the \l Path documentation.
*/
@@ -607,6 +620,8 @@ void QDeclarativePathView::setCurrentIndex(int idx)
*/
void QDeclarativePathView::incrementCurrentIndex()
{
+ Q_D(QDeclarativePathView);
+ d->moveDirection = QDeclarativePathViewPrivate::Positive;
setCurrentIndex(currentIndex()+1);
}
@@ -625,6 +640,7 @@ void QDeclarativePathView::decrementCurrentIndex()
int idx = currentIndex()-1;
if (idx < 0)
idx = d->modelCount - 1;
+ d->moveDirection = QDeclarativePathViewPrivate::Negative;
setCurrentIndex(idx);
}
}
@@ -995,6 +1011,7 @@ void QDeclarativePathView::setDelegate(QDeclarativeComponent *delegate)
}
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
dataModel->setDelegate(delegate);
+ d->modelCount = dataModel->count();
d->regenerate();
emit delegateChanged();
}
@@ -1112,16 +1129,16 @@ void QDeclarativePathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (!interactive || !lastPosTime.isValid())
return;
+ qreal newPc;
+ QPointF pathPoint = pointNear(event->pos(), &newPc);
if (!stealMouse) {
- QPointF delta = event->pos() - startPoint;
+ QPointF delta = pathPoint - startPoint;
if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance())
stealMouse = true;
}
if (stealMouse) {
moveReason = QDeclarativePathViewPrivate::Mouse;
- qreal newPc;
- pointNear(event->pos(), &newPc);
qreal diff = (newPc - startPc)*modelCount*mappedRange;
if (diff) {
setOffset(offset + diff);
@@ -1636,7 +1653,7 @@ void QDeclarativePathViewPrivate::snapToCurrent()
if (!model || modelCount <= 0)
return;
- qreal targetOffset = modelCount - currentIndex;
+ qreal targetOffset = qmlMod(modelCount - currentIndex, modelCount);
moveReason = Other;
offsetAdj = 0.0;
@@ -1645,19 +1662,28 @@ void QDeclarativePathViewPrivate::snapToCurrent()
const int duration = highlightMoveDuration;
- if (targetOffset - offset > modelCount/2) {
+ if (moveDirection == Positive || (moveDirection == Shortest && targetOffset - offset > modelCount/2)) {
qreal distance = modelCount - targetOffset + offset;
- tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * offset / distance));
- tl.set(moveOffset, modelCount);
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * (modelCount-targetOffset) / distance));
- } else if (targetOffset - offset <= -modelCount/2) {
+ if (targetOffset > moveOffset) {
+ tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * offset / distance));
+ tl.set(moveOffset, modelCount);
+ tl.move(moveOffset, targetOffset, QEasingCurve(offset == 0.0 ? QEasingCurve::InOutQuad : QEasingCurve::OutQuad), int(duration * (modelCount-targetOffset) / distance));
+ } else {
+ tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
+ }
+ } else if (moveDirection == Negative || targetOffset - offset <= -modelCount/2) {
qreal distance = modelCount - offset + targetOffset;
- tl.move(moveOffset, modelCount, QEasingCurve(QEasingCurve::InQuad), int(duration * (modelCount-offset) / distance));
- tl.set(moveOffset, 0.0);
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * targetOffset / distance));
+ if (targetOffset < moveOffset) {
+ tl.move(moveOffset, modelCount, QEasingCurve(targetOffset == 0 ? QEasingCurve::InOutQuad : QEasingCurve::InQuad), int(duration * (modelCount-offset) / distance));
+ tl.set(moveOffset, 0.0);
+ tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * targetOffset / distance));
+ } else {
+ tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
+ }
} else {
tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
}
+ moveDirection = Shortest;
}
QDeclarativePathViewAttached *QDeclarativePathView::qmlAttachedProperties(QObject *obj)
diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
index b217216..6232b83 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
@@ -82,7 +82,7 @@ public:
, dragMargin(0), deceleration(100)
, moveOffset(this, &QDeclarativePathViewPrivate::setAdjustedOffset)
, firstIndex(-1), pathItems(-1), requestedIndex(-1)
- , moveReason(Other), attType(0), highlightComponent(0), highlightItem(0)
+ , moveReason(Other), moveDirection(Shortest), attType(0), highlightComponent(0), highlightItem(0)
, moveHighlight(this, &QDeclarativePathViewPrivate::setHighlightPosition)
, highlightPosition(0)
, highlightRangeStart(0), highlightRangeEnd(0)
@@ -173,6 +173,8 @@ public:
QVariant modelVariant;
enum MovementReason { Other, SetIndex, Mouse };
MovementReason moveReason;
+ enum MovementDirection { Shortest, Negative, Positive };
+ MovementDirection moveDirection;
QDeclarativeOpenMetaObjectType *attType;
QDeclarativeComponent *highlightComponent;
QDeclarativeItem *highlightItem;
diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
index 15b91e5..d3ae926 100644
--- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
@@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeBasePositionerPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeBasePositioner : public QDeclarativeItem
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeBasePositioner : public QDeclarativeItem
{
Q_OBJECT
diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
index 9831d5f..fc3954f 100644
--- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp
@@ -261,9 +261,9 @@ void QDeclarativeRectangle::doUpdate()
A width of 1 creates a thin line. For no line, use a width of 0 or a transparent color.
If \c border.width is an odd number, the rectangle is painted at a half-pixel offset to retain
- border smoothness. Also, the border is rendered evenly on either side of the
+ border smoothness. Also, the border is rendered evenly on either side of the
rectangle's boundaries, and the spare pixel is rendered to the right and below the
- rectangle (as documented for QRect rendering). This can cause unintended effects if
+ rectangle (as documented for QRect rendering). This can cause unintended effects if
\c border.width is 1 and the rectangle is \l{Item::clip}{clipped} by a parent item:
\beginfloatright
@@ -477,7 +477,8 @@ void QDeclarativeRectangle::drawRect(QPainter &p)
{
Q_D(QDeclarativeRectangle);
if ((d->gradient && d->gradient->gradient())
- || d->radius > width()/2 || d->radius > height()/2) {
+ || d->radius > width()/2 || d->radius > height()/2
+ || width() < 3 || height() < 3) {
// XXX This path is still slower than the image path
// Image path won't work for gradients or invalid radius though
bool oldAA = p.testRenderHint(QPainter::Antialiasing);
diff --git a/src/declarative/graphicsitems/qdeclarativerectangle_p.h b/src/declarative/graphicsitems/qdeclarativerectangle_p.h
index ecc3fbf..99dca1b 100644
--- a/src/declarative/graphicsitems/qdeclarativerectangle_p.h
+++ b/src/declarative/graphicsitems/qdeclarativerectangle_p.h
@@ -46,12 +46,14 @@
#include <QtGui/qbrush.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class Q_DECLARATIVE_EXPORT QDeclarativePen : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativePen : public QObject
{
Q_OBJECT
@@ -131,7 +133,7 @@ private:
};
class QDeclarativeRectanglePrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeRectangle : public QDeclarativeItem
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeRectangle : public QDeclarativeItem
{
Q_OBJECT
diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
index cb64212..6f46c7b 100644
--- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
@@ -202,7 +202,7 @@ void QDeclarativeRepeater::setModel(const QVariant &model)
disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
/*
- disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
*/
}
@@ -230,7 +230,7 @@ void QDeclarativeRepeater::setModel(const QVariant &model)
connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
/*
- connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
+ connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
*/
regenerate();
diff --git a/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h b/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h
index 42813dd..c6d4629 100644
--- a/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativescalegrid_p_p.h
@@ -42,21 +42,22 @@
#ifndef QDECLARATIVESCALEGRID_H
#define QDECLARATIVESCALEGRID_H
-#include "private/qdeclarativeborderimage_p.h"
-
-#include <private/qdeclarativepixmapcache_p.h>
#include <qdeclarative.h>
#include <QtCore/QString>
#include <QtCore/QObject>
+#include <private/qdeclarativeborderimage_p.h>
+#include <private/qdeclarativepixmapcache_p.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class Q_DECLARATIVE_EXPORT QDeclarativeScaleGrid : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeScaleGrid : public QObject
{
Q_OBJECT
Q_ENUMS(TileRule)
@@ -94,7 +95,7 @@ private:
int _bottom;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeGridScaledImage
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeGridScaledImage
{
public:
QDeclarativeGridScaledImage();
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index 65f1564..82c444e 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -82,15 +82,16 @@ private:
static QSet<QUrl> errors;
};
-DEFINE_BOOL_CONFIG_OPTION(disableImageCache, QML_DISABLE_IMAGE_CACHE);
+DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE);
QDeclarativeTextPrivate::QDeclarativeTextPrivate()
-: color((QRgb)0), style(QDeclarativeText::Normal),
- hAlign(QDeclarativeText::AlignLeft), vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone),
- imgDirty(true), dirty(true), richText(false), singleline(false), cache(true), internalWidthUpdate(false), doc(0),
- format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap)
+: color((QRgb)0), style(QDeclarativeText::Normal), hAlign(QDeclarativeText::AlignLeft),
+ vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone),
+ format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap), imageCacheDirty(true),
+ updateOnComponentComplete(true), richText(false), singleline(false), cacheAllTextAsImage(true),
+ internalWidthUpdate(false), doc(0)
{
- cache = !disableImageCache();
+ cacheAllTextAsImage = enableImageCache();
QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton;
QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
}
@@ -151,7 +152,6 @@ void QTextDocumentWithImageResources::requestFinished()
#endif
QDeclarativeTextPrivate *d = QDeclarativeTextPrivate::get(textItem);
d->updateLayout();
- d->markImgDirty();
}
}
@@ -172,6 +172,384 @@ void QTextDocumentWithImageResources::setText(const QString &text)
QSet<QUrl> QTextDocumentWithImageResources::errors;
+QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
+{
+}
+
+void QDeclarativeTextPrivate::updateLayout()
+{
+ Q_Q(QDeclarativeText);
+ if (!q->isComponentComplete()) {
+ updateOnComponentComplete = true;
+ return;
+ }
+
+ // Setup instance of QTextLayout for all cases other than richtext
+ if (!richText) {
+ layout.clearLayout();
+ layout.setFont(font);
+ if (format != QDeclarativeText::StyledText) {
+ QString tmp = text;
+ tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
+ singleline = !tmp.contains(QChar::LineSeparator);
+ if (singleline && elideMode != QDeclarativeText::ElideNone && q->widthValid()) {
+ QFontMetrics fm(font);
+ tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
+ }
+ layout.setText(tmp);
+ } else {
+ singleline = false;
+ QDeclarativeStyledText::parse(text, layout);
+ }
+ }
+
+ updateSize();
+}
+
+void QDeclarativeTextPrivate::updateSize()
+{
+ Q_Q(QDeclarativeText);
+
+ if (!q->isComponentComplete()) {
+ updateOnComponentComplete = true;
+ return;
+ }
+
+ invalidateImageCache();
+
+ QFontMetrics fm(font);
+ if (text.isEmpty()) {
+ q->setImplicitWidth(0);
+ q->setImplicitHeight(fm.height());
+ emit q->paintedSizeChanged();
+ q->update();
+ return;
+ }
+
+ int dy = q->height();
+ QSize size(0, 0);
+
+ //setup instance of QTextLayout for all cases other than richtext
+ if (!richText) {
+ size = setupTextLayout();
+ if (layedOutTextSize != size) {
+ q->prepareGeometryChange();
+ layedOutTextSize = size;
+ }
+ dy -= size.height();
+ } else {
+ singleline = false; // richtext can't elide or be optimized for single-line case
+ ensureDoc();
+ doc->setDefaultFont(font);
+ QTextOption option((Qt::Alignment)int(hAlign | vAlign));
+ option.setWrapMode(QTextOption::WrapMode(wrapMode));
+ doc->setDefaultTextOption(option);
+ if (wrapMode != QDeclarativeText::NoWrap && q->widthValid())
+ doc->setTextWidth(q->width());
+ else
+ doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug)
+ dy -= (int)doc->size().height();
+ QSize dsize = doc->size().toSize();
+ if (dsize != layedOutTextSize) {
+ q->prepareGeometryChange();
+ layedOutTextSize = dsize;
+ }
+ size = QSize(int(doc->idealWidth()),dsize.height());
+ }
+ int yoff = 0;
+
+ if (q->heightValid()) {
+ if (vAlign == QDeclarativeText::AlignBottom)
+ yoff = dy;
+ else if (vAlign == QDeclarativeText::AlignVCenter)
+ yoff = dy/2;
+ }
+ q->setBaselineOffset(fm.ascent() + yoff);
+
+ //### need to comfirm cost of always setting these for richText
+ internalWidthUpdate = true;
+ q->setImplicitWidth(size.width());
+ internalWidthUpdate = false;
+ q->setImplicitHeight(size.height());
+ emit q->paintedSizeChanged();
+ q->update();
+}
+
+/*!
+ Lays out the QDeclarativeTextPrivate::layout QTextLayout in the constraints of the QDeclarativeText.
+
+ Returns the size of the final text. This can be used to position the text vertically (the text is
+ already absolutely positioned horizontally).
+*/
+QSize QDeclarativeTextPrivate::setupTextLayout()
+{
+ // ### text layout handling should be profiled and optimized as needed
+ // what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine);
+ Q_Q(QDeclarativeText);
+ layout.setCacheEnabled(true);
+
+ qreal height = 0;
+ qreal widthUsed = 0;
+ qreal lineWidth = 0;
+
+ //set manual width
+ if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
+ lineWidth = q->width();
+
+ QTextOption textOption = layout.textOption();
+ textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
+ layout.setTextOption(textOption);
+
+ layout.beginLayout();
+ forever {
+ QTextLine line = layout.createLine();
+ if (!line.isValid())
+ break;
+
+ if (lineWidth)
+ line.setLineWidth(lineWidth);
+ }
+ layout.endLayout();
+
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ widthUsed = qMax(widthUsed, line.naturalTextWidth());
+ }
+
+ qreal layoutWidth = q->widthValid() ? q->width() : widthUsed;
+
+ qreal x = 0;
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ line.setPosition(QPointF(0, height));
+ height += line.height();
+
+ if (!cacheAllTextAsImage) {
+ if (hAlign == QDeclarativeText::AlignLeft) {
+ x = 0;
+ } else if (hAlign == QDeclarativeText::AlignRight) {
+ x = layoutWidth - line.naturalTextWidth();
+ } else if (hAlign == QDeclarativeText::AlignHCenter) {
+ x = (layoutWidth - line.naturalTextWidth()) / 2;
+ }
+ line.setPosition(QPointF(x, line.y()));
+ }
+ }
+
+ return layout.boundingRect().toAlignedRect().size();
+}
+
+/*!
+ Returns a painted version of the QDeclarativeTextPrivate::layout QTextLayout.
+ If \a drawStyle is true, the style color overrides all colors in the document.
+*/
+QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle)
+{
+ //do layout
+ QSize size = layedOutTextSize;
+
+ qreal x = 0;
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ if (hAlign == QDeclarativeText::AlignLeft) {
+ x = 0;
+ } else if (hAlign == QDeclarativeText::AlignRight) {
+ x = size.width() - line.naturalTextWidth();
+ } else if (hAlign == QDeclarativeText::AlignHCenter) {
+ x = (size.width() - line.naturalTextWidth()) / 2;
+ }
+ line.setPosition(QPointF(x, line.y()));
+ }
+
+ //paint text
+ QPixmap img(size);
+ if (!size.isEmpty()) {
+ img.fill(Qt::transparent);
+#ifdef Q_WS_MAC
+ bool oldSmooth = qt_applefontsmoothing_enabled;
+ qt_applefontsmoothing_enabled = false;
+#endif
+ QPainter p(&img);
+#ifdef Q_WS_MAC
+ qt_applefontsmoothing_enabled = oldSmooth;
+#endif
+ drawTextLayout(&p, QPointF(0,0), drawStyle);
+ }
+ return img;
+}
+
+/*!
+ Paints the QDeclarativeTextPrivate::layout QTextLayout into \a painter at \a pos. If
+ \a drawStyle is true, the style color overrides all colors in the document.
+*/
+void QDeclarativeTextPrivate::drawTextLayout(QPainter *painter, const QPointF &pos, bool drawStyle)
+{
+ if (drawStyle)
+ painter->setPen(styleColor);
+ else
+ painter->setPen(color);
+ painter->setFont(font);
+ layout.draw(painter, pos);
+}
+
+/*!
+ Returns a painted version of the QDeclarativeTextPrivate::doc QTextDocument.
+ If \a drawStyle is true, the style color overrides all colors in the document.
+*/
+QPixmap QDeclarativeTextPrivate::textDocumentImage(bool drawStyle)
+{
+ QSize size = doc->size().toSize();
+
+ //paint text
+ QPixmap img(size);
+ img.fill(Qt::transparent);
+#ifdef Q_WS_MAC
+ bool oldSmooth = qt_applefontsmoothing_enabled;
+ qt_applefontsmoothing_enabled = false;
+#endif
+ QPainter p(&img);
+#ifdef Q_WS_MAC
+ qt_applefontsmoothing_enabled = oldSmooth;
+#endif
+
+ QAbstractTextDocumentLayout::PaintContext context;
+
+ QTextOption oldOption(doc->defaultTextOption());
+ if (drawStyle) {
+ context.palette.setColor(QPalette::Text, styleColor);
+ QTextOption colorOption(doc->defaultTextOption());
+ colorOption.setFlags(QTextOption::SuppressColors);
+ doc->setDefaultTextOption(colorOption);
+ } else {
+ context.palette.setColor(QPalette::Text, color);
+ }
+ doc->documentLayout()->draw(&p, context);
+ if (drawStyle)
+ doc->setDefaultTextOption(oldOption);
+ return img;
+}
+
+/*!
+ Mark the image cache as dirty.
+*/
+void QDeclarativeTextPrivate::invalidateImageCache()
+{
+ Q_Q(QDeclarativeText);
+
+ if (imageCacheDirty)
+ return;
+
+ imageCacheDirty = true;
+ imageCache = QPixmap();
+
+ if (q->isComponentComplete())
+ q->update();
+}
+
+/*!
+ Tests if the image cache is dirty, and repaints it if it is.
+*/
+void QDeclarativeTextPrivate::checkImageCache()
+{
+ if (!imageCacheDirty)
+ return;
+
+ if (text.isEmpty()) {
+
+ imageCache = QPixmap();
+
+ } else {
+
+ QPixmap textImage;
+ QPixmap styledImage;
+
+ if (richText) {
+ textImage = textDocumentImage(false);
+ if (style != QDeclarativeText::Normal)
+ styledImage = textDocumentImage(true); //### should use styleColor
+ } else {
+ textImage = textLayoutImage(false);
+ if (style != QDeclarativeText::Normal)
+ styledImage = textLayoutImage(true); //### should use styleColor
+ }
+
+ switch (style) {
+ case QDeclarativeText::Outline:
+ imageCache = drawOutline(textImage, styledImage);
+ break;
+ case QDeclarativeText::Sunken:
+ imageCache = drawOutline(textImage, styledImage, -1);
+ break;
+ case QDeclarativeText::Raised:
+ imageCache = drawOutline(textImage, styledImage, 1);
+ break;
+ default:
+ imageCache = textImage;
+ break;
+ }
+
+ }
+
+ imageCacheDirty = false;
+}
+
+/*!
+ Ensures the QDeclarativeTextPrivate::doc variable is set to a valid text document
+*/
+void QDeclarativeTextPrivate::ensureDoc()
+{
+ if (!doc) {
+ Q_Q(QDeclarativeText);
+ doc = new QTextDocumentWithImageResources(q);
+ doc->setDocumentMargin(0);
+ }
+}
+
+/*!
+ Draw \a styleSource as an outline around \a source and return the new image.
+*/
+QPixmap QDeclarativeTextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource)
+{
+ QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
+ img.fill(Qt::transparent);
+
+ QPainter ppm(&img);
+
+ QPoint pos(0, 0);
+ pos += QPoint(-1, 0);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(2, 0);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(-1, -1);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(0, 2);
+ ppm.drawPixmap(pos, styleSource);
+
+ pos += QPoint(0, -1);
+ ppm.drawPixmap(pos, source);
+ ppm.end();
+
+ return img;
+}
+
+/*!
+ Draw \a styleSource below \a source at \a yOffset and return the new image.
+*/
+QPixmap QDeclarativeTextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset)
+{
+ QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
+ img.fill(Qt::transparent);
+
+ QPainter ppm(&img);
+
+ ppm.drawPixmap(QPoint(0, yOffset), styleSource);
+ ppm.drawPixmap(0, 0, source);
+
+ ppm.end();
+
+ return img;
+}
+
/*!
\qmlclass Text QDeclarativeText
\ingroup qml-basic-visual-elements
@@ -211,10 +589,44 @@ QDeclarativeText::~QDeclarativeText()
{
}
+/*!
+ \qmlproperty bool Text::clip
+ This property holds whether the text is clipped.
-QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
-{
-}
+ Note that if the text does not fit in the bounding rectangle it will be abruptly chopped.
+
+ If you want to display potentially long text in a limited space, you probably want to use \c elide instead.
+*/
+
+/*!
+ \qmlproperty bool Text::smooth
+
+ This property holds whether the text is smoothly scaled or transformed.
+
+ Smooth filtering gives better visual quality, but is slower. If
+ the item is displayed at its natural size, this property has no visual or
+ performance effect.
+
+ \note Generally scaling artifacts are only visible if the item is stationary on
+ the screen. A common pattern when animating an item is to disable smooth
+ filtering at the beginning of the animation and reenable it at the conclusion.
+*/
+
+/*!
+ \qmlsignal Text::onLinkActivated(string link)
+
+ This handler is called when the user clicks on a link embedded in the text.
+ The link must be in rich text or HTML format and the
+ \a link string provides access to the particular link.
+
+ \snippet doc/src/snippets/declarative/text/onLinkActivated.qml 0
+
+ The example code will display the text
+ "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}."
+
+ Clicking on the highlighted link will output
+ \tt{http://qt.nokia.com link activated} to the console.
+*/
/*!
\qmlproperty string Text::font.family
@@ -320,7 +732,6 @@ QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
Text { text: "Hello"; font.capitalization: Font.AllLowercase }
\endqml
*/
-
QFont QDeclarativeText::font() const
{
Q_D(const QDeclarativeText);
@@ -334,30 +745,9 @@ void QDeclarativeText::setFont(const QFont &font)
return;
d->font = font;
-
d->updateLayout();
- d->markImgDirty();
- emit fontChanged(d->font);
-}
-void QDeclarativeText::setText(const QString &n)
-{
- Q_D(QDeclarativeText);
- if (d->text == n)
- return;
-
- d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
- if (d->richText) {
- if (isComponentComplete()) {
- d->ensureDoc();
- d->doc->setText(n);
- }
- }
-
- d->text = n;
- d->updateLayout();
- d->markImgDirty();
- emit textChanged(d->text);
+ emit fontChanged(d->font);
}
/*!
@@ -374,17 +764,25 @@ QString QDeclarativeText::text() const
return d->text;
}
-void QDeclarativeText::setColor(const QColor &color)
+void QDeclarativeText::setText(const QString &n)
{
Q_D(QDeclarativeText);
- if (d->color == color)
+ if (d->text == n)
return;
- d->color = color;
- d->markImgDirty();
- emit colorChanged(d->color);
+ d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
+ if (d->richText && isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setText(n);
+ }
+
+ d->text = n;
+ d->updateLayout();
+
+ emit textChanged(d->text);
}
+
/*!
\qmlproperty color Text::color
@@ -398,13 +796,23 @@ void QDeclarativeText::setColor(const QColor &color)
Text { color: "steelblue"; ... }
\endqml
*/
-
QColor QDeclarativeText::color() const
{
Q_D(const QDeclarativeText);
return d->color;
}
+void QDeclarativeText::setColor(const QColor &color)
+{
+ Q_D(QDeclarativeText);
+ if (d->color == color)
+ return;
+
+ d->color = color;
+ d->invalidateImageCache();
+ emit colorChanged(d->color);
+}
+
/*!
\qmlproperty enumeration Text::style
@@ -445,21 +853,10 @@ void QDeclarativeText::setStyle(QDeclarativeText::TextStyle style)
if (isComponentComplete() && (d->style == Normal || style == Normal))
prepareGeometryChange();
d->style = style;
- d->markImgDirty();
+ d->invalidateImageCache();
emit styleChanged(d->style);
}
-void QDeclarativeText::setStyleColor(const QColor &color)
-{
- Q_D(QDeclarativeText);
- if (d->styleColor == color)
- return;
-
- d->styleColor = color;
- d->markImgDirty();
- emit styleColorChanged(d->styleColor);
-}
-
/*!
\qmlproperty color Text::styleColor
@@ -481,6 +878,18 @@ QColor QDeclarativeText::styleColor() const
return d->styleColor;
}
+void QDeclarativeText::setStyleColor(const QColor &color)
+{
+ Q_D(QDeclarativeText);
+ if (d->styleColor == color)
+ return;
+
+ d->styleColor = color;
+ d->invalidateImageCache();
+ emit styleColorChanged(d->styleColor);
+}
+
+
/*!
\qmlproperty enumeration Text::horizontalAlignment
\qmlproperty enumeration Text::verticalAlignment
@@ -493,7 +902,7 @@ QColor QDeclarativeText::styleColor() const
and \c Text.AlignVCenter.
Note that for a single line of text, the size of the text is the area of the text. In this common case,
- all alignments are equivalent. If you want the text to be, say, centered in it parent, then you will
+ all alignments are equivalent. If you want the text to be, say, centered in its parent, then you will
need to either modify the Item::anchors, or set horizontalAlignment to Text.AlignHCenter and bind the width to
that of the parent.
*/
@@ -511,7 +920,10 @@ void QDeclarativeText::setHAlign(HAlignment align)
if (isComponentComplete())
prepareGeometryChange();
+
d->hAlign = align;
+ d->updateLayout();
+
emit horizontalAlignmentChanged(align);
}
@@ -559,9 +971,8 @@ void QDeclarativeText::setWrapMode(WrapMode mode)
return;
d->wrapMode = mode;
-
d->updateLayout();
- d->markImgDirty();
+
emit wrapModeChanged();
}
@@ -621,7 +1032,6 @@ Column {
\o \image declarative-textformat.png
\endtable
*/
-
QDeclarativeText::TextFormat QDeclarativeText::textFormat() const
{
Q_D(const QDeclarativeText);
@@ -637,19 +1047,13 @@ void QDeclarativeText::setTextFormat(TextFormat format)
bool wasRich = d->richText;
d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
- if (wasRich && !d->richText) {
- //### delete control? (and vice-versa below)
- d->updateLayout();
- d->markImgDirty();
- } else if (!wasRich && d->richText) {
- if (isComponentComplete()) {
- d->ensureDoc();
- d->doc->setText(d->text);
- }
- d->updateLayout();
- d->markImgDirty();
+ if (!wasRich && d->richText && isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setText(d->text);
}
+ d->updateLayout();
+
emit textFormatChanged(d->format);
}
@@ -659,7 +1063,7 @@ void QDeclarativeText::setTextFormat(TextFormat format)
Set this property to elide parts of the text fit to the Text item's width.
The text will only elide if an explicit width has been set.
- This property cannot be used with wrapping enabled or with rich text.
+ This property cannot be used with multi-line text or with rich text.
Eliding can be:
\list
@@ -688,12 +1092,12 @@ void QDeclarativeText::setElideMode(QDeclarativeText::TextElideMode mode)
return;
d->elideMode = mode;
-
d->updateLayout();
- d->markImgDirty();
+
emit elideModeChanged(d->elideMode);
}
+/*! \internal */
QRectF QDeclarativeText::boundingRect() const
{
Q_D(const QDeclarativeText);
@@ -704,7 +1108,7 @@ QRectF QDeclarativeText::boundingRect() const
int x = 0;
int y = 0;
- QSize size = d->cachedLayoutSize;
+ QSize size = d->layedOutTextSize;
if (d->style != Normal)
size += QSize(2,2);
@@ -737,117 +1141,24 @@ QRectF QDeclarativeText::boundingRect() const
return QRectF(x,y,size.width(),size.height());
}
-void QDeclarativeText::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
+/*! \internal */
+void QDeclarativeText::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
{
Q_D(QDeclarativeText);
- if (!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width()) {
- if (d->wrapMode != QDeclarativeText::NoWrap || d->elideMode != QDeclarativeText::ElideNone) {
- //re-elide if needed
- if (d->singleline && d->elideMode != QDeclarativeText::ElideNone &&
- isComponentComplete() && widthValid()) {
-
- QFontMetrics fm(d->font);
- QString tmp = fm.elidedText(d->text,(Qt::TextElideMode)d->elideMode,width()); // XXX still worth layout...?
- d->layout.setText(tmp);
- }
-
- d->imgDirty = true;
+ if ((!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width())
+ && (d->wrapMode != QDeclarativeText::NoWrap
+ || d->elideMode != QDeclarativeText::ElideNone
+ || d->hAlign != QDeclarativeText::AlignLeft)) {
+ if (d->singleline && d->elideMode != QDeclarativeText::ElideNone && widthValid()) {
+ // We need to re-elide
+ d->updateLayout();
+ } else {
+ // We just need to re-layout
d->updateSize();
}
}
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-void QDeclarativeTextPrivate::updateLayout()
-{
- Q_Q(QDeclarativeText);
- if (q->isComponentComplete()) {
- //setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- layout.clearLayout();
- layout.setFont(font);
- if (format != QDeclarativeText::StyledText) {
- QString tmp = text;
- tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
- singleline = !tmp.contains(QChar::LineSeparator);
- if (singleline && elideMode != QDeclarativeText::ElideNone && q->widthValid()) {
- QFontMetrics fm(font);
- tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
- }
- layout.setText(tmp);
- } else {
- singleline = false;
- QDeclarativeStyledText::parse(text, layout);
- }
- }
- updateSize();
- } else {
- dirty = true;
- }
-}
-
-
-void QDeclarativeTextPrivate::updateSize()
-{
- Q_Q(QDeclarativeText);
- if (q->isComponentComplete()) {
- QFontMetrics fm(font);
- if (text.isEmpty()) {
- q->setImplicitHeight(fm.height());
- emit q->paintedSizeChanged();
- return;
- }
-
- int dy = q->height();
- QSize size(0, 0);
-
- //setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- size = setupTextLayout();
- if (cachedLayoutSize != size) {
- q->prepareGeometryChange();
- cachedLayoutSize = size;
- }
- dy -= size.height();
- } else {
- singleline = false; // richtext can't elide or be optimized for single-line case
- ensureDoc();
- doc->setDefaultFont(font);
- QTextOption option((Qt::Alignment)int(hAlign | vAlign));
- option.setWrapMode(QTextOption::WrapMode(wrapMode));
- doc->setDefaultTextOption(option);
- if (wrapMode != QDeclarativeText::NoWrap && q->widthValid())
- doc->setTextWidth(q->width());
- else
- doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug)
- dy -= (int)doc->size().height();
- QSize dsize = doc->size().toSize();
- if (dsize != cachedLayoutSize) {
- q->prepareGeometryChange();
- cachedLayoutSize = dsize;
- }
- size = QSize(int(doc->idealWidth()),dsize.height());
- }
- int yoff = 0;
-
- if (q->heightValid()) {
- if (vAlign == QDeclarativeText::AlignBottom)
- yoff = dy;
- else if (vAlign == QDeclarativeText::AlignVCenter)
- yoff = dy/2;
- }
- q->setBaselineOffset(fm.ascent() + yoff);
- //### need to comfirm cost of always setting these for richText
- internalWidthUpdate = true;
- q->setImplicitWidth(size.width());
- internalWidthUpdate = false;
- q->setImplicitHeight(size.height());
- emit q->paintedSizeChanged();
- } else {
- dirty = true;
- }
+ QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
}
/*!
@@ -872,228 +1183,6 @@ qreal QDeclarativeText::paintedHeight() const
return implicitHeight();
}
-
-
-// ### text layout handling should be profiled and optimized as needed
-// what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine);
-
-void QDeclarativeTextPrivate::drawOutline()
-{
- QPixmap img = QPixmap(imgStyleCache.width()+2,imgStyleCache.height()+2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- QPoint pos(imgCache.rect().topLeft());
- pos += QPoint(-1, 0);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(2, 0);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(-1, -1);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(0, 2);
- ppm.drawPixmap(pos, imgStyleCache);
-
- pos += QPoint(0, -1);
- ppm.drawPixmap(pos, imgCache);
- ppm.end();
-
- imgCache = img;
-}
-
-void QDeclarativeTextPrivate::drawOutline(int yOffset)
-{
- QPixmap img = QPixmap(imgStyleCache.width()+2,imgStyleCache.height()+2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- QPoint pos(imgCache.rect().topLeft());
- pos += QPoint(0, yOffset);
- ppm.drawPixmap(pos, imgStyleCache);
-
- pos += QPoint(0, -yOffset);
- ppm.drawPixmap(pos, imgCache);
- ppm.end();
-
- imgCache = img;
-}
-
-QSize QDeclarativeTextPrivate::setupTextLayout()
-{
- Q_Q(QDeclarativeText);
- layout.setCacheEnabled(true);
-
- int height = 0;
- qreal widthUsed = 0;
- qreal lineWidth = 0;
-
- //set manual width
- if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
- lineWidth = q->width();
-
- QTextOption textOption = layout.textOption();
- textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
- layout.setTextOption(textOption);
-
- layout.beginLayout();
-
- while (1) {
- QTextLine line = layout.createLine();
- if (!line.isValid())
- break;
-
- if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
- line.setLineWidth(lineWidth);
- }
- layout.endLayout();
-
- int x = 0;
- for (int i = 0; i < layout.lineCount(); ++i) {
- QTextLine line = layout.lineAt(i);
- widthUsed = qMax(widthUsed, line.naturalTextWidth());
- line.setPosition(QPointF(0, height));
- height += int(line.height());
-
- if (!cache) {
- if (hAlign == QDeclarativeText::AlignLeft) {
- x = 0;
- } else if (hAlign == QDeclarativeText::AlignRight) {
- x = q->width() - (int)line.naturalTextWidth();
- } else if (hAlign == QDeclarativeText::AlignHCenter) {
- x = (q->width() - (int)line.naturalTextWidth()) / 2;
- }
- line.setPosition(QPoint(x, (int)line.y()));
- }
- }
-
- return QSize(qCeil(widthUsed), height);
-}
-
-QPixmap QDeclarativeTextPrivate::wrappedTextImage(bool drawStyle)
-{
- //do layout
- QSize size = cachedLayoutSize;
-
- int x = 0;
- for (int i = 0; i < layout.lineCount(); ++i) {
- QTextLine line = layout.lineAt(i);
- if (hAlign == QDeclarativeText::AlignLeft) {
- x = 0;
- } else if (hAlign == QDeclarativeText::AlignRight) {
- x = size.width() - (int)line.naturalTextWidth();
- } else if (hAlign == QDeclarativeText::AlignHCenter) {
- x = (size.width() - (int)line.naturalTextWidth()) / 2;
- }
- line.setPosition(QPoint(x, (int)line.y()));
- }
-
- //paint text
- QPixmap img(size);
- if (!size.isEmpty()) {
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
- drawWrappedText(&p, QPointF(0,0), drawStyle);
- }
- return img;
-}
-
-void QDeclarativeTextPrivate::drawWrappedText(QPainter *p, const QPointF &pos, bool drawStyle)
-{
- if (drawStyle)
- p->setPen(styleColor);
- else
- p->setPen(color);
- p->setFont(font);
- layout.draw(p , pos);
-}
-
-QPixmap QDeclarativeTextPrivate::richTextImage(bool drawStyle)
-{
- QSize size = doc->size().toSize();
-
- //paint text
- QPixmap img(size);
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
-
- QAbstractTextDocumentLayout::PaintContext context;
-
- QTextOption oldOption(doc->defaultTextOption());
- if (drawStyle) {
- context.palette.setColor(QPalette::Text, styleColor);
- QTextOption colorOption(doc->defaultTextOption());
- colorOption.setFlags(QTextOption::SuppressColors);
- doc->setDefaultTextOption(colorOption);
- } else {
- context.palette.setColor(QPalette::Text, color);
- }
- doc->documentLayout()->draw(&p, context);
- if (drawStyle)
- doc->setDefaultTextOption(oldOption);
- return img;
-}
-
-void QDeclarativeTextPrivate::checkImgCache()
-{
- if (!imgDirty)
- return;
-
- bool empty = text.isEmpty();
- QPixmap newImgCache;
- if (empty) {
- imgStyleCache = QPixmap();
- } else if (richText) {
- newImgCache = richTextImage(false);
- if (style != QDeclarativeText::Normal)
- imgStyleCache = richTextImage(true); //### should use styleColor
- } else {
- newImgCache = wrappedTextImage(false);
- if (style != QDeclarativeText::Normal)
- imgStyleCache = wrappedTextImage(true); //### should use styleColor
- }
- imgCache = newImgCache;
- if (!empty)
- switch (style) {
- case QDeclarativeText::Outline:
- drawOutline();
- break;
- case QDeclarativeText::Sunken:
- drawOutline(-1);
- break;
- case QDeclarativeText::Raised:
- drawOutline(1);
- break;
- default:
- break;
- }
-
- imgDirty = false;
-}
-
-void QDeclarativeTextPrivate::ensureDoc()
-{
- if (!doc) {
- Q_Q(QDeclarativeText);
- doc = new QTextDocumentWithImageResources(q);
- doc->setDocumentMargin(0);
- }
-}
-
/*!
Returns the number of resources (images) that are being loaded asynchronously.
*/
@@ -1103,22 +1192,14 @@ int QDeclarativeText::resourcesLoading() const
return d->doc ? d->doc->resourcesLoading() : 0;
}
-/*!
- \qmlproperty bool Text::clip
- This property holds whether the text is clipped.
-
- Note that if the text does not fit in the bounding rectangle it will be abruptly chopped.
-
- If you want to display potentially long text in a limited space, you probably want to use \c elide instead.
-*/
-
+/*! \internal */
void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
{
Q_D(QDeclarativeText);
- if (d->cache || d->style != Normal) {
- d->checkImgCache();
- if (d->imgCache.isNull())
+ if (d->cacheAllTextAsImage || d->style != Normal) {
+ d->checkImageCache();
+ if (d->imageCache.isNull())
return;
bool oldAA = p->testRenderHint(QPainter::Antialiasing);
@@ -1128,23 +1209,23 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
QRect br = boundingRect().toRect();
- bool needClip = clip() && (d->imgCache.width() > width() ||
- d->imgCache.height() > height());
+ bool needClip = clip() && (d->imageCache.width() > width() ||
+ d->imageCache.height() > height());
if (needClip)
- p->drawPixmap(0, 0, width(), height(), d->imgCache, -br.x(), -br.y(), width(), height());
+ p->drawPixmap(0, 0, width(), height(), d->imageCache, -br.x(), -br.y(), width(), height());
else
- p->drawPixmap(br.x(), br.y(), d->imgCache);
+ p->drawPixmap(br.x(), br.y(), d->imageCache);
if (d->smooth) {
p->setRenderHint(QPainter::Antialiasing, oldAA);
p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
}
} else {
- qreal y = boundingRect().y();
+ QRectF bounds = boundingRect();
- bool needClip = clip() && (d->cachedLayoutSize.width() > width() ||
- d->cachedLayoutSize.height() > height());
+ bool needClip = clip() && (d->layedOutTextSize.width() > width() ||
+ d->layedOutTextSize.height() > height());
if (needClip) {
p->save();
@@ -1153,49 +1234,35 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
if (d->richText) {
QAbstractTextDocumentLayout::PaintContext context;
context.palette.setColor(QPalette::Text, d->color);
- p->translate(0, y);
+ p->translate(bounds.x(), bounds.y());
d->doc->documentLayout()->draw(p, context);
- p->translate(0, -y);
+ p->translate(-bounds.x(), -bounds.y());
} else {
- d->drawWrappedText(p, QPointF(0,y), false);
+ d->drawTextLayout(p, QPointF(0, bounds.y()), false);
}
- if (needClip)
+
+ if (needClip) {
p->restore();
+ }
}
}
-/*!
- \qmlproperty bool Text::smooth
-
- This property holds whether the text is smoothly scaled or transformed.
-
- Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
+/*! \internal */
void QDeclarativeText::componentComplete()
{
Q_D(QDeclarativeText);
QDeclarativeItem::componentComplete();
- if (d->dirty) {
+ if (d->updateOnComponentComplete) {
+ d->updateOnComponentComplete = false;
if (d->richText) {
d->ensureDoc();
d->doc->setText(d->text);
}
d->updateLayout();
- d->dirty = false;
}
}
-/*!
- \overload
- Handles the given mouse \a event.
- */
+/*! \internal */
void QDeclarativeText::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativeText);
@@ -1214,26 +1281,7 @@ void QDeclarativeText::mousePressEvent(QGraphicsSceneMouseEvent *event)
}
-/*!
- \qmlsignal Text::onLinkActivated(string link)
-
- This handler is called when the user clicks on a link embedded in the text.
- The link must be in rich text or HTML format and the
- \a link string provides access to the particular link.
-
- \snippet doc/src/snippets/declarative/text/onLinkActivated.qml 0
-
- The example code will display the text
- "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}."
-
- Clicking on the highlighted link will output
- \tt{http://qt.nokia.com link activated} to the console.
-*/
-
-/*!
- \overload
- Handles the given mouse \a event.
- */
+/*! \internal */
void QDeclarativeText::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativeText);
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h
index 2cc4d52..51434d5 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p.h
@@ -45,13 +45,15 @@
#include <QtGui/qtextoption.h>
#include "qdeclarativeitem.h"
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeTextPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeText : public QDeclarativeItem
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeText : public QDeclarativeItem
{
Q_OBJECT
Q_ENUMS(HAlignment)
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
index db68558..e37f477 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
@@ -74,24 +74,8 @@ public:
~QDeclarativeTextPrivate();
- void ensureDoc();
void updateSize();
void updateLayout();
- void markImgDirty() {
- Q_Q(QDeclarativeText);
- imgDirty = true;
- if (q->isComponentComplete())
- q->update();
- }
- void checkImgCache();
-
- void drawOutline();
- void drawOutline(int yOffset);
-
- QPixmap wrappedTextImage(bool drawStyle);
- void drawWrappedText(QPainter *p, const QPointF &pos, bool drawStyle);
- QPixmap richTextImage(bool drawStyle);
- QSize setupTextLayout();
QString text;
QFont font;
@@ -99,23 +83,37 @@ public:
QDeclarativeText::TextStyle style;
QColor styleColor;
QString activeLink;
- QPixmap imgCache;
- QPixmap imgStyleCache;
QDeclarativeText::HAlignment hAlign;
QDeclarativeText::VAlignment vAlign;
QDeclarativeText::TextElideMode elideMode;
- bool imgDirty:1;
- bool dirty:1;
+ QDeclarativeText::TextFormat format;
+ QDeclarativeText::WrapMode wrapMode;
+
+ void invalidateImageCache();
+ void checkImageCache();
+ QPixmap imageCache;
+
+ bool imageCacheDirty:1;
+ bool updateOnComponentComplete:1;
bool richText:1;
bool singleline:1;
- bool cache:1;
+ bool cacheAllTextAsImage:1;
bool internalWidthUpdate:1;
+
+ QSize layedOutTextSize;
+
+ void ensureDoc();
+ QPixmap textDocumentImage(bool drawStyle);
QTextDocumentWithImageResources *doc;
+
+ QSize setupTextLayout();
+ QPixmap textLayoutImage(bool drawStyle);
+ void drawTextLayout(QPainter *p, const QPointF &pos, bool drawStyle);
QDeclarativeTextLayout layout;
- QSize cachedLayoutSize;
- QDeclarativeText::TextFormat format;
- QDeclarativeText::WrapMode wrapMode;
-
+
+ static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource);
+ static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset);
+
static inline QDeclarativeTextPrivate *get(QDeclarativeText *t) {
return t->d_func();
}
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
index 6f5608a..e05f4e4 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
@@ -319,6 +319,7 @@ void QDeclarativeTextEdit::setTextFormat(TextFormat format)
updateSize();
}
d->format = format;
+ d->control->setAcceptRichText(d->format != PlainText);
emit textFormatChanged(d->format);
}
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
index 637dd77..0deacf8 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
@@ -460,10 +460,9 @@ QRect QDeclarativeTextInput::cursorRectangle() const
text edit.
Note that if selectionStart == selectionEnd then there is no current
- selection. If you attempt to set selectionStart to a value outside of
- the current text, selectionStart will not be changed.
+ selection.
- \sa selectionEnd, cursorPosition, selectedText
+ \sa selectionEnd, cursorPosition, selectedText, select()
*/
int QDeclarativeTextInput::selectionStart() const
{
@@ -479,10 +478,9 @@ int QDeclarativeTextInput::selectionStart() const
text edit.
Note that if selectionStart == selectionEnd then there is no current
- selection. If you attempt to set selectionEnd to a value outside of
- the current text, selectionEnd will not be changed.
+ selection.
- \sa selectionStart, cursorPosition, selectedText
+ \sa selectionStart, cursorPosition, selectedText, select()
*/
int QDeclarativeTextInput::selectionEnd() const
{
@@ -490,6 +488,19 @@ int QDeclarativeTextInput::selectionEnd() const
return d->lastSelectionEnd;
}
+/*!
+ \qmlmethod void TextInput::select(int start, int end)
+
+ Causes the text from \a start to \a end to be selected.
+
+ If either start or end is out of range, the selection is not changed.
+
+ After calling this, selectionStart will become the lesser
+ and selectionEnd will become the greater (regardless of the order passed
+ to this method).
+
+ \sa selectionStart, selectionEnd
+*/
void QDeclarativeTextInput::select(int start, int end)
{
Q_D(QDeclarativeTextInput);
@@ -792,7 +803,7 @@ void QDeclarativeTextInput::setCursorDelegate(QDeclarativeComponent* c)
d->cursorComponent = c;
if(!c){
//note that the components are owned by something else
- disconnect(d->control, SIGNAL(cursorPositionChanged(int, int)),
+ disconnect(d->control, SIGNAL(cursorPositionChanged(int,int)),
this, SLOT(moveCursor()));
delete d->cursorItem;
}else{
@@ -805,7 +816,7 @@ void QDeclarativeTextInput::setCursorDelegate(QDeclarativeComponent* c)
void QDeclarativeTextInputPrivate::startCreatingCursor()
{
Q_Q(QDeclarativeTextInput);
- q->connect(control, SIGNAL(cursorPositionChanged(int, int)),
+ q->connect(control, SIGNAL(cursorPositionChanged(int,int)),
q, SLOT(moveCursor()));
if(cursorComponent->isReady()){
q->createCursor();
@@ -1446,7 +1457,7 @@ void QDeclarativeTextInputPrivate::init()
q, SLOT(cursorPosChanged()));
q->connect(control, SIGNAL(selectionChanged()),
q, SLOT(selectionChanged()));
- q->connect(control, SIGNAL(textChanged(const QString &)),
+ q->connect(control, SIGNAL(textChanged(QString)),
q, SLOT(q_textChanged()));
q->connect(control, SIGNAL(accepted()),
q, SIGNAL(accepted()));
@@ -1464,6 +1475,7 @@ void QDeclarativeTextInputPrivate::init()
void QDeclarativeTextInput::cursorPosChanged()
{
Q_D(QDeclarativeTextInput);
+ d->updateHorizontalScroll();
updateRect();//TODO: Only update rect between pos's
updateMicroFocus();
emit cursorPositionChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
index e8b5fb2..e8da367 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
@@ -94,7 +94,7 @@ class DrawTextItemRecorder: public QPaintEngine
if (!m_inertText->items.isEmpty()) {
QStaticTextItem &last = m_inertText->items[m_inertText->items.count() - 1];
- if (last.fontEngine == ti.fontEngine && last.font == ti.font() &&
+ if (last.fontEngine() == ti.fontEngine && last.font == ti.font() &&
(!m_dirtyPen || last.color == state->pen().color())) {
needFreshCurrentItem = false;
@@ -107,7 +107,7 @@ class DrawTextItemRecorder: public QPaintEngine
if (needFreshCurrentItem) {
QStaticTextItem currentItem;
- currentItem.fontEngine = ti.fontEngine;
+ currentItem.setFontEngine(ti.fontEngine);
currentItem.font = ti.font();
currentItem.charOffset = charOffset;
currentItem.numChars = ti.num_chars;
@@ -285,6 +285,19 @@ void QDeclarativeTextLayout::beginLayout()
QTextLayout::beginLayout();
}
+void QDeclarativeTextLayout::clearLayout()
+{
+ if (d && d->cached) {
+ d->cached = false;
+ d->items.clear();
+ d->positions.clear();
+ d->glyphs.clear();
+ d->chars.clear();
+ d->position = QPointF();
+ }
+ QTextLayout::clearLayout();
+}
+
void QDeclarativeTextLayout::prepare()
{
if (!d || !d->cached) {
@@ -321,7 +334,7 @@ void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p)
priv->extended->type() == QPaintEngine::OpenVG ||
priv->extended->type() == QPaintEngine::OpenGL);
- if (!paintEngineSupportsTransformations) {
+ if (!paintEngineSupportsTransformations || !priv->state->matrix.isAffine()) {
QTextLayout::draw(painter, p);
return;
}
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
index 90bf0e0..8b81db3 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
@@ -59,6 +59,7 @@ public:
~QDeclarativeTextLayout();
void beginLayout();
+ void clearLayout();
void prepare();
void draw(QPainter *, const QPointF & = QPointF());
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 439f500..4fe6c4c 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -403,6 +403,8 @@ public:
QDeclarativeListAccessor *m_listAccessor;
QModelIndex m_root;
+ QList<QByteArray> watchedRoles;
+ QList<int> watchedRoleIds;
};
class QDeclarativeVisualDataModelDataMetaObject : public QDeclarativeOpenMetaObject
@@ -712,14 +714,14 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model)
this, SLOT(_q_itemsMoved(int,int,int)));
d->m_listModelInterface = 0;
} else if (d->m_abstractItemModel) {
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsInserted(const QModelIndex &,int,int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &,int,int)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsRemoved(const QModelIndex &,int,int)),
- this, SLOT(_q_rowsRemoved(const QModelIndex &,int,int)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&)),
- this, SLOT(_q_dataChanged(const QModelIndex&,const QModelIndex&)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)),
- this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)));
+ QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex,int,int)));
+ QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
+ QObject::disconnect(d->m_abstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(_q_dataChanged(QModelIndex,QModelIndex)));
+ QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)));
QObject::disconnect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset()));
QObject::disconnect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged()));
d->m_abstractItemModel = 0;
@@ -760,14 +762,14 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model)
emit itemsInserted(0, d->m_listModelInterface->count());
return;
} else if (object && (d->m_abstractItemModel = qobject_cast<QAbstractItemModel *>(object))) {
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsInserted(const QModelIndex &,int,int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &,int,int)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsRemoved(const QModelIndex &,int,int)),
- this, SLOT(_q_rowsRemoved(const QModelIndex &,int,int)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&)),
- this, SLOT(_q_dataChanged(const QModelIndex&,const QModelIndex&)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)),
- this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)));
+ QObject::connect(d->m_abstractItemModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex,int,int)));
+ QObject::connect(d->m_abstractItemModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
+ QObject::connect(d->m_abstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(_q_dataChanged(QModelIndex,QModelIndex)));
+ QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)));
QObject::connect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset()));
QObject::connect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged()));
d->m_metaDataCacheable = true;
@@ -935,6 +937,10 @@ void QDeclarativeVisualDataModel::setPart(const QString &part)
int QDeclarativeVisualDataModel::count() const
{
Q_D(const QDeclarativeVisualDataModel);
+ if (d->m_visualItemModel)
+ return d->m_visualItemModel->count();
+ if (!d->m_delegate)
+ return 0;
return d->modelCount();
}
@@ -1170,10 +1176,25 @@ int QDeclarativeVisualDataModel::indexOf(QDeclarativeItem *item, QObject *) cons
return -1;
}
+void QDeclarativeVisualDataModel::setWatchedRoles(QList<QByteArray> roles)
+{
+ Q_D(QDeclarativeVisualDataModel);
+ d->watchedRoles = roles;
+ d->watchedRoleIds.clear();
+}
+
void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
const QList<int> &roles)
{
Q_D(QDeclarativeVisualDataModel);
+ bool changed = false;
+ if (!d->watchedRoles.isEmpty() && d->watchedRoleIds.isEmpty()) {
+ foreach (QByteArray r, d->watchedRoles) {
+ if (d->m_roleNames.contains(r))
+ d->watchedRoleIds << d->m_roleNames.value(r);
+ }
+ }
+
for (QHash<int,QDeclarativeVisualDataModelPrivate::ObjectRef>::ConstIterator iter = d->m_cache.begin();
iter != d->m_cache.end(); ++iter) {
const int idx = iter.key();
@@ -1183,6 +1204,8 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
QDeclarativeVisualDataModelData *data = d->data(objRef.obj);
for (int roleIdx = 0; roleIdx < roles.count(); ++roleIdx) {
int role = roles.at(roleIdx);
+ if (!changed && !d->watchedRoleIds.isEmpty() && d->watchedRoleIds.contains(role))
+ changed = true;
int propId = data->propForRole(role);
if (propId != -1) {
if (data->hasValue(propId)) {
@@ -1217,6 +1240,8 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
}
}
}
+ if (changed)
+ emit itemsChanged(index, count);
}
void QDeclarativeVisualDataModel::_q_itemsInserted(int index, int count)
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
index f09d8dd..5e187c2 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
@@ -79,6 +79,7 @@ public:
virtual bool completePending() const = 0;
virtual void completeItem() = 0;
virtual QString stringValue(int, const QString &) = 0;
+ virtual void setWatchedRoles(QList<QByteArray> roles) = 0;
virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const = 0;
@@ -87,6 +88,7 @@ Q_SIGNALS:
void itemsInserted(int index, int count);
void itemsRemoved(int index, int count);
void itemsMoved(int from, int to, int count);
+ void itemsChanged(int index, int count);
void modelReset();
void createdItem(int index, QDeclarativeItem *item);
void destroyingItem(QDeclarativeItem *item);
@@ -120,6 +122,7 @@ public:
virtual bool completePending() const;
virtual void completeItem();
virtual QString stringValue(int index, const QString &role);
+ virtual void setWatchedRoles(QList<QByteArray>) {}
virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const;
@@ -174,6 +177,7 @@ public:
bool completePending() const;
void completeItem();
virtual QString stringValue(int index, const QString &role);
+ virtual void setWatchedRoles(QList<QByteArray> roles);
int indexOf(QDeclarativeItem *item, QObject *objectContext) const;
diff --git a/src/declarative/qml/parser/qdeclarativejs.g b/src/declarative/qml/parser/qdeclarativejs.g
index 1b66ba0..c84f0b3 100644
--- a/src/declarative/qml/parser/qdeclarativejs.g
+++ b/src/declarative/qml/parser/qdeclarativejs.g
@@ -1254,7 +1254,7 @@ case $rule_number: {
else
node = makeAstNode<AST::ObjectLiteral> (driver->nodePool());
node->lbraceToken = loc(1);
- node->lbraceToken = loc(3);
+ node->rbraceToken = loc(3);
sym(1).Node = node;
} break;
./
@@ -1265,7 +1265,7 @@ case $rule_number: {
AST::ObjectLiteral *node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(),
sym(2).PropertyNameAndValueList->finish ());
node->lbraceToken = loc(1);
- node->lbraceToken = loc(4);
+ node->rbraceToken = loc(4);
sym(1).Node = node;
} break;
./
diff --git a/src/declarative/qml/parser/qdeclarativejslexer.cpp b/src/declarative/qml/parser/qdeclarativejslexer.cpp
index 1eb42e4..52f6210 100644
--- a/src/declarative/qml/parser/qdeclarativejslexer.cpp
+++ b/src/declarative/qml/parser/qdeclarativejslexer.cpp
@@ -510,15 +510,18 @@ int Lexer::lex()
setDone(Eof);
}
} else if (isLineTerminator()) {
- shiftWindowsLineBreak();
- yylineno++;
- yycolumn = 0;
- bol = true;
- terminator = true;
- syncProhibitAutomaticSemicolon();
if (restrKeyword) {
+ // automatic semicolon insertion
+ recordStartPos();
token = QDeclarativeJSGrammar::T_SEMICOLON;
setDone(Other);
+ } else {
+ shiftWindowsLineBreak();
+ yylineno++;
+ yycolumn = 0;
+ bol = true;
+ terminator = true;
+ syncProhibitAutomaticSemicolon();
}
} else if (current == '"' || current == '\'') {
recordStartPos();
diff --git a/src/declarative/qml/parser/qdeclarativejsparser.cpp b/src/declarative/qml/parser/qdeclarativejsparser.cpp
index 8afb93d..28ef17d 100644
--- a/src/declarative/qml/parser/qdeclarativejsparser.cpp
+++ b/src/declarative/qml/parser/qdeclarativejsparser.cpp
@@ -679,7 +679,7 @@ case 85: {
else
node = makeAstNode<AST::ObjectLiteral> (driver->nodePool());
node->lbraceToken = loc(1);
- node->lbraceToken = loc(3);
+ node->rbraceToken = loc(3);
sym(1).Node = node;
} break;
@@ -687,7 +687,7 @@ case 86: {
AST::ObjectLiteral *node = makeAstNode<AST::ObjectLiteral> (driver->nodePool(),
sym(2).PropertyNameAndValueList->finish ());
node->lbraceToken = loc(1);
- node->lbraceToken = loc(4);
+ node->rbraceToken = loc(4);
sym(1).Node = node;
} break;
diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h
index 941a1b3..0b9bde6 100644
--- a/src/declarative/qml/qdeclarativebinding_p.h
+++ b/src/declarative/qml/qdeclarativebinding_p.h
@@ -64,7 +64,7 @@
QT_BEGIN_NAMESPACE
-class Q_DECLARATIVE_EXPORT QDeclarativeAbstractBinding
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAbstractBinding
{
public:
typedef QWeakPointer<QDeclarativeAbstractBinding> Pointer;
@@ -138,7 +138,7 @@ private:
class QDeclarativeContext;
class QDeclarativeBindingPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeBinding : public QDeclarativeExpression, public QDeclarativeAbstractBinding
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeBinding : public QDeclarativeExpression, public QDeclarativeAbstractBinding
{
Q_OBJECT
public:
diff --git a/src/declarative/qml/qdeclarativecompiledbindings.cpp b/src/declarative/qml/qdeclarativecompiledbindings.cpp
index 5f0fd56..fbe5829 100644
--- a/src/declarative/qml/qdeclarativecompiledbindings.cpp
+++ b/src/declarative/qml/qdeclarativecompiledbindings.cpp
@@ -601,7 +601,7 @@ struct QDeclarativeBindingCompilerPrivate
QDeclarativeImports imports;
QDeclarativeEnginePrivate *engine;
- QString contextName() const { return QLatin1String("$$$SCOPE_") + QString::number((intptr_t)context, 16); }
+ QString contextName() const { return QLatin1String("$$$SCOPE_") + QString::number((quintptr)context, 16); }
bool compile(QDeclarativeJS::AST::Node *);
diff --git a/src/declarative/qml/qdeclarativecompileddata.cpp b/src/declarative/qml/qdeclarativecompileddata.cpp
index 5d73d89..a4ecc77 100644
--- a/src/declarative/qml/qdeclarativecompileddata.cpp
+++ b/src/declarative/qml/qdeclarativecompileddata.cpp
@@ -205,7 +205,7 @@ const QMetaObject *QDeclarativeCompiledData::TypeReference::metaObject() const
return type->metaObject();
} else {
Q_ASSERT(component);
- return static_cast<QDeclarativeComponentPrivate *>(QObjectPrivate::get(component))->cc->root;
+ return component->root;
}
}
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index dc28e22..b2740b8 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -590,7 +590,7 @@ bool QDeclarativeCompiler::compile(QDeclarativeEngine *engine,
COMPILE_EXCEPTION(parserRef->refObjects.first(), err);
}
} else if (tref.typeData) {
- ref.component = tref.typeData->component();
+ ref.component = tref.typeData->compiledData();
ref.ref = tref.typeData;
ref.ref->addref();
}
@@ -722,7 +722,7 @@ bool QDeclarativeCompiler::buildObject(Object *obj, const BindingContext &ctxt)
obj->metatype = tr.metaObject();
if (tr.component)
- obj->url = tr.component->url();
+ obj->url = tr.component->url;
if (tr.type)
obj->typeName = tr.type->qmlTypeName();
obj->className = tr.className;
@@ -940,7 +940,7 @@ void QDeclarativeCompiler::genObject(QDeclarativeParser::Object *obj)
// ### Surely the creation of this property cache could be more efficient
QDeclarativePropertyCache *propertyCache = 0;
if (tr.component)
- propertyCache = QDeclarativeComponentPrivate::get(tr.component)->cc->rootPropertyCache->copy();
+ propertyCache = tr.component->rootPropertyCache->copy();
else
propertyCache = enginePrivate->cache(obj->metaObject()->superClass())->copy();
@@ -957,7 +957,7 @@ void QDeclarativeCompiler::genObject(QDeclarativeParser::Object *obj)
output->bytecode << meta;
} else if (obj == unitRoot) {
if (tr.component)
- output->rootPropertyCache = QDeclarativeComponentPrivate::get(tr.component)->cc->rootPropertyCache;
+ output->rootPropertyCache = tr.component->rootPropertyCache;
else
output->rootPropertyCache = enginePrivate->cache(obj->metaObject());
@@ -1932,6 +1932,9 @@ bool QDeclarativeCompiler::buildPropertyAssignment(QDeclarativeParser::Property
{
obj->addValueProperty(prop);
+ if (prop->values.count() > 1)
+ COMPILE_EXCEPTION(prop->values.at(0), tr( "Cannot assign multiple values to a singular property") );
+
for (int ii = 0; ii < prop->values.count(); ++ii) {
Value *v = prop->values.at(ii);
if (v->object) {
@@ -2562,8 +2565,8 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
QStringList alias = astNodeToStringList(node);
- if (alias.count() != 1 && alias.count() != 2)
- COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>"));
+ if (alias.count() < 1 || alias.count() > 3)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>"));
if (!compileState.ids.contains(alias.at(0)))
COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. Unable to find id \"%1\"").arg(alias.at(0)));
@@ -2575,11 +2578,14 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
int propIdx = -1;
int flags = 0;
bool writable = false;
- if (alias.count() == 2) {
+ if (alias.count() == 2 || alias.count() == 3) {
propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData());
- if (-1 == propIdx)
+ if (-1 == propIdx) {
COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+ } else if (propIdx > 0xFFFF) {
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Alias property exceeds alias bounds"));
+ }
QMetaProperty aliasProperty = idObject->metaObject()->property(propIdx);
if (!aliasProperty.isScriptable())
@@ -2587,6 +2593,22 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
writable = aliasProperty.isWritable();
+ if (alias.count() == 3) {
+ QDeclarativeValueType *valueType = enginePrivate->valueTypes[aliasProperty.type()];
+ if (!valueType)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+
+ propIdx |= ((unsigned int)aliasProperty.type()) << 24;
+
+ int valueTypeIndex = valueType->metaObject()->indexOfProperty(alias.at(2).toUtf8().constData());
+ if (valueTypeIndex == -1)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+ Q_ASSERT(valueTypeIndex <= 0xFF);
+
+ aliasProperty = valueType->metaObject()->property(valueTypeIndex);
+ propIdx |= (valueTypeIndex << 16);
+ }
+
if (aliasProperty.isEnumType())
typeName = "int"; // Avoid introducing a dependency on the aliased metaobject
else
diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h
index 89eef09..43a0901 100644
--- a/src/declarative/qml/qdeclarativecompiler_p.h
+++ b/src/declarative/qml/qdeclarativecompiler_p.h
@@ -93,10 +93,11 @@ public:
QByteArray className;
QDeclarativeType *type;
- QDeclarativeComponent *component;
+// QDeclarativeComponent *component;
+ QDeclarativeCompiledData *component;
QDeclarativeRefCount *ref;
- QObject *createInstance(QDeclarativeContextData *, const QBitField &) const;
+ QObject *createInstance(QDeclarativeContextData *, const QBitField &, QList<QDeclarativeError> *) const;
const QMetaObject *metaObject() const;
};
QList<TypeReference> types;
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index b532b0c..2686ce3 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -57,7 +57,6 @@
#include <QStack>
#include <QStringList>
-#include <QFileInfo>
#include <QtCore/qdebug.h>
#include <QApplication>
@@ -99,6 +98,43 @@ class QByteArray;
int width = item->width(); // width = 200
\endcode
+
+ \section2 Network Components
+
+ If the URL passed to QDeclarativeComponent is a network resource, or if the QML document references a
+ network resource, the QDeclarativeComponent has to fetch the network data before it is able to create
+ objects. In this case, the QDeclarativeComponent will have a \l {QDeclarativeComponent::Loading}{Loading}
+ \l {QDeclarativeComponent::status()}{status}. An application will have to wait until the component
+ is \l {QDeclarativeComponent::Ready}{Ready} before calling \l {QDeclarativeComponent::create()}.
+
+ The following example shows how to load a QML file from a network resource. After creating
+ the QDeclarativeComponent, it tests whether the component is loading. If it is, it connects to the
+ QDeclarativeComponent::statusChanged() signal and otherwise calls the \c {continueLoading()} method
+ directly. Note that QDeclarativeComponent::isLoading() may be false for a network component if the
+ component has been cached and is ready immediately.
+
+ \code
+ MyApplication::MyApplication()
+ {
+ // ...
+ component = new QDeclarativeComponent(engine, QUrl("http://www.example.com/main.qml"));
+ if (component->isLoading())
+ QObject::connect(component, SIGNAL(statusChanged(QDeclarativeComponent::Status)),
+ this, SLOT(continueLoading()));
+ else
+ continueLoading();
+ }
+
+ void MyApplication::continueLoading()
+ {
+ if (component->isError()) {
+ qWarning() << component->errors();
+ } else {
+ QObject *myObject = component->create();
+ }
+ }
+ \endcode
+
\sa {Using QML in C++ Applications}, {Integrating QML with existing Qt UI code}
*/
@@ -734,48 +770,45 @@ QDeclarativeComponentPrivate::beginCreate(QDeclarativeContextData *context, cons
return 0;
}
- QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine);
+ return begin(context, creationContext, cc, start, count, &state, 0, bindings);
+}
+
+QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *parentContext,
+ QDeclarativeContextData *componentCreationContext,
+ QDeclarativeCompiledData *component, int start, int count,
+ ConstructionState *state, QList<QDeclarativeError> *errors,
+ const QBitField &bindings)
+{
+ QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(parentContext->engine);
+ bool isRoot = !enginePriv->inBeginCreate;
+
+ Q_ASSERT(!isRoot || state); // Either this isn't a root component, or a state data must be provided
+ Q_ASSERT((state != 0) ^ (errors != 0)); // One of state or errors (but not both) must be provided
- bool isRoot = !ep->inBeginCreate;
if (isRoot)
QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Creating);
- QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::Creating, cc->url);
QDeclarativeContextData *ctxt = new QDeclarativeContextData;
ctxt->isInternal = true;
- ctxt->url = cc->url;
- ctxt->imports = cc->importCache;
+ ctxt->url = component->url;
+ ctxt->imports = component->importCache;
// Nested global imports
- if (creationContext && start != -1)
- ctxt->importedScripts = creationContext->importedScripts;
-
- cc->importCache->addref();
- ctxt->setParent(context);
-
- QObject *rv = begin(ctxt, ep, cc, start, count, &state, bindings);
+ if (componentCreationContext && start != -1)
+ ctxt->importedScripts = componentCreationContext->importedScripts;
- if (ep->isDebugging && rv) {
- if (!context->isInternal)
- context->asQDeclarativeContextPrivate()->instances.append(rv);
- QDeclarativeEngineDebugServer::instance()->objectCreated(engine, rv);
- }
-
- return rv;
-}
+ component->importCache->addref();
+ ctxt->setParent(parentContext);
-QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *ctxt, QDeclarativeEnginePrivate *enginePriv,
- QDeclarativeCompiledData *component, int start, int count,
- ConstructionState *state, const QBitField &bindings)
-{
- bool isRoot = !enginePriv->inBeginCreate;
enginePriv->inBeginCreate = true;
QDeclarativeVME vme;
QObject *rv = vme.run(ctxt, component, start, count, bindings);
- if (vme.isError())
- state->errors = vme.errors();
+ if (vme.isError()) {
+ if(errors) *errors = vme.errors();
+ else state->errors = vme.errors();
+ }
if (isRoot) {
enginePriv->inBeginCreate = false;
@@ -795,6 +828,12 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *ctxt, QDe
enginePriv->inProgressCreations++;
}
+ if (enginePriv->isDebugging && rv) {
+ if (!parentContext->isInternal)
+ parentContext->asQDeclarativeContextPrivate()->instances.append(rv);
+ QDeclarativeEngineDebugServer::instance()->objectCreated(parentContext->engine, rv);
+ }
+
return rv;
}
diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h
index a551cc8..7b30bad 100644
--- a/src/declarative/qml/qdeclarativecomponent_p.h
+++ b/src/declarative/qml/qdeclarativecomponent_p.h
@@ -109,9 +109,10 @@ public:
};
ConstructionState state;
- static QObject *begin(QDeclarativeContextData *ctxt, QDeclarativeEnginePrivate *enginePriv,
- QDeclarativeCompiledData *component, int start, int count,
- ConstructionState *state, const QBitField &bindings = QBitField());
+ static QObject *begin(QDeclarativeContextData *parentContext, QDeclarativeContextData *componentCreationContext,
+ QDeclarativeCompiledData *component, int start, int count,
+ ConstructionState *state, QList<QDeclarativeError> *errors,
+ const QBitField &bindings = QBitField());
static void beginDeferred(QDeclarativeEnginePrivate *enginePriv, QObject *object,
ConstructionState *state);
static void complete(QDeclarativeEnginePrivate *enginePriv, ConstructionState *state);
diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp
index 59d5cfa..3ee0e6f 100644
--- a/src/declarative/qml/qdeclarativecontext.cpp
+++ b/src/declarative/qml/qdeclarativecontext.cpp
@@ -86,9 +86,14 @@ QDeclarativeContextPrivate::QDeclarativeContextPrivate()
QDeclarativeComponent component(&engine);
component.setData("import QtQuick 1.0\nListView { model: myModel }", QUrl());
- component.create(context);
+ QObject *window = component.create(context);
\endcode
+ Note it is the responsibility of the creator to delete any QDeclarativeContext it
+ constructs. If the \c context object in the example is no longer needed when the
+ \c window component instance is destroyed, the \c context must be destroyed explicitly.
+ The simplest way to ensure this is to set \c window as the parent of \c context.
+
To simplify binding and maintaining larger data sets, a context object can be set
on a QDeclarativeContext. All the properties of the context object are available
by name in the context, as though they were all individually added through calls
@@ -119,11 +124,13 @@ QDeclarativeContextPrivate::QDeclarativeContextPrivate()
All properties added explicitly by QDeclarativeContext::setContextProperty() take
precedence over the context object's properties.
- Contexts form a hierarchy. The root of this hierarchy is the QDeclarativeEngine's
- \l {QDeclarativeEngine::rootContext()}{root context}. A component instance can
- access the data in its own context, as well as all its ancestor contexts. Data
- can be made available to all instances by modifying the
- \l {QDeclarativeEngine::rootContext()}{root context}.
+ \section2 The Context Hierarchy
+
+ Contexts form a hierarchy. The root of this hierarchy is the QML engine's
+ \l {QDeclarativeEngine::rootContext()}{root context}. Child contexts inherit
+ the context properties of their parents; if a child context sets a context property
+ that already exists in its parent, the new context property overrides that of the
+ parent.
The following example defines two contexts - \c context1 and \c context2. The
second context overrides the "b" context property inherited from the first with a
@@ -144,7 +151,7 @@ QDeclarativeContextPrivate::QDeclarativeContextPrivate()
context, their bindings are. If a context is destroyed, the property bindings of
outstanding QML objects will stop evaluating.
- \note Setting the context object or adding new context properties after an object
+ \warning Setting the context object or adding new context properties after an object
has been created in that context is an expensive operation (essentially forcing all bindings
to reevaluate). Thus whenever possible you should complete "setup" of the context
before using it to create any objects.
@@ -467,7 +474,7 @@ int QDeclarativeContextPrivate::context_count(QDeclarativeListProperty<QObject>
{
QDeclarativeContext *context = static_cast<QDeclarativeContext*>(prop->object);
QDeclarativeContextPrivate *d = QDeclarativeContextPrivate::get(context);
- int contextProperty = (int)(intptr_t)prop->data;
+ int contextProperty = (int)(quintptr)prop->data;
if (d->propertyValues.at(contextProperty).userType() != qMetaTypeId<QList<QObject*> >()) {
return 0;
@@ -480,7 +487,7 @@ QObject *QDeclarativeContextPrivate::context_at(QDeclarativeListProperty<QObject
{
QDeclarativeContext *context = static_cast<QDeclarativeContext*>(prop->object);
QDeclarativeContextPrivate *d = QDeclarativeContextPrivate::get(context);
- int contextProperty = (int)(intptr_t)prop->data;
+ int contextProperty = (int)(quintptr)prop->data;
if (d->propertyValues.at(contextProperty).userType() != qMetaTypeId<QList<QObject*> >()) {
return 0;
diff --git a/src/declarative/qml/qdeclarativedata_p.h b/src/declarative/qml/qdeclarativedata_p.h
index e916273..def4188 100644
--- a/src/declarative/qml/qdeclarativedata_p.h
+++ b/src/declarative/qml/qdeclarativedata_p.h
@@ -64,6 +64,7 @@ class QDeclarativeAbstractBinding;
class QDeclarativeContext;
class QDeclarativePropertyCache;
class QDeclarativeContextData;
+class QDeclarativeNotifier;
// This class is structured in such a way, that simply zero'ing it is the
// default state for elemental object allocations. This is crucial in the
// workings of the QDeclarativeInstruction::CreateSimpleObject instruction.
@@ -75,20 +76,23 @@ public:
: ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false),
context(0), outerContext(0), bindings(0), nextContextObject(0), prevContextObject(0), bindingBitsSize(0),
bindingBits(0), lineNumber(0), columnNumber(0), deferredComponent(0), deferredIdx(0),
- attachedProperties(0), scriptValue(0), objectDataRefCount(0), propertyCache(0), guards(0) {
+ scriptValue(0), objectDataRefCount(0), propertyCache(0), guards(0), extendedData(0) {
init();
}
static inline void init() {
QAbstractDeclarativeData::destroyed = destroyed;
QAbstractDeclarativeData::parentChanged = parentChanged;
+ QAbstractDeclarativeData::objectNameChanged = objectNameChanged;
}
static void destroyed(QAbstractDeclarativeData *, QObject *);
static void parentChanged(QAbstractDeclarativeData *, QObject *, QObject *);
+ static void objectNameChanged(QAbstractDeclarativeData *, QObject *);
void destroyed(QObject *);
void parentChanged(QObject *, QObject *);
+ void objectNameChanged(QObject *);
void setImplicitDestructible() {
if (!explicitIndestructibleSet) indestructible = false;
@@ -123,8 +127,6 @@ public:
QDeclarativeCompiledData *deferredComponent; // Can't this be found from the context?
unsigned int deferredIdx;
- QHash<int, QObject *> *attachedProperties;
-
// ### Can we make this QScriptValuePrivate so we incur no additional allocation
// cost?
QScriptValue *scriptValue;
@@ -147,6 +149,18 @@ public:
return 0;
}
}
+
+ QDeclarativeNotifier *objectNameNotifier() const;
+ QHash<int, QObject *> *attachedProperties() const;
+
+ struct ExtendedData {
+ ExtendedData();
+ ~ExtendedData();
+
+ QHash<int, QObject *> attachedProperties;
+ void *objectNameNotifier;
+ };
+ mutable ExtendedData *extendedData;
};
template<class T>
diff --git a/src/declarative/qml/qdeclarativedom_p.h b/src/declarative/qml/qdeclarativedom_p.h
index 6043ead..ee3625c 100644
--- a/src/declarative/qml/qdeclarativedom_p.h
+++ b/src/declarative/qml/qdeclarativedom_p.h
@@ -58,6 +58,8 @@
#include <QtCore/qlist.h>
#include <QtCore/qshareddata.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -76,7 +78,7 @@ class QIODevice;
class QDeclarativeDomDocumentPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomDocument
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomDocument
{
public:
QDeclarativeDomDocument();
@@ -96,7 +98,7 @@ private:
};
class QDeclarativeDomPropertyPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomProperty
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomProperty
{
public:
QDeclarativeDomProperty();
@@ -123,7 +125,7 @@ private:
};
class QDeclarativeDomDynamicPropertyPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomDynamicProperty
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomDynamicProperty
{
public:
QDeclarativeDomDynamicProperty();
@@ -151,7 +153,7 @@ private:
};
class QDeclarativeDomObjectPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomObject
{
public:
QDeclarativeDomObject();
@@ -196,7 +198,7 @@ private:
class QDeclarativeDomValuePrivate;
class QDeclarativeDomBasicValuePrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomValueLiteral
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomValueLiteral
{
public:
QDeclarativeDomValueLiteral();
@@ -211,7 +213,7 @@ private:
QSharedDataPointer<QDeclarativeDomBasicValuePrivate> d;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomValueBinding
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomValueBinding
{
public:
QDeclarativeDomValueBinding();
@@ -226,7 +228,7 @@ private:
QSharedDataPointer<QDeclarativeDomBasicValuePrivate> d;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomValueValueSource
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomValueValueSource
{
public:
QDeclarativeDomValueValueSource();
@@ -241,7 +243,7 @@ private:
QSharedDataPointer<QDeclarativeDomBasicValuePrivate> d;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomValueValueInterceptor
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomValueValueInterceptor
{
public:
QDeclarativeDomValueValueInterceptor();
@@ -257,7 +259,7 @@ private:
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomComponent : public QDeclarativeDomObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomComponent : public QDeclarativeDomObject
{
public:
QDeclarativeDomComponent();
@@ -268,7 +270,7 @@ public:
QDeclarativeDomObject componentRoot() const;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomValue
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomValue
{
public:
enum Type {
@@ -312,7 +314,7 @@ private:
QSharedDataPointer<QDeclarativeDomValuePrivate> d;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeDomList
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomList
{
public:
QDeclarativeDomList();
@@ -333,7 +335,7 @@ private:
};
class QDeclarativeDomImportPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeDomImport
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeDomImport
{
public:
enum Type { Library, File };
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 9ca7858..cd11336 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -68,6 +68,7 @@
#include "private/qdeclarativelist_p.h"
#include "private/qdeclarativetypenamecache_p.h"
#include "private/qdeclarativeinclude_p.h"
+#include "private/qdeclarativenotifier_p.h"
#include <QtCore/qmetaobject.h>
#include <QScriptClass>
@@ -104,6 +105,7 @@
#ifdef Q_OS_WIN // for %APPDATA%
#include <qt_windows.h>
#include <qlibrary.h>
+#include <windows.h>
#define CSIDL_APPDATA 0x001a // <username>\Application Data
#endif
@@ -174,6 +176,7 @@ struct StaticQtMetaObject : public QObject
};
static bool qt_QmlQtModule_registered = false;
+bool QDeclarativeEnginePrivate::qml_debugging_enabled = false;
void QDeclarativeEnginePrivate::defineModule()
{
@@ -468,6 +471,11 @@ void QDeclarativeData::parentChanged(QAbstractDeclarativeData *d, QObject *o, QO
static_cast<QDeclarativeData *>(d)->parentChanged(o, p);
}
+void QDeclarativeData::objectNameChanged(QAbstractDeclarativeData *d, QObject *o)
+{
+ static_cast<QDeclarativeData *>(d)->objectNameChanged(o);
+}
+
void QDeclarativeEnginePrivate::init()
{
Q_Q(QDeclarativeEngine);
@@ -601,7 +609,7 @@ QDeclarativeContext *QDeclarativeEngine::rootContext() const
QNetworkAccessManager with specialized caching, proxy and cookie
support.
- The factory must be set before exceuting the engine.
+ The factory must be set before executing the engine.
*/
void QDeclarativeEngine::setNetworkAccessManagerFactory(QDeclarativeNetworkAccessManagerFactory *factory)
{
@@ -871,7 +879,7 @@ void QDeclarativeEngine::setContextForObject(QObject *object, QDeclarativeContex
created by calling QDeclarativeCompnent::create() or
QDeclarativeComponent::beginCreate() which have CppOwnership by
default. The ownership of these root-level objects is considered to
- have been transfered to the C++ caller.
+ have been transferred to the C++ caller.
Objects not-created by QML have CppOwnership by default. The
exception to this is objects returned from a C++ method call. The
@@ -949,7 +957,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
if (!data)
return 0; // Attached properties are only on objects created by QML
- QObject *rv = data->attachedProperties?data->attachedProperties->value(id):0;
+ QObject *rv = data->extendedData?data->attachedProperties()->value(id):0;
if (rv || !create)
return rv;
@@ -959,11 +967,8 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
rv = pf(const_cast<QObject *>(object));
- if (rv) {
- if (!data->attachedProperties)
- data->attachedProperties = new QHash<int, QObject *>();
- data->attachedProperties->insert(id, rv);
- }
+ if (rv)
+ data->attachedProperties()->insert(id, rv);
return rv;
}
@@ -984,8 +989,6 @@ void QDeclarativeData::destroyed(QObject *object)
{
if (deferredComponent)
deferredComponent->release();
- if (attachedProperties)
- delete attachedProperties;
if (nextContextObject)
nextContextObject->prevContextObject = prevContextObject;
@@ -1019,6 +1022,9 @@ void QDeclarativeData::destroyed(QObject *object)
if (scriptValue)
delete scriptValue;
+ if (extendedData)
+ delete extendedData;
+
if (ownMemory)
delete this;
}
@@ -1028,6 +1034,11 @@ void QDeclarativeData::parentChanged(QObject *, QObject *parent)
if (!parent && scriptValue) { delete scriptValue; scriptValue = 0; }
}
+void QDeclarativeData::objectNameChanged(QObject *)
+{
+ if (extendedData) objectNameNotifier()->notify();
+}
+
bool QDeclarativeData::hasBindingBit(int bit) const
{
if (bindingBitsSize > bit)
@@ -1064,6 +1075,28 @@ void QDeclarativeData::setBindingBit(QObject *obj, int bit)
bindingBits[bit / 32] |= (1 << (bit % 32));
}
+QDeclarativeData::ExtendedData::ExtendedData()
+: objectNameNotifier(0)
+{
+}
+
+QDeclarativeData::ExtendedData::~ExtendedData()
+{
+ ((QDeclarativeNotifier *)&objectNameNotifier)->~QDeclarativeNotifier();
+}
+
+QDeclarativeNotifier *QDeclarativeData::objectNameNotifier() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return (QDeclarativeNotifier *)&extendedData->objectNameNotifier;
+}
+
+QHash<int, QObject *> *QDeclarativeData::attachedProperties() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return &extendedData->attachedProperties;
+}
+
/*!
Creates a QScriptValue allowing you to use \a object in QML script.
\a engine is the QDeclarativeEngine it is to be created in.
@@ -2159,4 +2192,42 @@ const QMetaObject *QDeclarativeEnginePrivate::metaObjectForType(int t) const
}
}
+bool QDeclarative_isFileCaseCorrect(const QString &fileName)
+{
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ QFileInfo info(fileName);
+
+ QString absolute = info.absoluteFilePath();
+
+#if defined(Q_OS_MAC)
+ QString canonical = info.canonicalFilePath();
+#elif defined(Q_OS_WIN32)
+ wchar_t buffer[1024];
+
+ DWORD rv = ::GetShortPathName((wchar_t*)absolute.utf16(), buffer, 1024);
+ if (rv == 0 || rv >= 1024) return true;
+ rv = ::GetLongPathName(buffer, buffer, 1024);
+ if (rv == 0 || rv >= 1024) return true;
+
+ QString canonical((QChar *)buffer);
+#endif
+
+ int absoluteLength = absolute.length();
+ int canonicalLength = canonical.length();
+
+ int length = qMin(absoluteLength, canonicalLength);
+ for (int ii = 0; ii < length; ++ii) {
+ const QChar &a = absolute.at(absoluteLength - 1 - ii);
+ const QChar &c = canonical.at(canonicalLength - 1 - ii);
+
+ if (a.toLower() != c.toLower())
+ return true;
+ if (a != c)
+ return false;
+ }
+#endif
+
+ return true;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index 8539fbf..deb4a77 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -321,6 +321,8 @@ public:
static QString urlToLocalFileOrQrc(const QUrl& url);
static void defineModule();
+
+ static bool qml_debugging_enabled;
};
/*!
diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp
index ed28185..bffe681 100644
--- a/src/declarative/qml/qdeclarativeenginedebug.cpp
+++ b/src/declarative/qml/qdeclarativeenginedebug.cpp
@@ -502,7 +502,8 @@ void QDeclarativeEngineDebugServer::setBinding(int objectId,
property.write(expression);
} else if (hasValidSignal(object, propertyName)) {
QDeclarativeExpression *declarativeExpression = new QDeclarativeExpression(context, object, expression.toString());
- QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression);
+ QDeclarativeExpression *oldExpression = QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression);
+ declarativeExpression->setSourceLocation(oldExpression->sourceFile(), oldExpression->lineNumber());
} else if (property.isProperty()) {
QDeclarativeBinding *binding = new QDeclarativeBinding(expression.toString(), object, context);
binding->setTarget(property);
diff --git a/src/declarative/qml/qdeclarativeenginedebug_p.h b/src/declarative/qml/qdeclarativeenginedebug_p.h
index 613f1fe..97b8121 100644
--- a/src/declarative/qml/qdeclarativeenginedebug_p.h
+++ b/src/declarative/qml/qdeclarativeenginedebug_p.h
@@ -117,10 +117,10 @@ private:
QList<QDeclarativeEngine *> m_engines;
QDeclarativeWatcher *m_watch;
};
-Q_DECLARATIVE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectData &);
-Q_DECLARATIVE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectData &);
-Q_DECLARATIVE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &);
-Q_DECLARATIVE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &);
+Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectData &);
+Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectData &);
+Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator<<(QDataStream &, const QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &);
+Q_DECLARATIVE_PRIVATE_EXPORT QDataStream &operator>>(QDataStream &, QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &);
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativefastproperties.cpp b/src/declarative/qml/qdeclarativefastproperties.cpp
index eb69b6a..78e3afd 100644
--- a/src/declarative/qml/qdeclarativefastproperties.cpp
+++ b/src/declarative/qml/qdeclarativefastproperties.cpp
@@ -51,10 +51,19 @@ QT_BEGIN_NAMESPACE
// primarily read from bindings is a candidate for inclusion as a fast
// property.
+static void QObject_objectName(QObject *object, void *output, QDeclarativeNotifierEndpoint *endpoint)
+{
+ if (endpoint)
+ endpoint->connect(QDeclarativeData::get(object, true)->objectNameNotifier());
+ *((QString *)output) = object->objectName();
+}
+
QDeclarativeFastProperties::QDeclarativeFastProperties()
{
add(&QDeclarativeItem::staticMetaObject, QDeclarativeItem::staticMetaObject.indexOfProperty("parent"),
QDeclarativeItemPrivate::parentProperty);
+ add(&QObject::staticMetaObject, QObject::staticMetaObject.indexOfProperty("objectName"),
+ QObject_objectName);
}
int QDeclarativeFastProperties::accessorIndexForProperty(const QMetaObject *metaObject, int propertyIndex)
diff --git a/src/declarative/qml/qdeclarativeglobal_p.h b/src/declarative/qml/qdeclarativeglobal_p.h
index 1041992..31fbb1e 100644
--- a/src/declarative/qml/qdeclarativeglobal_p.h
+++ b/src/declarative/qml/qdeclarativeglobal_p.h
@@ -64,6 +64,12 @@ QT_MODULE(Declarative)
return status == Yes; \
}
+#ifdef Q_OS_SYMBIAN
+#define Q_DECLARATIVE_PRIVATE_EXPORT
+#else
+#define Q_DECLARATIVE_PRIVATE_EXPORT Q_DECLARATIVE_EXPORT
+#endif
+
struct QDeclarativeGraphics_DerivedObject : public QObject
{
void setParent_noEvent(QObject *parent) {
@@ -75,6 +81,19 @@ struct QDeclarativeGraphics_DerivedObject : public QObject
};
/*!
+ Returns true if the case of \a fileName is equivalent to the file case of
+ \a fileName on disk, and false otherwise.
+
+ This is used to ensure that the behavior of QML on a case-insensitive file
+ system is the same as on a case-sensitive file system. This function
+ performs a "best effort" attempt to determine the real case of the file.
+ It may have false positives (say the case is correct when it isn't), but it
+ should never have a false negative (say the case is incorrect when it is
+ correct).
+*/
+bool QDeclarative_isFileCaseCorrect(const QString &fileName);
+
+/*!
Makes the \a object a child of \a parent. Note that when using this method,
neither \a parent nor the object's previous parent (if it had one) will
receive ChildRemoved or ChildAdded events.
diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp
index fe4ed48..6f5216a 100644
--- a/src/declarative/qml/qdeclarativeimport.cpp
+++ b/src/declarative/qml/qdeclarativeimport.cpp
@@ -351,7 +351,11 @@ bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath
{
QFile file(absoluteFilePath);
QString filecontent;
- if (file.open(QFile::ReadOnly)) {
+ if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) {
+ if (errorString)
+ *errorString = QDeclarativeImportDatabase::tr("cannot load module \"%1\": File name case mismatch for \"%2\"").arg(uri).arg(absoluteFilePath);
+ return false;
+ } else if (file.open(QFile::ReadOnly)) {
filecontent = QString::fromUtf8(file.readAll());
if (qmlImportTrace())
qDebug().nospace() << "QDeclarativeImports(" << qPrintable(base.toString()) << "::importExtension: "
@@ -913,6 +917,11 @@ bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QSt
}
if (!engineInitialized || !typesRegistered) {
+ if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) {
+ if (errorString)
+ *errorString = tr("File name case mismatch for \"%2\"").arg(absoluteFilePath);
+ return false;
+ }
QPluginLoader loader(absoluteFilePath);
if (!loader.load()) {
diff --git a/src/declarative/qml/qdeclarativeinfo.cpp b/src/declarative/qml/qdeclarativeinfo.cpp
index c6560dd..56c0599 100644
--- a/src/declarative/qml/qdeclarativeinfo.cpp
+++ b/src/declarative/qml/qdeclarativeinfo.cpp
@@ -55,7 +55,8 @@ QT_BEGIN_NAMESPACE
\fn QDeclarativeInfo qmlInfo(const QObject *object)
\relates QDeclarativeEngine
- \brief Prints warnings messages that include the file and line number for QML types.
+ Prints warning messages that include the file and line number for the
+ specified QML \a object.
When QML types display warning messages, it improves traceability
if they include the QML file and line number on which the
diff --git a/src/declarative/qml/qdeclarativemetatype_p.h b/src/declarative/qml/qdeclarativemetatype_p.h
index 382abd2..9c486d3 100644
--- a/src/declarative/qml/qdeclarativemetatype_p.h
+++ b/src/declarative/qml/qdeclarativemetatype_p.h
@@ -58,6 +58,7 @@
#include <QtCore/qglobal.h>
#include <QtCore/qvariant.h>
#include <QtCore/qbitarray.h>
+#include <private/qdeclarativeglobal_p.h>
QT_BEGIN_NAMESPACE
@@ -65,7 +66,7 @@ class QDeclarativeType;
class QDeclarativeCustomParser;
class QDeclarativeTypePrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeMetaType
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeMetaType
{
public:
static bool copy(int type, void *data, const void *copy = 0);
@@ -105,7 +106,7 @@ public:
static QList<QDeclarativePrivate::AutoParentFunction> parentFunctions();
};
-class Q_DECLARATIVE_EXPORT QDeclarativeType
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeType
{
public:
QByteArray typeName() const;
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index ab6ff74..eff59df 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -239,8 +239,13 @@ QDeclarativeObjectScriptClass::property(QObject *obj, const Identifier &name)
}
} else {
if (enginePriv->captureProperties && !(lastData->flags & QDeclarativePropertyCache::Data::IsConstant)) {
- enginePriv->capturedProperties <<
- QDeclarativeEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
+ if (lastData->coreIndex == 0) {
+ enginePriv->capturedProperties <<
+ QDeclarativeEnginePrivate::CapturedProperty(QDeclarativeData::get(obj, true)->objectNameNotifier());
+ } else {
+ enginePriv->capturedProperties <<
+ QDeclarativeEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
+ }
}
if (QDeclarativeValueTypeFactory::isValueType((uint)lastData->propType)) {
@@ -416,7 +421,7 @@ QScriptValue QDeclarativeObjectScriptClass::tostring(QScriptContext *context, QS
ret += QString::fromUtf8(obj->metaObject()->className());
ret += QLatin1String("(0x");
- ret += QString::number((intptr_t)obj,16);
+ ret += QString::number((quintptr)obj,16);
if (!objectName.isEmpty()) {
ret += QLatin1String(", \"");
@@ -833,9 +838,19 @@ QDeclarativeObjectMethodScriptClass::Value QDeclarativeObjectMethodScriptClass::
{
MethodData *method = static_cast<MethodData *>(o);
- if (method->data.flags & QDeclarativePropertyCache::Data::HasArguments) {
+ if (method->data.relatedIndex == -1)
+ return callPrecise(method->object, method->data, ctxt);
+ else
+ return callOverloaded(method, ctxt);
+}
+
+QDeclarativeObjectMethodScriptClass::Value
+QDeclarativeObjectMethodScriptClass::callPrecise(QObject *object, const QDeclarativePropertyCache::Data &data,
+ QScriptContext *ctxt)
+{
+ if (data.flags & QDeclarativePropertyCache::Data::HasArguments) {
- QMetaMethod m = method->object->metaObject()->method(method->data.coreIndex);
+ QMetaMethod m = object->metaObject()->method(data.coreIndex);
QList<QByteArray> argTypeNames = m.parameterTypes();
QVarLengthArray<int, 9> argTypes(argTypeNames.count());
@@ -843,7 +858,7 @@ QDeclarativeObjectMethodScriptClass::Value QDeclarativeObjectMethodScriptClass::
for (int ii = 0; ii < argTypeNames.count(); ++ii) {
argTypes[ii] = QMetaType::type(argTypeNames.at(ii));
if (argTypes[ii] == QVariant::Invalid)
- argTypes[ii] = enumType(method->object->metaObject(), QString::fromLatin1(argTypeNames.at(ii)));
+ argTypes[ii] = enumType(object->metaObject(), QString::fromLatin1(argTypeNames.at(ii)));
if (argTypes[ii] == QVariant::Invalid)
return Value(ctxt, ctxt->throwError(QString::fromLatin1("Unknown method parameter type: %1").arg(QLatin1String(argTypeNames.at(ii)))));
}
@@ -851,39 +866,301 @@ QDeclarativeObjectMethodScriptClass::Value QDeclarativeObjectMethodScriptClass::
if (argTypes.count() > ctxt->argumentCount())
return Value(ctxt, ctxt->throwError(QLatin1String("Insufficient arguments")));
- QVarLengthArray<MetaCallArgument, 9> args(argTypes.count() + 1);
- args[0].initAsType(method->data.propType, engine);
+ return callMethod(object, data.coreIndex, data.propType, argTypes.count(), argTypes.data(), ctxt);
- for (int ii = 0; ii < argTypes.count(); ++ii)
+ } else {
+
+ return callMethod(object, data.coreIndex, data.propType, 0, 0, ctxt);
+
+ }
+}
+
+QDeclarativeObjectMethodScriptClass::Value
+QDeclarativeObjectMethodScriptClass::callMethod(QObject *object, int index,
+ int returnType, int argCount, int *argTypes,
+ QScriptContext *ctxt)
+{
+ if (argCount > 0) {
+
+ QVarLengthArray<MetaCallArgument, 9> args(argCount + 1);
+ args[0].initAsType(returnType, engine);
+
+ for (int ii = 0; ii < argCount; ++ii)
args[ii + 1].fromScriptValue(argTypes[ii], engine, ctxt->argument(ii));
QVarLengthArray<void *, 9> argData(args.count());
for (int ii = 0; ii < args.count(); ++ii)
argData[ii] = args[ii].dataPtr();
- QMetaObject::metacall(method->object, QMetaObject::InvokeMetaMethod, method->data.coreIndex, argData.data());
+ QMetaObject::metacall(object, QMetaObject::InvokeMetaMethod, index, argData.data());
return args[0].toValue(engine);
- } else if (method->data.propType != 0) {
-
+ } else if (returnType != 0) {
+
MetaCallArgument arg;
- arg.initAsType(method->data.propType, engine);
+ arg.initAsType(returnType, engine);
void *args[] = { arg.dataPtr() };
- QMetaObject::metacall(method->object, QMetaObject::InvokeMetaMethod, method->data.coreIndex, args);
+ QMetaObject::metacall(object, QMetaObject::InvokeMetaMethod, index, args);
return arg.toValue(engine);
} else {
void *args[] = { 0 };
- QMetaObject::metacall(method->object, QMetaObject::InvokeMetaMethod, method->data.coreIndex, args);
+ QMetaObject::metacall(object, QMetaObject::InvokeMetaMethod, index, args);
return Value();
}
- return Value();
+}
+
+/*!
+Resolve the overloaded method to call. The algorithm works conceptually like this:
+ 1. Resolve the set of overloads it is *possible* to call.
+ Impossible overloads include those that have too many parameters or have parameters
+ of unknown type.
+ 2. Filter the set of overloads to only contain those with the closest number of
+ parameters.
+ For example, if we are called with 3 parameters and there are 2 overloads that
+ take 2 parameters and one that takes 3, eliminate the 2 parameter overloads.
+ 3. Find the best remaining overload based on its match score.
+ If two or more overloads have the same match score, call the last one. The match
+ score is constructed by adding the matchScore() result for each of the parameters.
+*/
+QDeclarativeObjectMethodScriptClass::Value
+QDeclarativeObjectMethodScriptClass::callOverloaded(MethodData *method, QScriptContext *ctxt)
+{
+ int argumentCount = ctxt->argumentCount();
+
+ QDeclarativePropertyCache::Data *best = 0;
+ int bestParameterScore = INT_MAX;
+ int bestMatchScore = INT_MAX;
+
+ QDeclarativePropertyCache::Data dummy;
+ QDeclarativePropertyCache::Data *attempt = &method->data;
+
+ do {
+ QList<QByteArray> methodArgTypeNames;
+
+ if (attempt->flags & QDeclarativePropertyCache::Data::HasArguments)
+ methodArgTypeNames = method->object->metaObject()->method(attempt->coreIndex).parameterTypes();
+
+ int methodArgumentCount = methodArgTypeNames.count();
+
+ if (methodArgumentCount > argumentCount)
+ continue; // We don't have sufficient arguments to call this method
+
+ int methodParameterScore = argumentCount - methodArgumentCount;
+ if (methodParameterScore > bestParameterScore)
+ continue; // We already have a better option
+
+ int methodMatchScore = 0;
+ QVarLengthArray<int, 9> methodArgTypes(methodArgumentCount);
+
+ bool unknownArgument = false;
+ for (int ii = 0; ii < methodArgumentCount; ++ii) {
+ methodArgTypes[ii] = QMetaType::type(methodArgTypeNames.at(ii));
+ if (methodArgTypes[ii] == QVariant::Invalid)
+ methodArgTypes[ii] = enumType(method->object->metaObject(),
+ QString::fromLatin1(methodArgTypeNames.at(ii)));
+ if (methodArgTypes[ii] == QVariant::Invalid) {
+ unknownArgument = true;
+ break;
+ }
+ methodMatchScore += matchScore(ctxt->argument(ii), methodArgTypes[ii], methodArgTypeNames.at(ii));
+ }
+ if (unknownArgument)
+ continue; // We don't understand all the parameters
+
+ if (bestParameterScore > methodParameterScore || bestMatchScore > methodMatchScore) {
+ best = attempt;
+ bestParameterScore = methodParameterScore;
+ bestMatchScore = methodMatchScore;
+ }
+
+ if (bestParameterScore == 0 && bestMatchScore == 0)
+ break; // We can't get better than that
+
+ } while((attempt = relatedMethod(method->object, attempt, dummy)) != 0);
+
+ if (best) {
+ return callPrecise(method->object, *best, ctxt);
+ } else {
+ QString error = QLatin1String("Unable to determine callable overload. Candidates are:");
+ QDeclarativePropertyCache::Data *candidate = &method->data;
+ while (candidate) {
+ error += QLatin1String("\n ") + QString::fromUtf8(method->object->metaObject()->method(candidate->coreIndex).signature());
+ candidate = relatedMethod(method->object, candidate, dummy);
+ }
+ return Value(ctxt, ctxt->throwError(error));
+ }
+}
+
+/*!
+ Returns the match score for converting \a actual to be of type \a conversionType. A
+ zero score means "perfect match" whereas a higher score is worse.
+
+ The conversion table is copied out of the QtScript callQtMethod() function.
+*/
+int QDeclarativeObjectMethodScriptClass::matchScore(const QScriptValue &actual, int conversionType,
+ const QByteArray &conversionTypeName)
+{
+ if (actual.isNumber()) {
+ switch (conversionType) {
+ case QMetaType::Double:
+ return 0;
+ case QMetaType::Float:
+ return 1;
+ case QMetaType::LongLong:
+ case QMetaType::ULongLong:
+ return 2;
+ case QMetaType::Long:
+ case QMetaType::ULong:
+ return 3;
+ case QMetaType::Int:
+ case QMetaType::UInt:
+ return 4;
+ case QMetaType::Short:
+ case QMetaType::UShort:
+ return 5;
+ break;
+ case QMetaType::Char:
+ case QMetaType::UChar:
+ return 6;
+ default:
+ return 10;
+ }
+ } else if (actual.isString()) {
+ switch (conversionType) {
+ case QMetaType::QString:
+ return 0;
+ default:
+ return 10;
+ }
+ } else if (actual.isBoolean()) {
+ switch (conversionType) {
+ case QMetaType::Bool:
+ return 0;
+ default:
+ return 10;
+ }
+ } else if (actual.isDate()) {
+ switch (conversionType) {
+ case QMetaType::QDateTime:
+ return 0;
+ case QMetaType::QDate:
+ return 1;
+ case QMetaType::QTime:
+ return 2;
+ default:
+ return 10;
+ }
+ } else if (actual.isRegExp()) {
+ switch (conversionType) {
+ case QMetaType::QRegExp:
+ return 0;
+ default:
+ return 10;
+ }
+ } else if (actual.isVariant()) {
+ if (conversionType == qMetaTypeId<QVariant>())
+ return 0;
+ else if (actual.toVariant().userType() == conversionType)
+ return 0;
+ else
+ return 10;
+ } else if (actual.isArray()) {
+ switch (conversionType) {
+ case QMetaType::QStringList:
+ case QMetaType::QVariantList:
+ return 5;
+ default:
+ return 10;
+ }
+ } else if (actual.isQObject()) {
+ switch (conversionType) {
+ case QMetaType::QObjectStar:
+ return 0;
+ default:
+ return 10;
+ }
+ } else if (actual.isNull()) {
+ switch (conversionType) {
+ case QMetaType::VoidStar:
+ case QMetaType::QObjectStar:
+ return 0;
+ default:
+ if (!conversionTypeName.endsWith('*'))
+ return 10;
+ else
+ return 0;
+ }
+ } else {
+ return 10;
+ }
+}
+
+static inline int QMetaObject_methods(const QMetaObject *metaObject)
+{
+ struct Private
+ {
+ int revision;
+ int className;
+ int classInfoCount, classInfoData;
+ int methodCount, methodData;
+ };
+
+ return reinterpret_cast<const Private *>(metaObject->d.data)->methodCount;
+}
+
+static QByteArray QMetaMethod_name(const QMetaMethod &m)
+{
+ QByteArray sig = m.signature();
+ int paren = sig.indexOf('(');
+ if (paren == -1)
+ return sig;
+ else
+ return sig.left(paren);
+}
+
+/*!
+Returns the next related method, if one, or 0.
+*/
+QDeclarativePropertyCache::Data *
+QDeclarativeObjectMethodScriptClass::relatedMethod(QObject *object, QDeclarativePropertyCache::Data *current,
+ QDeclarativePropertyCache::Data &dummy)
+{
+ QDeclarativePropertyCache *cache = QDeclarativeData::get(object)->propertyCache;
+ if (current->relatedIndex == -1)
+ return 0;
+
+ if (cache) {
+ return cache->method(current->relatedIndex);
+ } else {
+ const QMetaObject *mo = object->metaObject();
+ int methodOffset = mo->methodCount() - QMetaObject_methods(mo);
+
+ while (methodOffset > current->relatedIndex) {
+ mo = mo->superClass();
+ methodOffset -= QMetaObject_methods(mo);
+ }
+
+ QMetaMethod method = mo->method(current->relatedIndex);
+ dummy.load(method);
+
+ // Look for overloaded methods
+ QByteArray methodName = QMetaMethod_name(method);
+ for (int ii = current->relatedIndex - 1; ii >= methodOffset; --ii) {
+ if (methodName == QMetaMethod_name(mo->method(ii))) {
+ dummy.relatedIndex = ii;
+ return &dummy;
+ }
+ }
+
+ return &dummy;
+ }
}
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass_p.h b/src/declarative/qml/qdeclarativeobjectscriptclass_p.h
index 75e384c..7956c40 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass_p.h
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass_p.h
@@ -65,6 +65,7 @@ class QDeclarativeEngine;
class QScriptContext;
class QScriptEngine;
class QDeclarativeContextData;
+class MethodData;
class Q_AUTOTEST_EXPORT QDeclarativeObjectMethodScriptClass : public QScriptDeclarativeClass
{
@@ -82,6 +83,14 @@ protected:
private:
int enumType(const QMetaObject *, const QString &);
+ Value callPrecise(QObject *, const QDeclarativePropertyCache::Data &, QScriptContext *);
+ Value callOverloaded(MethodData *, QScriptContext *);
+ Value callMethod(QObject *, int index, int returnType, int argCount, int *argTypes, QScriptContext *ctxt);
+
+ int matchScore(const QScriptValue &, int, const QByteArray &);
+ QDeclarativePropertyCache::Data *relatedMethod(QObject *, QDeclarativePropertyCache::Data *current,
+ QDeclarativePropertyCache::Data &dummy);
+
PersistentIdentifier m_connectId;
PersistentIdentifier m_disconnectId;
QScriptValue m_connect;
diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h
index c58aebc..77184c2 100644
--- a/src/declarative/qml/qdeclarativeparser_p.h
+++ b/src/declarative/qml/qdeclarativeparser_p.h
@@ -54,7 +54,6 @@
//
#include "qdeclarative.h"
-#include "private/qdeclarativerefcount_p.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qlist.h>
@@ -63,6 +62,8 @@
#include <QtCore/qstringlist.h>
#include <private/qobject_p.h>
+#include <private/qdeclarativerefcount_p.h>
+#include <private/qdeclarativeglobal_p.h>
QT_BEGIN_HEADER
@@ -355,7 +356,7 @@ namespace QDeclarativeParser
// True if the setting of this property will be deferred. Set by the
// QDeclarativeCompiler
bool isDeferred;
- // True if this property is a value-type psuedo-property
+ // True if this property is a value-type pseudo-property
bool isValueTypeSubProperty;
LocationSpan location;
diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h
index d45ddbc..388c92e 100644
--- a/src/declarative/qml/qdeclarativeprivate.h
+++ b/src/declarative/qml/qdeclarativeprivate.h
@@ -55,9 +55,6 @@
#include <QtCore/qglobal.h>
#include <QtCore/qvariant.h>
-#ifndef Q_OS_WIN
-#include <stdint.h>
-#endif
QT_BEGIN_HEADER
@@ -105,7 +102,7 @@ namespace QDeclarativePrivate
template<class From, class To>
struct StaticCastSelectorClass<From, To, sizeof(int)>
{
- static inline int cast() { return int(reinterpret_cast<intptr_t>(static_cast<To *>(reinterpret_cast<From *>(0x10000000)))) - 0x10000000; }
+ static inline int cast() { return int(reinterpret_cast<quintptr>(static_cast<To *>(reinterpret_cast<From *>(0x10000000)))) - 0x10000000; }
};
template<class From, class To>
diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp
index b5fb619..1395e97 100644
--- a/src/declarative/qml/qdeclarativeproperty.cpp
+++ b/src/declarative/qml/qdeclarativeproperty.cpp
@@ -1408,8 +1408,8 @@ static inline void flush_vme_signal(const QObject *object, int index)
int methodOffset = metaObject->methodOffset();
while (methodOffset > index) {
- methodOffset -= QMetaObject_methods(metaObject);
metaObject = metaObject->d.superdata;
+ methodOffset -= QMetaObject_methods(metaObject);
}
QDeclarativeVMEMetaObject *vme =
diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h
index a8438c8..a9d6979 100644
--- a/src/declarative/qml/qdeclarativeproperty_p.h
+++ b/src/declarative/qml/qdeclarativeproperty_p.h
@@ -55,17 +55,17 @@
#include "qdeclarativeproperty.h"
-#include "private/qdeclarativepropertycache_p.h"
-#include "private/qdeclarativeguard_p.h"
-
#include <private/qobject_p.h>
+#include <private/qdeclarativeglobal_p.h>
+#include <private/qdeclarativepropertycache_p.h>
+#include <private/qdeclarativeguard_p.h>
QT_BEGIN_NAMESPACE
class QDeclarativeContext;
class QDeclarativeEnginePrivate;
class QDeclarativeExpression;
-class Q_DECLARATIVE_EXPORT QDeclarativePropertyPrivate
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativePropertyPrivate
{
public:
enum WriteFlag { BypassInterceptor = 0x01, DontRemoveBinding = 0x02 };
diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp
index 9e1ceb8..0adcdbd 100644
--- a/src/declarative/qml/qdeclarativepropertycache.cpp
+++ b/src/declarative/qml/qdeclarativepropertycache.cpp
@@ -93,6 +93,7 @@ void QDeclarativePropertyCache::Data::load(const QMetaProperty &p, QDeclarativeE
void QDeclarativePropertyCache::Data::load(const QMetaMethod &m)
{
coreIndex = m.methodIndex();
+ relatedIndex = -1;
flags |= Data::IsFunction;
if (m.methodType() == QMetaMethod::Signal)
flags |= Data::IsSignal;
@@ -140,15 +141,25 @@ void QDeclarativePropertyCache::clear()
if (indexCache.at(ii)) indexCache.at(ii)->release();
}
+ for (int ii = 0; ii < methodIndexCache.count(); ++ii) {
+ RData *data = methodIndexCache.at(ii);
+ if (data) data->release();
+ }
+
for (StringCache::ConstIterator iter = stringCache.begin();
- iter != stringCache.end(); ++iter)
- (*iter)->release();
+ iter != stringCache.end(); ++iter) {
+ RData *data = (*iter);
+ data->release();
+ }
for (IdentifierCache::ConstIterator iter = identifierCache.begin();
- iter != identifierCache.end(); ++iter)
- (*iter)->release();
+ iter != identifierCache.end(); ++iter) {
+ RData *data = (*iter);
+ data->release();
+ }
indexCache.clear();
+ methodIndexCache.clear();
stringCache.clear();
identifierCache.clear();
}
@@ -202,12 +213,16 @@ QDeclarativePropertyCache *QDeclarativePropertyCache::copy() const
{
QDeclarativePropertyCache *cache = new QDeclarativePropertyCache(engine);
cache->indexCache = indexCache;
+ cache->methodIndexCache = methodIndexCache;
cache->stringCache = stringCache;
cache->identifierCache = identifierCache;
for (int ii = 0; ii < indexCache.count(); ++ii) {
if (indexCache.at(ii)) indexCache.at(ii)->addref();
}
+ for (int ii = 0; ii < methodIndexCache.count(); ++ii) {
+ if (methodIndexCache.at(ii)) methodIndexCache.at(ii)->addref();
+ }
for (StringCache::ConstIterator iter = stringCache.begin(); iter != stringCache.end(); ++iter)
(*iter)->addref();
for (IdentifierCache::ConstIterator iter = identifierCache.begin(); iter != identifierCache.end(); ++iter)
@@ -221,43 +236,14 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
{
QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
- int propCount = metaObject->propertyCount();
- int propOffset = metaObject->propertyOffset();
-
- indexCache.resize(propCount);
- for (int ii = propOffset; ii < propCount; ++ii) {
- QMetaProperty p = metaObject->property(ii);
- if (!p.isScriptable())
- continue;
-
- QString propName = QString::fromUtf8(p.name());
-
- RData *data = new RData;
- data->identifier = enginePriv->objectClass->createPersistentIdentifier(propName);
-
- data->load(p, engine);
- data->flags |= propertyFlags;
-
- indexCache[ii] = data;
-
- if (stringCache.contains(propName)) {
- stringCache[propName]->release();
- identifierCache[data->identifier.identifier]->release();
- }
-
- stringCache.insert(propName, data);
- identifierCache.insert(data->identifier.identifier, data);
- data->addref();
- data->addref();
- }
-
int methodCount = metaObject->methodCount();
- int methodOffset = qMax(2, metaObject->methodOffset()); // 2 to block the destroyed signal
+ // 3 to block the destroyed signal and the deleteLater() slot
+ int methodOffset = qMax(3, metaObject->methodOffset());
methodIndexCache.resize(methodCount);
for (int ii = methodOffset; ii < methodCount; ++ii) {
QMetaMethod m = metaObject->method(ii);
- if (m.access() == QMetaMethod::Private)
+ if (m.access() == QMetaMethod::Private)
continue;
QString methodName = QString::fromUtf8(m.signature());
@@ -267,11 +253,7 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
RData *data = new RData;
data->identifier = enginePriv->objectClass->createPersistentIdentifier(methodName);
-
- if (stringCache.contains(methodName)) {
- stringCache[methodName]->release();
- identifierCache[data->identifier.identifier]->release();
- }
+ methodIndexCache[ii] = data;
data->load(m);
if (m.methodType() == QMetaMethod::Slot || m.methodType() == QMetaMethod::Method)
@@ -279,73 +261,74 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
else if (m.methodType() == QMetaMethod::Signal)
data->flags |= signalFlags;
- methodIndexCache[ii] = data;
+ if (stringCache.contains(methodName)) {
+ RData *old = stringCache[methodName];
+ // We only overload methods in the same class, exactly like C++
+ if (old->flags & Data::IsFunction && old->coreIndex >= methodOffset)
+ data->relatedIndex = old->coreIndex;
+ stringCache[methodName]->release();
+ identifierCache[data->identifier.identifier]->release();
+ }
stringCache.insert(methodName, data);
identifierCache.insert(data->identifier.identifier, data);
data->addref();
+ data->addref();
}
-}
-void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaObject *metaObject)
-{
- Q_ASSERT(engine);
- Q_ASSERT(metaObject);
- QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
-
- clear();
-
- // ### The properties/methods should probably be spliced on a per-metaobject basis
int propCount = metaObject->propertyCount();
+ int propOffset = metaObject->propertyOffset();
indexCache.resize(propCount);
- for (int ii = propCount - 1; ii >= 0; --ii) {
+ for (int ii = propOffset; ii < propCount; ++ii) {
QMetaProperty p = metaObject->property(ii);
- if (!p.isScriptable()) {
- indexCache[ii] = 0;
+ if (!p.isScriptable())
continue;
- }
+
QString propName = QString::fromUtf8(p.name());
RData *data = new RData;
data->identifier = enginePriv->objectClass->createPersistentIdentifier(propName);
+ indexCache[ii] = data;
data->load(p, engine);
+ data->flags |= propertyFlags;
- indexCache[ii] = data;
-
- if (stringCache.contains(propName))
- continue;
+ if (stringCache.contains(propName)) {
+ stringCache[propName]->release();
+ identifierCache[data->identifier.identifier]->release();
+ }
stringCache.insert(propName, data);
identifierCache.insert(data->identifier.identifier, data);
data->addref();
data->addref();
}
+}
- int methodCount = metaObject->methodCount();
- for (int ii = methodCount - 1; ii >= 3; --ii) { // >=3 to block the destroyed signal and deleteLater() slot
- QMetaMethod m = metaObject->method(ii);
- if (m.access() == QMetaMethod::Private)
- continue;
- QString methodName = QString::fromUtf8(m.signature());
+void QDeclarativePropertyCache::updateRecur(QDeclarativeEngine *engine, const QMetaObject *metaObject)
+{
+ if (!metaObject)
+ return;
- int parenIdx = methodName.indexOf(QLatin1Char('('));
- Q_ASSERT(parenIdx != -1);
- methodName = methodName.left(parenIdx);
+ updateRecur(engine, metaObject->superClass());
- if (stringCache.contains(methodName))
- continue;
+ append(engine, metaObject);
+}
- RData *data = new RData;
- data->identifier = enginePriv->objectClass->createPersistentIdentifier(methodName);
+void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaObject *metaObject)
+{
+ Q_ASSERT(engine);
+ Q_ASSERT(metaObject);
+ QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
- data->load(m);
+ clear();
- stringCache.insert(methodName, data);
- identifierCache.insert(data->identifier.identifier, data);
- data->addref();
- }
+ // Optimization to prevent unnecessary reallocation of lists
+ indexCache.reserve(metaObject->propertyCount());
+ methodIndexCache.reserve(metaObject->methodCount());
+
+ updateRecur(engine,metaObject);
}
QDeclarativePropertyCache::Data *
diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h
index 79b126d..922010d 100644
--- a/src/declarative/qml/qdeclarativepropertycache_p.h
+++ b/src/declarative/qml/qdeclarativepropertycache_p.h
@@ -96,7 +96,7 @@ public:
IsVMEFunction = 0x00000400,
HasArguments = 0x00000800,
IsSignal = 0x00001000,
- IsVMESignal = 0x00002000,
+ IsVMESignal = 0x00002000
};
Q_DECLARE_FLAGS(Flags, Flag)
@@ -105,7 +105,10 @@ public:
Flags flags;
int propType;
int coreIndex;
- int notifyIndex;
+ union {
+ int notifyIndex; // When !IsFunction
+ int relatedIndex; // When IsFunction
+ };
static Flags flagsForProperty(const QMetaProperty &, QDeclarativeEngine *engine = 0);
void load(const QMetaProperty &, QDeclarativeEngine *engine = 0);
@@ -152,6 +155,8 @@ private:
typedef QHash<QString, RData *> StringCache;
typedef QHash<QScriptDeclarativeClass::Identifier, RData *> IdentifierCache;
+ void updateRecur(QDeclarativeEngine *, const QMetaObject *);
+
QDeclarativeEngine *engine;
IndexCache indexCache;
IndexCache methodIndexCache;
diff --git a/src/declarative/qml/qdeclarativestringconverters_p.h b/src/declarative/qml/qdeclarativestringconverters_p.h
index e6b0abe..b632222 100644
--- a/src/declarative/qml/qdeclarativestringconverters_p.h
+++ b/src/declarative/qml/qdeclarativestringconverters_p.h
@@ -56,6 +56,8 @@
#include <QtCore/qglobal.h>
#include <QtCore/qvariant.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_NAMESPACE
class QColor;
@@ -69,19 +71,19 @@ class QVector3D;
// XXX - Bauhaus currently uses these methods which is why they're exported
namespace QDeclarativeStringConverters
{
- QVariant Q_DECLARATIVE_EXPORT variantFromString(const QString &);
- QVariant Q_DECLARATIVE_EXPORT variantFromString(const QString &, int preferredType, bool *ok = 0);
+ QVariant Q_DECLARATIVE_PRIVATE_EXPORT variantFromString(const QString &);
+ QVariant Q_DECLARATIVE_PRIVATE_EXPORT variantFromString(const QString &, int preferredType, bool *ok = 0);
- QColor Q_DECLARATIVE_EXPORT colorFromString(const QString &, bool *ok = 0);
+ QColor Q_DECLARATIVE_PRIVATE_EXPORT colorFromString(const QString &, bool *ok = 0);
#ifndef QT_NO_DATESTRING
- QDate Q_DECLARATIVE_EXPORT dateFromString(const QString &, bool *ok = 0);
- QTime Q_DECLARATIVE_EXPORT timeFromString(const QString &, bool *ok = 0);
- QDateTime Q_DECLARATIVE_EXPORT dateTimeFromString(const QString &, bool *ok = 0);
+ QDate Q_DECLARATIVE_PRIVATE_EXPORT dateFromString(const QString &, bool *ok = 0);
+ QTime Q_DECLARATIVE_PRIVATE_EXPORT timeFromString(const QString &, bool *ok = 0);
+ QDateTime Q_DECLARATIVE_PRIVATE_EXPORT dateTimeFromString(const QString &, bool *ok = 0);
#endif
- QPointF Q_DECLARATIVE_EXPORT pointFFromString(const QString &, bool *ok = 0);
- QSizeF Q_DECLARATIVE_EXPORT sizeFFromString(const QString &, bool *ok = 0);
- QRectF Q_DECLARATIVE_EXPORT rectFFromString(const QString &, bool *ok = 0);
- QVector3D Q_DECLARATIVE_EXPORT vector3DFromString(const QString &, bool *ok = 0);
+ QPointF Q_DECLARATIVE_PRIVATE_EXPORT pointFFromString(const QString &, bool *ok = 0);
+ QSizeF Q_DECLARATIVE_PRIVATE_EXPORT sizeFFromString(const QString &, bool *ok = 0);
+ QRectF Q_DECLARATIVE_PRIVATE_EXPORT rectFFromString(const QString &, bool *ok = 0);
+ QVector3D Q_DECLARATIVE_PRIVATE_EXPORT vector3DFromString(const QString &, bool *ok = 0);
}
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp
index 061f309..c015519 100644
--- a/src/declarative/qml/qdeclarativetypeloader.cpp
+++ b/src/declarative/qml/qdeclarativetypeloader.cpp
@@ -44,6 +44,7 @@
#include <private/qdeclarativeengine_p.h>
#include <private/qdeclarativecompiler_p.h>
#include <private/qdeclarativecomponent_p.h>
+#include <private/qdeclarativeglobal_p.h>
#include <QtDeclarative/qdeclarativecomponent.h>
#include <QtCore/qdebug.h>
@@ -493,6 +494,13 @@ void QDeclarativeDataLoader::load(QDeclarativeDataBlob *blob)
QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(blob->m_url);
if (!lf.isEmpty()) {
+ if (!QDeclarative_isFileCaseCorrect(lf)) {
+ QDeclarativeError error;
+ error.setUrl(blob->m_url);
+ error.setDescription(QLatin1String("File name case mismatch"));
+ blob->setError(error);
+ return;
+ }
QFile file(lf);
if (file.open(QFile::ReadOnly)) {
QByteArray data = file.readAll();
@@ -711,7 +719,7 @@ void QDeclarativeTypeLoader::clearCache()
QDeclarativeTypeData::QDeclarativeTypeData(const QUrl &url, QDeclarativeTypeLoader::Options options,
QDeclarativeTypeLoader *manager)
: QDeclarativeDataBlob(url, QmlFile), m_options(options), m_typesResolved(false),
- m_compiledData(0), m_component(0), m_typeLoader(manager)
+ m_compiledData(0), m_typeLoader(manager)
{
}
@@ -760,23 +768,6 @@ QDeclarativeCompiledData *QDeclarativeTypeData::compiledData() const
return m_compiledData;
}
-QDeclarativeComponent *QDeclarativeTypeData::component() const
-{
- if (!m_component) {
-
- if (m_compiledData) {
- m_component = new QDeclarativeComponent(typeLoader()->engine(), m_compiledData, -1, -1, 0);
- } else {
- m_component = new QDeclarativeComponent(typeLoader()->engine());
- QDeclarativeComponentPrivate::get(m_component)->url = finalUrl();
- QDeclarativeComponentPrivate::get(m_component)->state.errors = errors();
- }
-
- }
-
- return m_component;
-}
-
void QDeclarativeTypeData::registerCallback(TypeDataCallback *callback)
{
Q_ASSERT(!m_callbacks.contains(callback));
diff --git a/src/declarative/qml/qdeclarativetypeloader_p.h b/src/declarative/qml/qdeclarativetypeloader_p.h
index 7381f28..718537a 100644
--- a/src/declarative/qml/qdeclarativetypeloader_p.h
+++ b/src/declarative/qml/qdeclarativetypeloader_p.h
@@ -243,7 +243,6 @@ public:
const QList<ScriptReference> &resolvedScripts() const;
QDeclarativeCompiledData *compiledData() const;
- QDeclarativeComponent *component() const;
// Used by QDeclarativeComponent to get notifications
struct TypeDataCallback {
@@ -278,7 +277,6 @@ private:
bool m_typesResolved:1;
QDeclarativeCompiledData *m_compiledData;
- mutable QDeclarativeComponent *m_component;
QList<TypeDataCallback *> m_callbacks;
diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h
index 4b1bbd6..06c8669 100644
--- a/src/declarative/qml/qdeclarativevaluetype_p.h
+++ b/src/declarative/qml/qdeclarativevaluetype_p.h
@@ -70,7 +70,7 @@
QT_BEGIN_NAMESPACE
-class Q_DECLARATIVE_EXPORT QDeclarativeValueType : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueType : public QObject
{
Q_OBJECT
public:
@@ -81,7 +81,7 @@ public:
virtual void setValue(QVariant) = 0;
};
-class Q_DECLARATIVE_EXPORT QDeclarativeValueTypeFactory
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeValueTypeFactory
{
public:
QDeclarativeValueTypeFactory();
diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp
index 360186c..db90aff 100644
--- a/src/declarative/qml/qdeclarativevme.cpp
+++ b/src/declarative/qml/qdeclarativevme.cpp
@@ -185,12 +185,9 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
bindings = bindings.united(bindingSkipList);
QObject *o =
- types.at(instr.create.type).createInstance(ctxt, bindings);
+ types.at(instr.create.type).createInstance(ctxt, bindings, &vmeErrors);
if (!o) {
- if(types.at(instr.create.type).component)
- vmeErrors << types.at(instr.create.type).component->errors();
-
VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Unable to create object of type %1").arg(QString::fromLatin1(types.at(instr.create.type).className)));
}
@@ -933,8 +930,9 @@ QList<QDeclarativeError> QDeclarativeVME::errors() const
}
QObject *
-QDeclarativeCompiledData::TypeReference::createInstance(QDeclarativeContextData *ctxt,
- const QBitField &bindings) const
+QDeclarativeCompiledData::TypeReference::createInstance(QDeclarativeContextData *ctxt,
+ const QBitField &bindings,
+ QList<QDeclarativeError> *errors) const
{
if (type) {
QObject *rv = 0;
@@ -948,7 +946,7 @@ QDeclarativeCompiledData::TypeReference::createInstance(QDeclarativeContextData
return rv;
} else {
Q_ASSERT(component);
- return QDeclarativeComponentPrivate::get(component)->create(ctxt, bindings);
+ return QDeclarativeComponentPrivate::begin(ctxt, 0, component, -1, -1, 0, errors, bindings);
}
}
diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp
index 37f08fc..e28062b 100644
--- a/src/declarative/qml/qdeclarativevmemetaobject.cpp
+++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp
@@ -459,7 +459,7 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
id -= propOffset;
if (id < metaData->propertyCount) {
- int t = (metaData->propertyData() + id)->propertyType;
+ int t = (metaData->propertyData() + id)->propertyType;
bool needActivate = false;
if (t == -1) {
@@ -586,11 +586,26 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
connectAlias(id);
- if (d->propertyIdx == -1) {
+ if (d->isObjectAlias()) {
*reinterpret_cast<QObject **>(a[0]) = target;
return -1;
+ } else if (d->isValueTypeAlias()) {
+ // Value type property
+ QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(ctxt->engine);
+
+ QDeclarativeValueType *valueType = ep->valueTypes[d->valueType()];
+ Q_ASSERT(valueType);
+
+ valueType->read(target, d->propertyIndex());
+ int rv = QMetaObject::metacall(valueType, c, d->valueTypeIndex(), a);
+
+ if (c == QMetaObject::WriteProperty)
+ valueType->write(target, d->propertyIndex(), 0x00);
+
+ return rv;
+
} else {
- return QMetaObject::metacall(target, c, d->propertyIdx, a);
+ return QMetaObject::metacall(target, c, d->propertyIndex(), a);
}
}
@@ -823,8 +838,8 @@ void QDeclarativeVMEMetaObject::connectAlias(int aliasId)
int sigIdx = methodOffset + aliasId + metaData->propertyCount;
QMetaObject::connect(context, d->contextIdx + ctxtPriv->notifyIndex, object, sigIdx);
- if (d->propertyIdx != -1) {
- QMetaProperty prop = target->metaObject()->property(d->propertyIdx);
+ if (!d->isObjectAlias()) {
+ QMetaProperty prop = target->metaObject()->property(d->propertyIndex());
if (prop.hasNotifySignal())
QDeclarativePropertyPrivate::connect(target, prop.notifySignalIndex(), object, sigIdx);
}
diff --git a/src/declarative/qml/qdeclarativevmemetaobject_p.h b/src/declarative/qml/qdeclarativevmemetaobject_p.h
index 4ccaa73..5134763 100644
--- a/src/declarative/qml/qdeclarativevmemetaobject_p.h
+++ b/src/declarative/qml/qdeclarativevmemetaobject_p.h
@@ -84,6 +84,25 @@ struct QDeclarativeVMEMetaData
int contextIdx;
int propertyIdx;
int flags;
+
+ bool isObjectAlias() const {
+ return propertyIdx == -1;
+ }
+ bool isPropertyAlias() const {
+ return !isObjectAlias() && !(propertyIdx & 0xFF000000);
+ }
+ bool isValueTypeAlias() const {
+ return !isObjectAlias() && (propertyIdx & 0xFF000000);
+ }
+ int propertyIndex() const {
+ return propertyIdx & 0x0000FFFF;
+ }
+ int valueTypeIndex() const {
+ return (propertyIdx & 0x00FF0000) >> 16;
+ }
+ int valueType() const {
+ return ((unsigned int)propertyIdx) >> 24;
+ }
};
struct PropertyData {
diff --git a/src/declarative/qml/qdeclarativeworkerscript.cpp b/src/declarative/qml/qdeclarativeworkerscript.cpp
index 509ca6b..ae7a80d 100644
--- a/src/declarative/qml/qdeclarativeworkerscript.cpp
+++ b/src/declarative/qml/qdeclarativeworkerscript.cpp
@@ -514,7 +514,7 @@ void QDeclarativeWorkerScriptEngine::run()
/*!
\qmlclass WorkerScript QDeclarativeWorkerScript
- \ingroup qml-utility-elements
+ \ingroup qml-utility-elements
\brief The WorkerScript element enables the use of threads in QML.
Use WorkerScript to run operations in a new thread.
@@ -528,7 +528,7 @@ void QDeclarativeWorkerScriptEngine::run()
\snippet doc/src/snippets/declarative/workerscript.qml 0
- The above worker script specifies a javascript file, "script.js", that handles
+ The above worker script specifies a JavaScript file, "script.js", that handles
the operations to be performed in the new thread. Here is \c script.js:
\qml
@@ -543,6 +543,19 @@ void QDeclarativeWorkerScriptEngine::run()
\tt script.js. This in turn sends a reply message that is then received
by the \tt onMessage() handler of \tt myWorker.
+
+ \section3 Restrictions
+
+ Since the \c WorkerScript.onMessage() function is run in a separate thread, the
+ JavaScript file is evaluated in a context separate from the main QML engine. This means
+ that unlike an ordinary JavaScript file that is imported into QML, the \c script.js
+ in the above example cannot access the properties, methods or other attributes
+ of the QML item, nor can it access any context properties set on the QML object
+ through QDeclarativeContext.
+
+ Additionally, there are restrictions on the types of values that can be passed to and
+ from the worker script. See the sendMessage() documentation for details.
+
\sa {declarative/threading/workerscript}{WorkerScript example},
{declarative/threading/threadedlistmodel}{Threaded ListModel example}
*/
@@ -586,6 +599,19 @@ void QDeclarativeWorkerScript::setSource(const QUrl &source)
Sends the given \a message to a worker script handler in another
thread. The other worker script handler can receive this message
through the onMessage() handler.
+
+ The \c message object may only contain values of the following
+ types:
+
+ \list
+ \o boolean, number, string
+ \o JavaScript objects and arrays
+ \o ListModel objects (any other type of QObject* is not allowed)
+ \endlist
+
+ All objects and arrays are copied to the \c message. With the exception
+ of ListModel objects, any modifications by the other thread to an object
+ passed in \c message will not be reflected in the original object.
*/
void QDeclarativeWorkerScript::sendMessage(const QScriptValue &message)
{
diff --git a/src/declarative/qml/qmetaobjectbuilder.cpp b/src/declarative/qml/qmetaobjectbuilder.cpp
index 58f8811..dfe89f8 100644
--- a/src/declarative/qml/qmetaobjectbuilder.cpp
+++ b/src/declarative/qml/qmetaobjectbuilder.cpp
@@ -41,10 +41,6 @@
#include "private/qmetaobjectbuilder_p.h"
-#ifndef Q_OS_WIN
-#include <stdint.h>
-#endif
-
QT_BEGIN_NAMESPACE
/*!
@@ -1264,8 +1260,8 @@ static int buildMetaObject(QMetaObjectBuilderPrivate *d, char *buf,
char *str = reinterpret_cast<char *>(buf + size);
if (buf) {
if (relocatable) {
- meta->d.stringdata = reinterpret_cast<const char *>((intptr_t)size);
- meta->d.data = reinterpret_cast<uint *>((intptr_t)pmetaSize);
+ meta->d.stringdata = reinterpret_cast<const char *>((quintptr)size);
+ meta->d.data = reinterpret_cast<uint *>((quintptr)pmetaSize);
} else {
meta->d.stringdata = str;
meta->d.data = reinterpret_cast<uint *>(data);
@@ -1502,8 +1498,8 @@ void QMetaObjectBuilder::fromRelocatableData(QMetaObject *output,
const char *buf = data.constData();
const QMetaObject *dataMo = reinterpret_cast<const QMetaObject *>(buf);
- intptr_t stringdataOffset = (intptr_t)dataMo->d.stringdata;
- intptr_t dataOffset = (intptr_t)dataMo->d.data;
+ quintptr stringdataOffset = (quintptr)dataMo->d.stringdata;
+ quintptr dataOffset = (quintptr)dataMo->d.data;
output->d.superdata = superclass;
output->d.stringdata = buf + stringdataOffset;
diff --git a/src/declarative/qml/qmetaobjectbuilder_p.h b/src/declarative/qml/qmetaobjectbuilder_p.h
index dbaf9e6..a90ba63 100644
--- a/src/declarative/qml/qmetaobjectbuilder_p.h
+++ b/src/declarative/qml/qmetaobjectbuilder_p.h
@@ -58,6 +58,8 @@
#include <QtCore/qdatastream.h>
#include <QtCore/qmap.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_NAMESPACE
class QMetaObjectBuilderPrivate;
@@ -68,7 +70,7 @@ class QMetaPropertyBuilderPrivate;
class QMetaEnumBuilder;
class QMetaEnumBuilderPrivate;
-class Q_DECLARATIVE_EXPORT QMetaObjectBuilder
+class Q_DECLARATIVE_PRIVATE_EXPORT QMetaObjectBuilder
{
public:
enum AddMember
@@ -193,7 +195,7 @@ private:
friend class QMetaEnumBuilder;
};
-class Q_DECLARATIVE_EXPORT QMetaMethodBuilder
+class Q_DECLARATIVE_PRIVATE_EXPORT QMetaMethodBuilder
{
public:
QMetaMethodBuilder() : _mobj(0), _index(0) {}
@@ -231,7 +233,7 @@ private:
QMetaMethodBuilderPrivate *d_func() const;
};
-class Q_DECLARATIVE_EXPORT QMetaPropertyBuilder
+class Q_DECLARATIVE_PRIVATE_EXPORT QMetaPropertyBuilder
{
public:
QMetaPropertyBuilder() : _mobj(0), _index(0) {}
@@ -282,7 +284,7 @@ private:
QMetaPropertyBuilderPrivate *d_func() const;
};
-class Q_DECLARATIVE_EXPORT QMetaEnumBuilder
+class Q_DECLARATIVE_PRIVATE_EXPORT QMetaEnumBuilder
{
public:
QMetaEnumBuilder() : _mobj(0), _index(0) {}
diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h
index 8cb17e4..cd90417 100644
--- a/src/declarative/util/qdeclarativeanimation_p.h
+++ b/src/declarative/util/qdeclarativeanimation_p.h
@@ -63,7 +63,7 @@ QT_MODULE(Declarative)
class QDeclarativeAbstractAnimationPrivate;
class QDeclarativeAnimationGroup;
-class Q_DECLARATIVE_EXPORT QDeclarativeAbstractAnimation : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAbstractAnimation : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeAbstractAnimation)
@@ -165,7 +165,7 @@ protected:
};
class QDeclarativeScriptActionPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeScriptAction : public QDeclarativeAbstractAnimation
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeScriptAction : public QDeclarativeAbstractAnimation
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeScriptAction)
diff --git a/src/declarative/util/qdeclarativeanimation_p_p.h b/src/declarative/util/qdeclarativeanimation_p_p.h
index 26c04d4..b8c2c6d 100644
--- a/src/declarative/util/qdeclarativeanimation_p_p.h
+++ b/src/declarative/util/qdeclarativeanimation_p_p.h
@@ -327,7 +327,7 @@ public:
QDeclarativeBulkValueAnimator *va;
- // for animations that dont use the QDeclarativeBulkValueAnimator
+ // for animations that don't use the QDeclarativeBulkValueAnimator
QDeclarativeStateActions *actions;
static QVariant interpolateVariant(const QVariant &from, const QVariant &to, qreal progress);
diff --git a/src/declarative/util/qdeclarativebehavior_p.h b/src/declarative/util/qdeclarativebehavior_p.h
index 9801fb2..80ed984 100644
--- a/src/declarative/util/qdeclarativebehavior_p.h
+++ b/src/declarative/util/qdeclarativebehavior_p.h
@@ -57,7 +57,7 @@ QT_MODULE(Declarative)
class QDeclarativeAbstractAnimation;
class QDeclarativeBehaviorPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeBehavior : public QObject, public QDeclarativePropertyValueInterceptor
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeBehavior : public QObject, public QDeclarativePropertyValueInterceptor
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeBehavior)
diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp
index 3e4a81a..03a0561 100644
--- a/src/declarative/util/qdeclarativefontloader.cpp
+++ b/src/declarative/util/qdeclarativefontloader.cpp
@@ -49,7 +49,6 @@
#include <QDebug>
#include <QNetworkRequest>
#include <QNetworkReply>
-#include <QFile>
#include <QFontDatabase>
#include <private/qobject_p.h>
@@ -221,15 +220,15 @@ void QDeclarativeFontLoader::setSource(const QUrl &url)
fo->download(d->url, qmlEngine(this)->networkAccessManager());
d->status = Loading;
emit statusChanged();
- QObject::connect(fo, SIGNAL(fontDownloaded(QString, QDeclarativeFontLoader::Status)),
- this, SLOT(updateFontInfo(QString, QDeclarativeFontLoader::Status)));
+ QObject::connect(fo, SIGNAL(fontDownloaded(QString,QDeclarativeFontLoader::Status)),
+ this, SLOT(updateFontInfo(QString,QDeclarativeFontLoader::Status)));
} else {
QDeclarativeFontObject *fo = d->fonts[d->url];
if (fo->id == -1) {
d->status = Loading;
emit statusChanged();
- QObject::connect(fo, SIGNAL(fontDownloaded(QString, QDeclarativeFontLoader::Status)),
- this, SLOT(updateFontInfo(QString, QDeclarativeFontLoader::Status)));
+ QObject::connect(fo, SIGNAL(fontDownloaded(QString,QDeclarativeFontLoader::Status)),
+ this, SLOT(updateFontInfo(QString,QDeclarativeFontLoader::Status)));
}
else
updateFontInfo(QFontDatabase::applicationFontFamilies(fo->id).at(0), Ready);
@@ -298,23 +297,25 @@ void QDeclarativeFontLoader::setName(const QString &name)
Use this status to provide an update or respond to the status change in some way.
For example, you could:
- \e {Trigger a state change:}
- \qml
- State { name: 'loaded'; when: loader.status = FontLoader.Ready }
+ \list
+ \o Trigger a state change:
+ \qml
+ State { name: 'loaded'; when: loader.status == FontLoader.Ready }
\endqml
- \e {Implement an \c onStatusChanged signal handler:}
- \qml
+ \o Implement an \c onStatusChanged signal handler:
+ \qml
FontLoader {
id: loader
onStatusChanged: if (loader.status == FontLoader.Ready) console.log('Loaded')
}
\endqml
- \e {Bind to the status value:}
+ \o Bind to the status value:
\qml
- Text { text: loader.status != FontLoader.Ready ? 'Not Loaded' : 'Loaded' }
+ Text { text: loader.status == FontLoader.Ready ? 'Loaded' : 'Not loaded' }
\endqml
+ \endlist
*/
QDeclarativeFontLoader::Status QDeclarativeFontLoader::status() const
{
diff --git a/src/declarative/util/qdeclarativelistmodel_p.h b/src/declarative/util/qdeclarativelistmodel_p.h
index e9673c8..90036f9 100644
--- a/src/declarative/util/qdeclarativelistmodel_p.h
+++ b/src/declarative/util/qdeclarativelistmodel_p.h
@@ -64,7 +64,7 @@ class NestedListModel;
class QDeclarativeListModelWorkerAgent;
struct ModelNode;
class FlatListScriptClass;
-class Q_DECLARATIVE_EXPORT QDeclarativeListModel : public QListModelInterface
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeListModel : public QListModelInterface
{
Q_OBJECT
Q_PROPERTY(int count READ count NOTIFY countChanged)
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
index 6804d4a..852b055 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
@@ -208,7 +208,7 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
const QList<Change> &changes = s->data.changes;
if (m_copy) {
- bool cc = m_copy->count() != s->list->count();
+ bool cc = m_orig->count() != s->list->count();
FlatListModel *orig = m_orig->m_flat;
FlatListModel *copy = s->list->m_flat;
diff --git a/src/declarative/util/qdeclarativeopenmetaobject_p.h b/src/declarative/util/qdeclarativeopenmetaobject_p.h
index c18fa3d..dff6776 100644
--- a/src/declarative/util/qdeclarativeopenmetaobject_p.h
+++ b/src/declarative/util/qdeclarativeopenmetaobject_p.h
@@ -42,10 +42,11 @@
#ifndef QDECLARATIVEOPENMETAOBJECT_H
#define QDECLARATIVEOPENMETAOBJECT_H
-#include <private/qdeclarativerefcount_p.h>
#include <QtCore/QMetaObject>
#include <QtCore/QObject>
+#include <private/qdeclarativerefcount_p.h>
+#include <private/qdeclarativeglobal_p.h>
#include <private/qobject_p.h>
QT_BEGIN_HEADER
@@ -57,7 +58,7 @@ QT_MODULE(Declarative)
class QDeclarativeEngine;
class QMetaPropertyBuilder;
class QDeclarativeOpenMetaObjectTypePrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeOpenMetaObjectType : public QDeclarativeRefCount
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeOpenMetaObjectType : public QDeclarativeRefCount
{
public:
QDeclarativeOpenMetaObjectType(const QMetaObject *base, QDeclarativeEngine *engine);
@@ -78,7 +79,7 @@ private:
};
class QDeclarativeOpenMetaObjectPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeOpenMetaObject : public QAbstractDynamicMetaObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeOpenMetaObject : public QAbstractDynamicMetaObject
{
public:
QDeclarativeOpenMetaObject(QObject *, bool = true);
diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 4fc52f5..a07b1bb 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -93,6 +93,7 @@ public:
QDeclarativePixmapData *data;
QDeclarativePixmapReader *reader;
+ QSize requestSize;
bool loading;
int redirectCount;
@@ -366,7 +367,7 @@ void QDeclarativePixmapReader::networkRequestDone(QNetworkReply *reply)
QByteArray all = reply->readAll();
QBuffer buff(&all);
buff.open(QIODevice::ReadOnly);
- if (!readImage(reply->url(), &buff, &image, &errorString, &readSize, job->data->requestSize)) {
+ if (!readImage(reply->url(), &buff, &image, &errorString, &readSize, job->requestSize)) {
error = QDeclarativePixmapReply::Decoding;
}
}
@@ -683,7 +684,7 @@ void QDeclarativePixmapStore::timerEvent(QTimerEvent *)
}
QDeclarativePixmapReply::QDeclarativePixmapReply(QDeclarativePixmapData *d)
-: data(d), reader(0), loading(false), redirectCount(0)
+: data(d), reader(0), loading(false), redirectCount(0), requestSize(d->requestSize)
{
if (finishedIndex == -1) {
finishedIndex = QDeclarativePixmapReply::staticMetaObject.indexOfSignal("finished()");
diff --git a/src/declarative/util/qdeclarativepropertychanges_p.h b/src/declarative/util/qdeclarativepropertychanges_p.h
index 199928f..449574c 100644
--- a/src/declarative/util/qdeclarativepropertychanges_p.h
+++ b/src/declarative/util/qdeclarativepropertychanges_p.h
@@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativePropertyChangesPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativePropertyChanges : public QDeclarativeStateOperation
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativePropertyChanges : public QDeclarativeStateOperation
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativePropertyChanges)
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp
index 0f5413e..3915485 100644
--- a/src/declarative/util/qdeclarativestate.cpp
+++ b/src/declarative/util/qdeclarativestate.cpp
@@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(stateChangeDebug, STATECHANGE_DEBUG);
QDeclarativeAction::QDeclarativeAction()
-: restore(true), actionDone(false), reverseEvent(false), deletableToBinding(false), fromBinding(0), toBinding(0), event(0),
+: restore(true), actionDone(false), reverseEvent(false), deletableToBinding(false), fromBinding(0), event(0),
specifiedObject(0)
{
}
@@ -67,7 +67,7 @@ QDeclarativeAction::QDeclarativeAction(QObject *target, const QString &propertyN
const QVariant &value)
: restore(true), actionDone(false), reverseEvent(false), deletableToBinding(false),
property(target, propertyName), toValue(value),
- fromBinding(0), toBinding(0), event(0),
+ fromBinding(0), event(0),
specifiedObject(target), specifiedProperty(propertyName)
{
if (property.isValid())
@@ -78,7 +78,7 @@ QDeclarativeAction::QDeclarativeAction(QObject *target, const QString &propertyN
QDeclarativeContext *context, const QVariant &value)
: restore(true), actionDone(false), reverseEvent(false), deletableToBinding(false),
property(target, propertyName, context), toValue(value),
- fromBinding(0), toBinding(0), event(0),
+ fromBinding(0), event(0),
specifiedObject(target), specifiedProperty(propertyName)
{
if (property.isValid())
@@ -503,11 +503,11 @@ void QDeclarativeState::addEntriesToRevertList(const QList<QDeclarativeAction> &
const QDeclarativeAction &action = actionListIterator.next();
QDeclarativeSimpleAction simpleAction(action);
action.property.write(action.toValue);
- if (action.toBinding) {
+ if (!action.toBinding.isNull()) {
QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::binding(simpleAction.property());
if (oldBinding)
QDeclarativePropertyPrivate::setBinding(simpleAction.property(), 0);
- QDeclarativePropertyPrivate::setBinding(simpleAction.property(), action.toBinding, QDeclarativePropertyPrivate::DontRemoveBinding);
+ QDeclarativePropertyPrivate::setBinding(simpleAction.property(), action.toBinding.data(), QDeclarativePropertyPrivate::DontRemoveBinding);
}
simpleActionList.append(simpleAction);
@@ -675,7 +675,7 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit
a.property = d->revertList.at(ii).property();
a.fromValue = cur;
a.toValue = d->revertList.at(ii).value();
- a.toBinding = d->revertList.at(ii).binding();
+ a.toBinding = QDeclarativeAbstractBinding::getPointer(d->revertList.at(ii).binding());
a.specifiedObject = d->revertList.at(ii).specifiedObject();
a.specifiedProperty = d->revertList.at(ii).specifiedProperty();
a.event = d->revertList.at(ii).event();
diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h
index a0ab11b..7b9c18a 100644
--- a/src/declarative/util/qdeclarativestate_p.h
+++ b/src/declarative/util/qdeclarativestate_p.h
@@ -45,6 +45,8 @@
#include <qdeclarative.h>
#include <qdeclarativeproperty.h>
#include <QtCore/qobject.h>
+#include <private/qdeclarativebinding_p.h>
+#include <private/qdeclarativeglobal_p.h>
QT_BEGIN_HEADER
@@ -56,7 +58,7 @@ class QDeclarativeActionEvent;
class QDeclarativeAbstractBinding;
class QDeclarativeBinding;
class QDeclarativeExpression;
-class Q_DECLARATIVE_EXPORT QDeclarativeAction
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeAction
{
public:
QDeclarativeAction();
@@ -74,7 +76,7 @@ public:
QVariant toValue;
QDeclarativeAbstractBinding *fromBinding;
- QDeclarativeAbstractBinding *toBinding;
+ QDeclarativeAbstractBinding::Pointer toBinding;
QDeclarativeActionEvent *event;
//strictly for matching
diff --git a/src/declarative/util/qdeclarativestate_p_p.h b/src/declarative/util/qdeclarativestate_p_p.h
index 4fd8f21..98c3f7b 100644
--- a/src/declarative/util/qdeclarativestate_p_p.h
+++ b/src/declarative/util/qdeclarativestate_p_p.h
@@ -85,7 +85,7 @@ public:
m_reverseEvent = true;
} else {
m_value = a.toValue;
- m_binding = QDeclarativeAbstractBinding::getPointer(a.toBinding);
+ m_binding = a.toBinding;
m_reverseEvent = false;
}
}
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index 8cb813c..d1d7822 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -648,7 +648,7 @@ void QDeclarativeStateChangeScript::setScript(const QDeclarativeScriptString &s)
}
/*!
- \qmlproperty script StateChangeScript::script
+ \qmlproperty string StateChangeScript::name
This property holds the name of the script. This name can be used by a
ScriptAction to target a specific script.
diff --git a/src/declarative/util/qdeclarativetimer_p.h b/src/declarative/util/qdeclarativetimer_p.h
index 08c3d4e..ee3d038 100644
--- a/src/declarative/util/qdeclarativetimer_p.h
+++ b/src/declarative/util/qdeclarativetimer_p.h
@@ -47,6 +47,8 @@
#include <QtCore/qobject.h>
#include <QtCore/qabstractanimation.h>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -54,7 +56,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeTimerPrivate;
-class Q_DECLARATIVE_EXPORT QDeclarativeTimer : public QObject, public QDeclarativeParserStatus
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeTimer : public QObject, public QDeclarativeParserStatus
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeTimer)
diff --git a/src/declarative/util/qdeclarativetransition.cpp b/src/declarative/util/qdeclarativetransition.cpp
index 478c7f4..c8bc7b3 100644
--- a/src/declarative/util/qdeclarativetransition.cpp
+++ b/src/declarative/util/qdeclarativetransition.cpp
@@ -86,12 +86,16 @@ QT_BEGIN_NAMESPACE
Item {
...
transitions: [
- Transition { ... },
+ Transition { to: "state1" ... },
Transition { ... }
]
}
\endqml
+ If multiple Transitions are specified, only a single (best-matching) Transition will be applied for any particular
+ state change. In the example above, when changing to \c state1, the first transition will be used, rather
+ than the more generic second transition.
+
If a state change has a Transition that matches the same property as a
\l Behavior, the Transition animation overrides the \l Behavior for that
state change.
diff --git a/src/declarative/util/qdeclarativetransitionmanager.cpp b/src/declarative/util/qdeclarativetransitionmanager.cpp
index 89b0044..d19e6f2 100644
--- a/src/declarative/util/qdeclarativetransitionmanager.cpp
+++ b/src/declarative/util/qdeclarativetransitionmanager.cpp
@@ -99,8 +99,8 @@ void QDeclarativeTransitionManager::complete()
void QDeclarativeTransitionManagerPrivate::applyBindings()
{
foreach(const QDeclarativeAction &action, bindingsList) {
- if (action.toBinding) {
- QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding);
+ if (!action.toBinding.isNull()) {
+ QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding.data());
} else if (action.event) {
if (action.reverseEvent)
action.event->reverse();
@@ -145,8 +145,8 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
// Apply all the property and binding changes
for (int ii = 0; ii < applyList.size(); ++ii) {
const QDeclarativeAction &action = applyList.at(ii);
- if (action.toBinding) {
- QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
+ if (!action.toBinding.isNull()) {
+ QDeclarativePropertyPrivate::setBinding(action.property, action.toBinding.data(), QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
} else if (!action.event) {
QDeclarativePropertyPrivate::write(action.property, action.toValue, QDeclarativePropertyPrivate::BypassInterceptor | QDeclarativePropertyPrivate::DontRemoveBinding);
} else if (action.event->isReversable()) {
@@ -165,7 +165,7 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
continue;
}
const QDeclarativeProperty &prop = action->property;
- if (action->toBinding || !action->toValue.isValid()) {
+ if (!action->toBinding.isNull() || !action->toValue.isValid()) {
action->toValue = prop.read();
}
}
@@ -259,10 +259,10 @@ void QDeclarativeTransitionManager::cancel()
for(int i = 0; i < d->bindingsList.count(); ++i) {
QDeclarativeAction action = d->bindingsList[i];
- if (action.toBinding && action.deletableToBinding) {
+ if (!action.toBinding.isNull() && action.deletableToBinding) {
QDeclarativePropertyPrivate::setBinding(action.property, 0);
- action.toBinding->destroy();
- action.toBinding = 0;
+ action.toBinding.data()->destroy();
+ action.toBinding.clear();
action.deletableToBinding = false;
} else if (action.event) {
//### what do we do here?
diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp
index 163f626..c4d8dde 100644
--- a/src/declarative/util/qdeclarativeview.cpp
+++ b/src/declarative/util/qdeclarativeview.cpp
@@ -72,6 +72,7 @@
QT_BEGIN_NAMESPACE
DEFINE_BOOL_CONFIG_OPTION(frameRateDebug, QML_SHOW_FRAMERATE)
+extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
class QDeclarativeScene : public QGraphicsScene
{
@@ -696,7 +697,14 @@ void QDeclarativeView::paintEvent(QPaintEvent *event)
if (frameRateDebug())
time = d->frameTimer.restart();
+#ifdef Q_WS_MAC
+ bool oldSmooth = qt_applefontsmoothing_enabled;
+ qt_applefontsmoothing_enabled = false;
+#endif
QGraphicsView::paintEvent(event);
+#ifdef Q_WS_MAC
+ qt_applefontsmoothing_enabled = oldSmooth;
+#endif
QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Painting);
diff --git a/src/declarative/util/qlistmodelinterface.cpp b/src/declarative/util/qlistmodelinterface.cpp
index acf4dd6..1e2dfb7 100644
--- a/src/declarative/util/qlistmodelinterface.cpp
+++ b/src/declarative/util/qlistmodelinterface.cpp
@@ -46,6 +46,7 @@ QT_BEGIN_NAMESPACE
/*!
\internal
\class QListModelInterface
+ \since 4.7
\brief The QListModelInterface class can be subclassed to provide C++ models to QDeclarativeGraphics Views
This class is comprised primarily of pure virtual functions which
@@ -70,15 +71,10 @@ QT_BEGIN_NAMESPACE
Returns the number of data entries in the model.
*/
-/*! \fn QHash<int,QVariant> QListModelInterface::data(int index, const QList<int>& roles) const
+/*! \fn QVariant QListModelInterface::data(int index, int role) const
Returns the data at the given \a index for the specified \a roles.
*/
-/*! \fn bool QListModelInterface::setData(int index, const QHash<int,QVariant>& values)
- Sets the data at the given \a index. \a values is a mapping of
- QVariant values to roles. Returns false.
-*/
-
/*! \fn QList<int> QListModelInterface::roles() const
Returns the list of roles for which the list model interface
provides data.
diff --git a/src/declarative/util/qlistmodelinterface_p.h b/src/declarative/util/qlistmodelinterface_p.h
index 8c8ebb3..8b62fc4 100644
--- a/src/declarative/util/qlistmodelinterface_p.h
+++ b/src/declarative/util/qlistmodelinterface_p.h
@@ -45,13 +45,15 @@
#include <QtCore/QHash>
#include <QtCore/QVariant>
+#include <private/qdeclarativeglobal_p.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
-class Q_DECLARATIVE_EXPORT QListModelInterface : public QObject
+class Q_DECLARATIVE_PRIVATE_EXPORT QListModelInterface : public QObject
{
Q_OBJECT
public:
diff --git a/src/gui/accessible/accessible.pri b/src/gui/accessible/accessible.pri
index ad2fb4c..31362ff 100644
--- a/src/gui/accessible/accessible.pri
+++ b/src/gui/accessible/accessible.pri
@@ -12,7 +12,7 @@ contains(QT_CONFIG, accessibility) {
accessible/qaccessiblewidget.cpp \
accessible/qaccessibleplugin.cpp
- mac:!embedded {
+ mac:!embedded:!qpa {
HEADERS += accessible/qaccessible_mac_p.h
OBJECTIVE_SOURCES += accessible/qaccessible_mac.mm \
accessible/qaccessible_mac_cocoa.mm
diff --git a/src/gui/accessible/qaccessible_mac_p.h b/src/gui/accessible/qaccessible_mac_p.h
index 4ee3a2d..e417cb6 100644
--- a/src/gui/accessible/qaccessible_mac_p.h
+++ b/src/gui/accessible/qaccessible_mac_p.h
@@ -122,7 +122,7 @@ private:
QAccessibleInterfaceWrapper wrapper class.
It has the same API as QAccessibleInterface, minus the child parameter
- in the funcitons.
+ in the functions.
*/
class Q_AUTOTEST_EXPORT QAInterface : public QAccessible
{
@@ -432,7 +432,7 @@ public:
/*
QAccessibleHierarchyManager bridges the Mac and Qt accessibility hierarchies.
There is a one-to-one relationship between QAElements on the Mac side
- and QAInterfaces on the Qt side, and this class provies lookup funcitons
+ and QAInterfaces on the Qt side, and this class provides lookup functions
that translates between these to items.
The identity of a QAInterface is determined by its QAccessibleInterface and
diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri
index 4e1b9a7..cd8e71a 100644
--- a/src/gui/dialogs/dialogs.pri
+++ b/src/gui/dialogs/dialogs.pri
@@ -27,7 +27,7 @@ HEADERS += \
dialogs/qwizard.h \
dialogs/qprintpreviewdialog.h
-!embedded:mac {
+!embedded:!qpa:mac {
OBJECTIVE_SOURCES += dialogs/qfiledialog_mac.mm \
dialogs/qfontdialog_mac.mm \
dialogs/qnspanelproxy_mac.mm \
@@ -61,7 +61,7 @@ win32 {
!win32-borland:!wince*: LIBS += -lshell32 # the filedialog needs this library
}
-!mac:!embedded:!symbian:unix {
+!mac:!embedded:!symbian:unix|qpa {
HEADERS += dialogs/qpagesetupdialog_unix_p.h
SOURCES += dialogs/qprintdialog_unix.cpp \
dialogs/qpagesetupdialog_unix.cpp
diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp
index 5a791fc..6970b76 100644
--- a/src/gui/dialogs/qdialog.cpp
+++ b/src/gui/dialogs/qdialog.cpp
@@ -1111,7 +1111,7 @@ QSize QDialog::sizeHint() const
// if size is not fixed, try to adjust it according to S60 layoutting
if (minimumSize() != maximumSize()) {
// In S60, dialogs are always the width of screen (in portrait, regardless of current layout)
- return QSize(qMax(S60->screenHeightInPixels, S60->screenWidthInPixels), QWidget::sizeHint().height());
+ return QSize(qMin(S60->screenHeightInPixels, S60->screenWidthInPixels), QWidget::sizeHint().height());
} else {
return QWidget::sizeHint();
}
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index 624610b..1b9d127 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -3261,7 +3261,10 @@ QString QFSCompleter::pathFromIndex(const QModelIndex &index) const
if (currentLocation == QDir::separator())
return path.mid(currentLocation.length());
#endif
- return path.mid(currentLocation.length() + 1);
+ if (currentLocation.endsWith('/'))
+ return path.mid(currentLocation.length());
+ else
+ return path.mid(currentLocation.length()+1);
}
return index.data(QFileSystemModel::FilePathRole).toString();
}
diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm
index 87850a7..6c1d7f6 100644
--- a/src/gui/dialogs/qfiledialog_mac.mm
+++ b/src/gui/dialogs/qfiledialog_mac.mm
@@ -63,6 +63,7 @@
#include <qdesktopwidget.h>
#include <stdlib.h>
#include <qabstracteventdispatcher.h>
+#import <AppKit/NSSavePanel.h>
#include "ui_qfiledialog.h"
QT_BEGIN_NAMESPACE
@@ -84,7 +85,13 @@ QT_USE_NAMESPACE
@class QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate);
-@interface QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) : NSObject {
+@interface QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate)
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+ : NSObject<NSOpenSavePanelDelegate>
+#else
+ : NSObject
+#endif
+{
@public
NSOpenPanel *mOpenPanel;
NSSavePanel *mSavePanel;
diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp
index 5b192b4..feec804 100644
--- a/src/gui/dialogs/qfiledialog_win.cpp
+++ b/src/gui/dialogs/qfiledialog_win.cpp
@@ -60,7 +60,6 @@
#endif
#ifdef Q_WS_WINCE
-#include <shlobj.h>
#include <commdlg.h>
bool qt_priv_ptr_valid = false;
#else
@@ -603,7 +602,7 @@ QString qt_win_CID_get_existing_directory(const QFileDialogArgs &args)
// Set the FOS_PICKFOLDERS flag
DWORD newOptions;
hr = pfd->GetOptions(&newOptions);
- newOptions |= FOS_PICKFOLDERS;
+ newOptions |= (FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM);
if (SUCCEEDED(hr) && SUCCEEDED((hr = pfd->SetOptions(newOptions)))) {
QWidget *parentWindow = args.parent;
if (parentWindow)
diff --git a/src/gui/dialogs/qfileinfogatherer_p.h b/src/gui/dialogs/qfileinfogatherer_p.h
index 8681eb5..b28509b 100644
--- a/src/gui/dialogs/qfileinfogatherer_p.h
+++ b/src/gui/dialogs/qfileinfogatherer_p.h
@@ -84,10 +84,13 @@ public:
&& permissions() == fileInfo.permissions();
}
+#ifndef QT_NO_FSFILEENGINE
bool isCaseSensitive() const {
QFSFileEngine fe(mFileInfo.absoluteFilePath());
return fe.caseSensitive();
}
+#endif
+
QFile::Permissions permissions() const {
return mFileInfo.permissions();
}
diff --git a/src/gui/dialogs/qfilesystemmodel.cpp b/src/gui/dialogs/qfilesystemmodel.cpp
index be4261d..6552370 100644
--- a/src/gui/dialogs/qfilesystemmodel.cpp
+++ b/src/gui/dialogs/qfilesystemmodel.cpp
@@ -80,11 +80,43 @@ QT_BEGIN_NAMESPACE
directories. In the simplest case, it can be used with a suitable display
widget as part of a browser or filter.
- QFileSystemModel will not fetch any files or directories until setRootPath
+ QFileSystemModel can be accessed using the standard interface provided by
+ QAbstractItemModel, but it also provides some convenience functions that are
+ specific to a directory model.
+ The fileInfo(), isDir(), name(), and path() functions provide information
+ about the underlying files and directories related to items in the model.
+ Directories can be created and removed using mkdir(), rmdir().
+
+ \note QFileSystemModel requires an instance of a GUI application.
+
+ \section1 Example Usage
+
+ A directory model that displays the contents of a default directory
+ is usually constructed with a parent object:
+
+ \snippet doc/src/snippets/shareddirmodel/main.cpp 2
+
+ A tree view can be used to display the contents of the model
+
+ \snippet doc/src/snippets/shareddirmodel/main.cpp 4
+
+ and the contents of a particular directory can be displayed by
+ setting the tree view's root index:
+
+ \snippet doc/src/snippets/shareddirmodel/main.cpp 7
+
+ The view's root index can be used to control how much of a
+ hierarchical model is displayed. QDirModel provides a convenience
+ function that returns a suitable model index for a path to a
+ directory within the model.
+
+ \section1 Caching and Performance
+
+ QFileSystemModel will not fetch any files or directories until setRootPath()
is called. This will prevent any unnecessary querying on the file system
until that point such as listing the drives on Windows.
- Unlike the QDirModel, QFileSystemModel uses a separate thread to populate
+ Unlike QDirModel, QFileSystemModel uses a separate thread to populate
itself so it will not cause the main thread to hang as the file system
is being queried. Calls to rowCount() will return 0 until the model
populates a directory.
@@ -92,15 +124,6 @@ QT_BEGIN_NAMESPACE
QFileSystemModel keeps a cache with file information. The cache is
automatically kept up to date using the QFileSystemWatcher.
- QFileSystemModel can be accessed using the standard interface provided by
- QAbstractItemModel, but it also provides some convenience functions that are
- specific to a directory model.
- The fileInfo(), isDir(), name(), and path() functions provide information
- about the underlying files and directories related to items in the model.
- Directories can be created and removed using mkdir(), rmdir().
-
- \note QFileSystemModel requires an instance of a GUI application.
-
\sa {Model Classes}
*/
diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm
index 9c63dfa..6fb363b 100644
--- a/src/gui/dialogs/qfontdialog_mac.mm
+++ b/src/gui/dialogs/qfontdialog_mac.mm
@@ -496,7 +496,7 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
QMacCocoaAutoReleasePool pool;
QFontEngine *fe = font.d->engineForScript(QUnicodeTables::Common);
NSFontManager *mgr = [NSFontManager sharedFontManager];
- NSFont *nsFont = 0;
+ const NSFont *nsFont = 0;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (qstrcmp(fe->name(), "CoreText") == 0) {
@@ -522,7 +522,7 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
size:fontInfo.pointSize()];
}
- [mgr setSelectedFont:nsFont isMultiple:NO];
+ [mgr setSelectedFont:const_cast<NSFont *>(nsFont) isMultiple:NO];
[static_cast<QT_MANGLE_NAMESPACE(QCocoaFontPanelDelegate) *>(delegate) setQtFont:font];
}
diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp
index e996ee9..9e4b9b6 100644
--- a/src/gui/dialogs/qinputdialog.cpp
+++ b/src/gui/dialogs/qinputdialog.cpp
@@ -231,7 +231,10 @@ void QInputDialogPrivate::ensureLayout()
QObject::connect(buttonBox, SIGNAL(rejected()), q, SLOT(reject()));
mainLayout = new QVBoxLayout(q);
+ //we want to let the input dialog grow to available size on Symbian.
+#ifndef Q_OS_SYMBIAN
mainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
+#endif
mainLayout->addWidget(label);
mainLayout->addWidget(inputWidget);
mainLayout->addWidget(buttonBox);
@@ -244,6 +247,9 @@ void QInputDialogPrivate::ensureLineEdit()
Q_Q(QInputDialog);
if (!lineEdit) {
lineEdit = new QLineEdit(q);
+#ifndef QT_NO_IM
+ qt_widget_private(lineEdit)->inheritsInputMethodHints = 1;
+#endif
lineEdit->hide();
QObject::connect(lineEdit, SIGNAL(textChanged(QString)),
q, SLOT(_q_textChanged(QString)));
@@ -255,6 +261,9 @@ void QInputDialogPrivate::ensureComboBox()
Q_Q(QInputDialog);
if (!comboBox) {
comboBox = new QComboBox(q);
+#ifndef QT_NO_IM
+ qt_widget_private(comboBox)->inheritsInputMethodHints = 1;
+#endif
comboBox->hide();
QObject::connect(comboBox, SIGNAL(editTextChanged(QString)),
q, SLOT(_q_textChanged(QString)));
@@ -552,6 +561,9 @@ void QInputDialog::setLabelText(const QString &text)
} else {
d->label->setText(text);
}
+#ifdef Q_OS_SYMBIAN
+ d->label->setWordWrap(true);
+#endif
}
QString QInputDialog::labelText() const
@@ -1122,6 +1134,8 @@ void QInputDialog::done(int result)
be entered).
\a text is the default text which is placed in the line edit.
\a mode is the echo mode the line edit will use.
+ \a inputMethodHints is the input method hints that will be used in the
+ edit widget if an input method is active.
If \a ok is nonnull \e *\a ok will be set to true if the user pressed
\gui OK and to false if the user pressed \gui Cancel. The dialog's parent
@@ -1144,13 +1158,14 @@ void QInputDialog::done(int result)
QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode mode, const QString &text, bool *ok,
- Qt::WindowFlags flags)
+ Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
{
QInputDialog dialog(parent, flags);
dialog.setWindowTitle(title);
dialog.setLabelText(label);
dialog.setTextValue(text);
dialog.setTextEchoMode(mode);
+ dialog.setInputMethodHints(inputMethodHints);
int ret = dialog.exec();
if (ok)
@@ -1163,6 +1178,17 @@ QString QInputDialog::getText(QWidget *parent, const QString &title, const QStri
}
/*!
+ \internal
+*/
+// ### Qt 5: Use only the version above.
+QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode mode, const QString &text, bool *ok,
+ Qt::WindowFlags flags)
+{
+ return getText(parent, title, label, mode, text, ok, flags, Qt::ImhNone);
+}
+
+/*!
\since 4.5
Static convenience function to get an integer input from the user.
@@ -1272,6 +1298,8 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
be entered).
\a items is the string list which is inserted into the combobox.
\a current is the number of the item which should be the current item.
+ \a inputMethodHints is the input method hints that will be used if the
+ combobox is editable and an input method is active.
If \a editable is true the user can enter their own text; otherwise the
user may only select one of the existing items.
@@ -1296,7 +1324,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label,
const QStringList &items, int current, bool editable, bool *ok,
- Qt::WindowFlags flags)
+ Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
{
QString text(items.value(current));
@@ -1306,6 +1334,7 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri
dialog.setComboBoxItems(items);
dialog.setTextValue(text);
dialog.setComboBoxEditable(editable);
+ dialog.setInputMethodHints(inputMethodHints);
int ret = dialog.exec();
if (ok)
@@ -1318,6 +1347,17 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri
}
/*!
+ \internal
+*/
+// ### Qt 5: Use only the version above.
+QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current, bool editable, bool *ok,
+ Qt::WindowFlags flags)
+{
+ return getItem(parent, title, label, items, current, editable, ok, flags, Qt::ImhNone);
+}
+
+/*!
\obsolete
Use getInt() instead.
diff --git a/src/gui/dialogs/qinputdialog.h b/src/gui/dialogs/qinputdialog.h
index 02868c1..25e27b0 100644
--- a/src/gui/dialogs/qinputdialog.h
+++ b/src/gui/dialogs/qinputdialog.h
@@ -167,18 +167,37 @@ public:
void setVisible(bool visible);
+#ifdef Q_QDOC
+ static QString getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode echo = QLineEdit::Normal,
+ const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = 0,
+ Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current = 0, bool editable = true,
+ bool *ok = 0, Qt::WindowFlags flags = 0,
+ Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+#else
static QString getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode echo = QLineEdit::Normal,
const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = 0);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current = 0, bool editable = true,
+ bool *ok = 0, Qt::WindowFlags flags = 0);
+ static QString getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode echo,
+ const QString &text, bool *ok, Qt::WindowFlags flags,
+ Qt::InputMethodHints inputMethodHints);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current, bool editable,
+ bool *ok, Qt::WindowFlags flags,
+ Qt::InputMethodHints inputMethodHints);
+#endif
static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
int minValue = -2147483647, int maxValue = 2147483647,
int step = 1, bool *ok = 0, Qt::WindowFlags flags = 0);
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
double minValue = -2147483647, double maxValue = 2147483647,
int decimals = 1, bool *ok = 0, Qt::WindowFlags flags = 0);
- static QString getItem(QWidget *parent, const QString &title, const QString &label,
- const QStringList &items, int current = 0, bool editable = true,
- bool *ok = 0, Qt::WindowFlags flags = 0);
// obsolete
static int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
diff --git a/src/gui/dialogs/qprintdialog.qdoc b/src/gui/dialogs/qprintdialog.qdoc
index bd406c1..b75fe2e 100644
--- a/src/gui/dialogs/qprintdialog.qdoc
+++ b/src/gui/dialogs/qprintdialog.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri
index c6c020d..8e8664c 100644
--- a/src/gui/egl/egl.pri
+++ b/src/gui/egl/egl.pri
@@ -6,9 +6,21 @@ contains(QT_CONFIG, egl): {
egl/qeglcontext_p.h \
egl/qeglproperties_p.h
- SOURCES += \
- egl/qegl.cpp \
- egl/qeglproperties.cpp
+ SOURCES += \
+ egl/qegl.cpp \
+ egl/qeglproperties.cpp
+ unix {
+ !isEmpty(QMAKE_INCDIR_EGL){
+ INCLUDEPATH += $$QMAKE_INCDIR_EGL
+ }
+ !isEmpty(QMAKE_LIBDIR_EGL){
+ for(p, QMAKE_LIBDIR_EGL) {
+ exists($$p):LIBS += -L$$p
+ }
+ }
+
+ !isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL
+ }
wince*: SOURCES += egl/qegl_wince.cpp
@@ -16,10 +28,14 @@ contains(QT_CONFIG, egl): {
embedded {
SOURCES += egl/qegl_qws.cpp
} else {
- symbian {
- SOURCES += egl/qegl_symbian.cpp
+ qpa {
+ SOURCES += egl/qegl_qpa.cpp
} else {
- SOURCES += egl/qegl_x11.cpp
+ symbian {
+ SOURCES += egl/qegl_symbian.cpp
+ } else {
+ SOURCES += egl/qegl_x11.cpp
+ }
}
}
}
diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp
index af3b79a..66cb843 100644
--- a/src/gui/egl/qegl.cpp
+++ b/src/gui/egl/qegl.cpp
@@ -210,7 +210,7 @@ EGLConfig QEgl::defaultConfig(int devType, API api, ConfigOptions options)
else
configId = qgetenv("QT_GL_EGL_CONFIG");
if (!configId.isEmpty()) {
- // Overriden, so get the EGLConfig for the specified config ID:
+ // Overridden, so get the EGLConfig for the specified config ID:
EGLint properties[] = {
EGL_CONFIG_ID, (EGLint)configId.toInt(),
EGL_NONE
@@ -267,7 +267,7 @@ EGLConfig QEgl::defaultConfig(int devType, API api, ConfigOptions options)
configAttribs.setValue(EGL_STENCIL_SIZE, 1);
configAttribs.setValue(EGL_SAMPLE_BUFFERS, 1);
#ifndef QT_OPENGL_ES_2
- // Aditionally, the GL1 engine likes to have a depth buffer for clipping
+ // Additionally, the GL1 engine likes to have a depth buffer for clipping
configAttribs.setValue(EGL_DEPTH_SIZE, 1);
#endif
}
@@ -394,7 +394,7 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties
}
}
if (ctx == EGL_NO_CONTEXT) {
- ctx = eglCreateContext(display(), cfg, 0, contextProps.properties());
+ ctx = eglCreateContext(display(), cfg, EGL_NO_CONTEXT, contextProps.properties());
if (ctx == EGL_NO_CONTEXT) {
qWarning() << "QEglContext::createContext(): Unable to create EGL context:" << QEgl::errorString();
return false;
diff --git a/src/gui/egl/qegl_qpa.cpp b/src/gui/egl/qegl_qpa.cpp
new file mode 100644
index 0000000..10caf46
--- /dev/null
+++ b/src/gui/egl/qegl_qpa.cpp
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qpaintdevice.h>
+#include <QtGui/qpixmap.h>
+#include <QtGui/qwidget.h>
+#include "qeglcontext_p.h"
+
+#if !defined(QT_NO_EGL)
+
+#include <QtGui/private/qgraphicssystem_p.h>
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/qdesktopwidget.h>
+
+QT_BEGIN_NAMESPACE
+
+EGLNativeDisplayType QEgl::nativeDisplay()
+{
+ return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY);
+}
+
+EGLNativeWindowType QEgl::nativeWindow(QWidget* widget)
+{
+ return (EGLNativeWindowType)(widget->winId());
+}
+
+EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap)
+{
+ Q_UNUSED(pixmap);
+ return 0;
+}
+
+//EGLDisplay QEglContext::display()
+//{
+// return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY));
+//}
+
+static QPlatformScreen *screenForDevice(QPaintDevice *device)
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+
+ QList<QPlatformScreen *> screens = pi->screens();
+
+ int screenNumber;
+ if (device && device->devType() == QInternal::Widget)
+ screenNumber = qApp->desktop()->screenNumber(static_cast<QWidget *>(device));
+ else
+ screenNumber = 0;
+ if (screenNumber < 0 || screenNumber >= screens.size())
+ return 0;
+ return screens[screenNumber];
+}
+
+// Set pixel format and other properties based on a paint device.
+void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
+{
+ if (!dev)
+ return;
+
+ // Find the QGLScreen for this paint device.
+ QPlatformScreen *screen = screenForDevice(dev);
+ if (!screen)
+ return;
+ int devType = dev->devType();
+ if (devType == QInternal::Image)
+ setPixelFormat(static_cast<QImage *>(dev)->format());
+ else
+ setPixelFormat(screen->format());
+}
+
+QT_END_NAMESPACE
+
+#endif // !QT_NO_EGL
diff --git a/src/gui/embedded/qcopchannel_qws.cpp b/src/gui/embedded/qcopchannel_qws.cpp
index 5786866..0d9d9d3 100644
--- a/src/gui/embedded/qcopchannel_qws.cpp
+++ b/src/gui/embedded/qcopchannel_qws.cpp
@@ -502,7 +502,7 @@ void QCopChannel::answer(QWSClient *cl, const QString& ch,
bool known = qcopServerMap && qcopServerMap->contains(c)
&& !((*qcopServerMap)[c]).isEmpty();
// Yes, it's a typo, it's not user-visible, and we choose not to fix it for compatibility
- QLatin1String ans = QLatin1String(known ? "known" : "unkown");
+ QLatin1String ans = QLatin1String(known ? "known" : "unknown");
QWSServerPrivate::sendQCopEvent(cl, QLatin1String(""),
ans, data, true);
return;
diff --git a/src/gui/embedded/qkbd_defaultmap_qws_p.h b/src/gui/embedded/qkbd_defaultmap_qws_p.h
index 16c3459..703dfcd 100644
--- a/src/gui/embedded/qkbd_defaultmap_qws_p.h
+++ b/src/gui/embedded/qkbd_defaultmap_qws_p.h
@@ -642,7 +642,14 @@ const QWSKeyboard::Mapping QWSKbPrivate::s_keymap_default[] = {
{ 111, 0xffff, 0x01000007, 0x00, 0x00, 0x0000 },
{ 111, 0xffff, 0x01000000, 0x06, 0x08, 0x0200 },
{ 111, 0xffff, 0x01000000, 0x0c, 0x08, 0x0200 },
+ { 113, 0xffff, 0x01000071, 0x00, 0x00, 0x0000 },
+ { 114, 0xffff, 0x01000070, 0x00, 0x00, 0x0000 },
+ { 115, 0xffff, 0x01000072, 0x00, 0x00, 0x0000 },
+ { 116, 0xffff, 0x0100010b, 0x00, 0x00, 0x0000 },
{ 119, 0xffff, 0x01000008, 0x00, 0x00, 0x0000 },
+ { 138, 0xffff, 0x01000058, 0x00, 0x00, 0x0000 },
+ { 139, 0xffff, 0x01000055, 0x00, 0x00, 0x0000 },
+
};
const QWSKeyboard::Composing QWSKbPrivate::s_keycompose_default[] = {
diff --git a/src/gui/embedded/qkbd_qws.cpp b/src/gui/embedded/qkbd_qws.cpp
index b28e293..1999ddb 100644
--- a/src/gui/embedded/qkbd_qws.cpp
+++ b/src/gui/embedded/qkbd_qws.cpp
@@ -48,8 +48,16 @@
#include <QDataStream>
#include <QStringList>
+#ifdef Q_WS_QWS
#include "qwindowsystem_qws.h"
#include "qscreen_qws.h"
+#endif
+
+#ifdef Q_WS_QPA
+#include <QWindowSystemInterface>
+#include <QKeyEvent>
+#endif
+
#include "qtimer.h"
#include <stdlib.h>
@@ -352,7 +360,15 @@ QWSKeyboardHandler::~QWSKeyboardHandler()
void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardModifiers modifiers,
bool isPress, bool autoRepeat)
{
+#if defined(Q_WS_QWS)
qwsServer->processKeyEvent(unicode, keycode, modifiers, isPress, autoRepeat);
+#elif defined(Q_WS_QPA)
+ QEvent::Type type = isPress ? QEvent::KeyPress : QEvent::KeyRelease;
+ QString str;
+ if (unicode != 0xffff)
+ str = QString(unicode);
+ QWindowSystemInterface::handleKeyEvent(0, type, keycode, modifiers, str);
+#endif
}
/*!
@@ -375,6 +391,7 @@ void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardM
*/
int QWSKeyboardHandler::transformDirKey(int key)
{
+#ifdef Q_WS_QWS
static int dir_keyrot = -1;
if (dir_keyrot < 0) {
// get the rotation
@@ -387,6 +404,9 @@ int QWSKeyboardHandler::transformDirKey(int key)
}
int xf = qt_screen->transformOrientation() + dir_keyrot;
return (key-Qt::Key_Left+xf)%4+Qt::Key_Left;
+#else
+ return 0;
+#endif
}
/*!
@@ -450,9 +470,11 @@ void QWSKeyboardHandler::endAutoRepeat()
/*!
\fn QWSKeyboardHandler::KeycodeAction QWSKeyboardHandler::processKeycode(quint16 keycode, bool isPress, bool autoRepeat)
+ \since 4.6
+
Maps \a keycode according to a keymap and sends that key event to the
\l{Qt for Embedded Linux} server application.
-
+
Please see the \l{Qt for Embedded Linux Character Input} and the \l
{kmap2qmap} documentations for a description on how to create and use
keymap files.
diff --git a/src/gui/embedded/qtransportauth_qws.cpp b/src/gui/embedded/qtransportauth_qws.cpp
index 9a50702..90e90d1 100644
--- a/src/gui/embedded/qtransportauth_qws.cpp
+++ b/src/gui/embedded/qtransportauth_qws.cpp
@@ -445,7 +445,7 @@ QIODevice *QTransportAuth::passThroughByClient( QWSClient *client ) const
/*!
\internal
Return a QIODevice pointer (to an internal QBuffer) which can be used
- to receive data after authorisation on transport \a d.
+ to receive data after authorization on transport \a d.
The return QIODevice will act as a pass-through.
@@ -468,7 +468,7 @@ QAuthDevice *QTransportAuth::recvBuf( QTransportAuth::Data *data, QIODevice *iod
/*!
Return a QIODevice pointer (to an internal QBuffer) which can be used
- to write data onto, for authorisation on transport \a d.
+ to write data onto, for authorization on transport \a d.
The return QIODevice will act as a pass-through.
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 83aafe9..e9a2f9f 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2365,7 +2365,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible())
fsi = fsi->d_ptr->focusScopeItem;
fsi->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
- /* focusFromShow = */ true);
+ /* focusFromHide = */ false);
}
break;
}
@@ -2375,6 +2375,10 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
QGraphicsItem *fi = subFocusItem;
if (fi && fi != scene->focusItem()) {
scene->setFocusItem(fi);
+ } else if (flags & QGraphicsItem::ItemIsFocusScope &&
+ !scene->focusItem() &&
+ q->isAncestorOf(scene->d_func()->lastFocusItem)) {
+ q_ptr->setFocus();
}
}
} else {
@@ -2385,7 +2389,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
if (p->d_ptr->visible) {
p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
- /* focusFromShow = */ true);
+ /* focusFromHide = */ true);
}
break;
}
@@ -3245,13 +3249,13 @@ bool QGraphicsItem::hasFocus() const
*/
void QGraphicsItem::setFocus(Qt::FocusReason focusReason)
{
- d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromShow = */ false);
+ d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromHide = */ false);
}
/*!
\internal
*/
-void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow)
+void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide)
{
// Disabled / unfocusable items cannot accept focus.
if (!q_ptr->isEnabled() || !(flags & QGraphicsItem::ItemIsFocusable))
@@ -3272,7 +3276,7 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
QGraphicsItem *oldFocusScopeItem = p->d_ptr->focusScopeItem;
p->d_ptr->focusScopeItem = q_ptr;
- if (!p->focusItem() && !focusFromShow) {
+ if (!p->focusItem() && !focusFromHide) {
if (oldFocusScopeItem)
oldFocusScopeItem->d_ptr->focusScopeItemChange(false);
focusScopeItemChange(true);
@@ -3318,8 +3322,7 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim
*/
void QGraphicsItem::clearFocus()
{
- if (hasFocus())
- d_ptr->clearFocusHelper(/* giveFocusToParent = */ true);
+ d_ptr->clearFocusHelper(/* giveFocusToParent = */ true);
}
/*!
@@ -3333,8 +3336,14 @@ void QGraphicsItemPrivate::clearFocusHelper(bool giveFocusToParent)
QGraphicsItem *p = parent;
while (p) {
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
- p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false,
- /* focusFromShow = */ false);
+ if (p->d_ptr->focusScopeItem == q_ptr) {
+ p->d_ptr->focusScopeItem = 0;
+ if (!q_ptr->hasFocus()) //if it has focus, focusScopeItemChange is called elsewhere
+ focusScopeItemChange(false);
+ }
+ if (q_ptr->hasFocus())
+ p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false,
+ /* focusFromHide = */ false);
return;
}
p = p->d_ptr->parent;
@@ -3342,10 +3351,10 @@ void QGraphicsItemPrivate::clearFocusHelper(bool giveFocusToParent)
}
}
- // Invisible items with focus must explicitly clear subfocus.
- clearSubFocus(q_ptr);
-
if (q_ptr->hasFocus()) {
+ // Invisible items with focus must explicitly clear subfocus.
+ clearSubFocus(q_ptr);
+
// If this item has the scene's input focus, clear it.
scene->setFocusItem(0);
}
@@ -3702,6 +3711,8 @@ void QGraphicsItem::setPos(const QPointF &pos)
d_ptr->setPosHelper(pos);
if (d_ptr->isWidget)
static_cast<QGraphicsWidget *>(this)->d_func()->setGeometryFromSetPos();
+ if (d_ptr->scenePosDescendants)
+ d_ptr->sendScenePosChange();
return;
}
@@ -4384,8 +4395,10 @@ void QGraphicsItem::setTransform(const QTransform &matrix, bool combine)
return;
// Update and set the new transformation.
- if (!(d_ptr->flags & ItemSendsGeometryChanges)) {
+ if (!(d_ptr->flags & (ItemSendsGeometryChanges | ItemSendsScenePositionChanges))) {
d_ptr->setTransformHelper(newTransform);
+ if (d_ptr->scenePosDescendants)
+ d_ptr->sendScenePosChange();
return;
}
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index c8a7699..1b7aa97 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -477,7 +477,7 @@ public:
inline void markParentDirty(bool updateBoundingRect = false);
- void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow);
+ void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide);
void clearFocusHelper(bool giveFocusToParent);
void setSubFocus(QGraphicsItem *rootItem = 0);
void clearSubFocus(QGraphicsItem *rootItem = 0);
@@ -722,7 +722,7 @@ public:
/*!
Returns true if \a item1 is on top of \a item2.
- The items dont need to be siblings.
+ The items don't need to be siblings.
\internal
*/
@@ -776,7 +776,7 @@ inline bool qt_closestItemFirst(const QGraphicsItem *item1, const QGraphicsItem
/*!
Returns true if \a item2 is on top of \a item1.
- The items dont need to be siblings.
+ The items don't need to be siblings.
\internal
*/
diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp
index 34ec4e0..fab1bbb 100644
--- a/src/gui/graphicsview/qgraphicslayoutitem.cpp
+++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp
@@ -140,11 +140,9 @@ QSizeF *QGraphicsLayoutItemPrivate::effectiveSizeHints(const QSizeF &constraint)
if (!sizeHintCacheDirty && cachedConstraint == constraint)
return cachedSizeHints;
- const bool hasConstraint = constraint.width() >= 0 || constraint.height() >= 0;
-
for (int i = 0; i < Qt::NSizeHints; ++i) {
cachedSizeHints[i] = constraint;
- if (userSizeHints && !hasConstraint)
+ if (userSizeHints)
combineSize(cachedSizeHints[i], userSizeHints[i]);
}
diff --git a/src/gui/graphicsview/qgraphicsproxywidget.cpp b/src/gui/graphicsview/qgraphicsproxywidget.cpp
index 320395e..bf61150 100644
--- a/src/gui/graphicsview/qgraphicsproxywidget.cpp
+++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp
@@ -266,8 +266,8 @@ void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneMouseEvent
}
if (!lastWidgetUnderMouse) {
- QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : widget, 0);
- lastWidgetUnderMouse = widget;
+ QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : receiver, 0);
+ lastWidgetUnderMouse = receiver;
}
// Map event position from us to the receiver
@@ -1508,7 +1508,7 @@ int QGraphicsProxyWidget::type() const
Creates a proxy widget for the given \a child of the widget
contained in this proxy.
- This function makes it possible to aquire proxies for
+ This function makes it possible to acquire proxies for
non top-level widgets. For instance, you can embed a dialog,
and then transform only one of its widgets.
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 5b1da9e..981fbbc 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -3461,7 +3461,8 @@ bool QGraphicsScene::event(QEvent *event)
break;
}
case QEvent::Leave:
- d->leaveScene();
+ // hackieshly unpacking the viewport pointer from the leave event.
+ d->leaveScene(reinterpret_cast<QWidget *>(event->d));
break;
case QEvent::GraphicsSceneHelp:
helpEvent(static_cast<QGraphicsSceneHelpEvent *>(event));
@@ -3933,20 +3934,19 @@ bool QGraphicsScenePrivate::dispatchHoverEvent(QGraphicsSceneHoverEvent *hoverEv
Handles all actions necessary to clean up the scene when the mouse leaves
the view.
*/
-void QGraphicsScenePrivate::leaveScene()
+void QGraphicsScenePrivate::leaveScene(QWidget *viewport)
{
- Q_Q(QGraphicsScene);
#ifndef QT_NO_TOOLTIP
QToolTip::hideText();
#endif
+ QGraphicsView *view = qobject_cast<QGraphicsView *>(viewport->parent());
// Send HoverLeave events to all existing hover items, topmost first.
- QGraphicsView *senderWidget = qobject_cast<QGraphicsView *>(q->sender());
QGraphicsSceneHoverEvent hoverEvent;
- hoverEvent.setWidget(senderWidget);
+ hoverEvent.setWidget(viewport);
- if (senderWidget) {
+ if (view) {
QPoint cursorPos = QCursor::pos();
- hoverEvent.setScenePos(senderWidget->mapToScene(senderWidget->mapFromGlobal(cursorPos)));
+ hoverEvent.setScenePos(view->mapToScene(viewport->mapFromGlobal(cursorPos)));
hoverEvent.setLastScenePos(hoverEvent.scenePos());
hoverEvent.setScreenPos(cursorPos);
hoverEvent.setLastScreenPos(hoverEvent.screenPos());
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index f28dfe9..2818fb2 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -201,7 +201,7 @@ public:
bool dispatchHoverEvent(QGraphicsSceneHoverEvent *hoverEvent);
bool itemAcceptsHoverEvents_helper(const QGraphicsItem *item) const;
- void leaveScene();
+ void leaveScene(QWidget *viewport);
void cloneDragDropEvent(QGraphicsSceneDragDropEvent *dest,
QGraphicsSceneDragDropEvent *source);
diff --git a/src/gui/graphicsview/qgraphicssceneevent.cpp b/src/gui/graphicsview/qgraphicssceneevent.cpp
index a0ecd4c..d9ff655 100644
--- a/src/gui/graphicsview/qgraphicssceneevent.cpp
+++ b/src/gui/graphicsview/qgraphicssceneevent.cpp
@@ -1629,7 +1629,7 @@ QGraphicsSceneMoveEvent::~QGraphicsSceneMoveEvent()
}
/*!
- Returns the old position (i.e., the position immediatly before the widget
+ Returns the old position (i.e., the position immediately before the widget
was moved).
\sa newPos(), QGraphicsItem::setPos()
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 2db29b9..73f1493 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -80,9 +80,7 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime <
yourself, you can call setSceneRect(). This will adjust the scroll bars'
ranges appropriately. Note that although the scene supports a virtually
unlimited size, the range of the scroll bars will never exceed the range of
- an integer (INT_MIN, INT_MAX). When the scene is larger than the scroll
- bars' values, you can choose to use translate() to navigate the scene
- instead.
+ an integer (INT_MIN, INT_MAX).
QGraphicsView visualizes the scene by calling render(). By default, the
items are drawn onto the viewport by using a regular QPainter, and using
@@ -101,7 +99,8 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime <
convenience functions rotate(), scale(), translate() or shear(). The most
two common transformations are scaling, which is used to implement
zooming, and rotation. QGraphicsView keeps the center of the view fixed
- during a transformation.
+ during a transformation. Because of the scene alignment (setAligment()),
+ translating the view will have no visual impact.
You can interact with the items on the scene by using the mouse and
keyboard. QGraphicsView translates the mouse and key events into \e scene
@@ -2790,6 +2789,9 @@ bool QGraphicsView::viewportEvent(QEvent *event)
d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.first());
}
d->useLastMouseEvent = false;
+ // a hack to pass a viewport pointer to the scene inside the leave event
+ Q_ASSERT(event->d == 0);
+ event->d = reinterpret_cast<QEventPrivate *>(viewport());
QApplication::sendEvent(d->scene, event);
break;
#ifndef QT_NO_TOOLTIP
diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h
index 62be800..38c3bca 100644
--- a/src/gui/graphicsview/qgraphicsview_p.h
+++ b/src/gui/graphicsview/qgraphicsview_p.h
@@ -184,7 +184,7 @@ public:
#ifdef Q_WS_MAC
// QWidget::update() works slightly different on the Mac without the raster engine;
// it's not part of our backing store so it needs special threatment.
- if (QApplicationPrivate::graphics_system_name != "raster") {
+ if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) {
// At this point either HIViewSetNeedsDisplay (Carbon) or setNeedsDisplay: YES (Cocoa)
// is called, which means there's a pending update request. We want to dispatch it
// now because otherwise graphics view updates would require two
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index 1bfe266..e48f9a7 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -450,7 +450,7 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
bottom.
Contents margins are used by the assigned layout to define the placement
- of subwidgets and layouts. Margins are particularily useful for widgets
+ of subwidgets and layouts. Margins are particularly useful for widgets
that constrain subwidgets to only a section of its own geometry. For
example, a group box with a layout will place subwidgets inside its frame,
but below the title.
@@ -750,6 +750,22 @@ QSizeF QGraphicsWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint) c
/*!
\property QGraphicsWidget::layout
\brief The layout of the widget
+
+ Any existing layout manager is deleted before the new layout is assigned. If
+ \a layout is 0, the widget is left without a layout. Existing subwidgets'
+ geometries will remain unaffected.
+
+ QGraphicsWidget takes ownership of \a layout.
+
+ All widgets that are currently managed by \a layout or all of its
+ sublayouts, are automatically reparented to this item. The layout is then
+ invalidated, and the child widget geometries are adjusted according to
+ this item's geometry() and contentsMargins(). Children who are not
+ explicitly managed by \a layout remain unaffected by the layout after
+ it has been assigned to this widget.
+
+ If no layout is currently managing this widget, layout() will return 0.
+
*/
/*!
diff --git a/src/gui/graphicsview/qgridlayoutengine.cpp b/src/gui/graphicsview/qgridlayoutengine.cpp
index f8cd593..7f8d574 100644
--- a/src/gui/graphicsview/qgridlayoutengine.cpp
+++ b/src/gui/graphicsview/qgridlayoutengine.cpp
@@ -631,14 +631,17 @@ QRectF QGridLayoutItem::geometryWithin(qreal x, qreal y, qreal width, qreal heig
qreal cellWidth = width;
qreal cellHeight = height;
- QSize constraint;
+
+ QSizeF size = effectiveMaxSize(QSizeF(-1,-1));
if (hasDynamicConstraint()) {
- if (dynamicConstraintOrientation() == Qt::Vertical)
- constraint.setWidth(cellWidth);
- else
- constraint.setHeight(cellHeight);
+ if (dynamicConstraintOrientation() == Qt::Vertical) {
+ if (size.width() > cellWidth)
+ size = effectiveMaxSize(QSizeF(cellWidth, -1));
+ } else if(size.height() > cellHeight) {
+ size = effectiveMaxSize(QSizeF(-1, cellHeight));
+ }
}
- QSizeF size = effectiveMaxSize(constraint).boundedTo(QSizeF(cellWidth, cellHeight));
+ size = size.boundedTo(QSizeF(cellWidth, cellHeight));
width = size.width();
height = size.height();
@@ -714,7 +717,7 @@ QSizeF QGridLayoutItem::effectiveMaxSize(const QSizeF &constraint) const
}
if (!size.isValid()) {
- QSizeF maxSize = layoutItem()->effectiveSizeHint(Qt::MaximumSize, constraint);
+ QSizeF maxSize = layoutItem()->effectiveSizeHint(Qt::MaximumSize, size);
if (size.width() == -1)
size.setWidth(maxSize.width());
if (size.height() == -1)
@@ -1111,20 +1114,76 @@ QRectF QGridLayoutEngine::cellRect(const QLayoutStyleInfo &styleInfo,
QSizeF QGridLayoutEngine::sizeHint(const QLayoutStyleInfo &styleInfo, Qt::SizeHint which,
const QSizeF &constraint) const
{
- ensureColumnAndRowData(styleInfo);
+ QGridLayoutBox sizehint_totalBoxes[NOrientations];
- if (hasDynamicConstraint())
- return dynamicallyConstrainedSizeHint(which, constraint);
+ if(rowCount() < 1 || columnCount() < 1 || !hasDynamicConstraint()) {
+ //No items with height for width, so it doesn't matter which order we do these in
+ if(q_cachedDataForStyleInfo != styleInfo) {
+ ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal);
+ ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical);
+ } else {
+ sizehint_totalBoxes[Hor] = q_totalBoxes[Hor];
+ sizehint_totalBoxes[Ver] = q_totalBoxes[Ver];
+ }
+ } else if(constraintOrientation() == Qt::Vertical) {
+ //We have items whose width depends on their height
+ if(q_cachedDataForStyleInfo != styleInfo)
+ ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal);
+ else
+ sizehint_totalBoxes[Hor] = q_totalBoxes[Hor];
+ QVector<qreal> sizehint_xx;
+ QVector<qreal> sizehint_widths;
+
+ sizehint_xx.resize(columnCount());
+ sizehint_widths.resize(columnCount());
+ qreal width = constraint.width();
+ if(width < 0) {
+ /* It's not obvious what the behaviour should be. */
+/* if(which == Qt::MaximumSize)
+ width = sizehint_totalBoxes[Hor].q_maximumSize;
+ else if(which == Qt::MinimumSize)
+ width = sizehint_totalBoxes[Hor].q_minimumSize;
+ else*/
+ width = sizehint_totalBoxes[Hor].q_preferredSize;
+ }
+ //Calculate column widths and positions, and put results in q_xx.data() and q_widths.data() so that we can use this information as
+ //constraints to find the row heights
+ q_columnData.calculateGeometries(0, columnCount(), width, sizehint_xx.data(), sizehint_widths.data(),
+ 0, sizehint_totalBoxes[Hor]);
+ ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, sizehint_xx.data(), sizehint_widths.data(), Qt::Vertical);
+ } else {
+ //We have items whose height depends on their width
+ ensureColumnAndRowData(&q_rowData, &sizehint_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical);
+ QVector<qreal> sizehint_yy;
+ QVector<qreal> sizehint_heights;
+
+ sizehint_yy.resize(rowCount());
+ sizehint_heights.resize(rowCount());
+ qreal height = constraint.height();
+ if(height < 0) {
+/* if(which == Qt::MaximumSize)
+ height = sizehint_totalBoxes[Ver].q_maximumSize;
+ else if(which == Qt::MinimumSize)
+ height = sizehint_totalBoxes[Ver].q_minimumSize;
+ else*/
+ height = sizehint_totalBoxes[Ver].q_preferredSize;
+ }
+ //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() so that we can use this information as
+ //constraints to find the column widths
+ q_rowData.calculateGeometries(0, rowCount(), height, sizehint_yy.data(), sizehint_heights.data(),
+ 0, sizehint_totalBoxes[Ver]);
+ ensureColumnAndRowData(&q_columnData, &sizehint_totalBoxes[Hor], styleInfo, sizehint_yy.data(), sizehint_heights.data(), Qt::Vertical);
+ }
switch (which) {
case Qt::MinimumSize:
- return QSizeF(q_totalBoxes[Hor].q_minimumSize, q_totalBoxes[Ver].q_minimumSize);
+ return QSizeF(sizehint_totalBoxes[Hor].q_minimumSize, sizehint_totalBoxes[Ver].q_minimumSize);
case Qt::PreferredSize:
- return QSizeF(q_totalBoxes[Hor].q_preferredSize, q_totalBoxes[Ver].q_preferredSize);
+ return QSizeF(sizehint_totalBoxes[Hor].q_preferredSize, sizehint_totalBoxes[Ver].q_preferredSize);
case Qt::MaximumSize:
- return QSizeF(q_totalBoxes[Hor].q_maximumSize, q_totalBoxes[Ver].q_maximumSize);
+ return QSizeF(sizehint_totalBoxes[Hor].q_maximumSize, sizehint_totalBoxes[Ver].q_maximumSize);
case Qt::MinimumDescent:
- return QSizeF(-1.0, q_totalBoxes[Hor].q_minimumDescent); // ### doesn't work
+ return QSizeF(-1.0, sizehint_totalBoxes[Hor].q_minimumDescent); // ### doesn't work
default:
break;
}
@@ -1300,6 +1359,7 @@ void QGridLayoutEngine::insertOrRemoveRows(int row, int delta, Qt::Orientation o
}
void QGridLayoutEngine::fillRowData(QGridLayoutRowData *rowData, const QLayoutStyleInfo &styleInfo,
+ qreal *colPositions, qreal *colSizes,
Qt::Orientation orientation) const
{
const int ButtonMask = QSizePolicy::ButtonBox | QSizePolicy::PushButton;
@@ -1413,11 +1473,21 @@ void QGridLayoutEngine::fillRowData(QGridLayoutRowData *rowData, const QLayoutSt
box = &multiCell.q_box;
multiCell.q_stretch = itemStretch;
}
- // Items with constraints are not included in the orientation that
- // they are constrained (since it depends on the hfw/constraint function).
- // They must be combined at a later stage.
- if (!item->hasDynamicConstraint() || orientation != item->dynamicConstraintOrientation())
+ // Items with constraints need to be passed the constraint
+ if (colSizes && colPositions && item->hasDynamicConstraint() && orientation == item->dynamicConstraintOrientation()) {
+ /* Get the width of the item by summing up the widths of the columns that it spans.
+ * We need to have already calculated the widths of the columns by calling
+ * q_columns->calculateGeometries() before hand and passing the value in the colSizes
+ * and colPositions parameters.
+ * The variable name is still colSizes even when it actually has the row sizes
+ */
+ qreal length = colSizes[item->lastColumn(orientation)];
+ if (item->columnSpan(orientation) != 1)
+ length += colPositions[item->lastColumn(orientation)] - colPositions[item->firstColumn(orientation)];
+ box->combine(item->box(orientation, length));
+ } else {
box->combine(item->box(orientation));
+ }
if (effectiveRowSpan == 1) {
QSizePolicy::ControlTypes controls = item->controlTypes(top);
@@ -1554,115 +1624,18 @@ void QGridLayoutEngine::ensureEffectiveFirstAndLastRows() const
}
}
-void QGridLayoutEngine::ensureColumnAndRowData(const QLayoutStyleInfo &styleInfo) const
+void QGridLayoutEngine::ensureColumnAndRowData(QGridLayoutRowData *rowData, QGridLayoutBox *totalBox,
+ const QLayoutStyleInfo &styleInfo,
+ qreal *colPositions, qreal *colSizes,
+ Qt::Orientation orientation) const
{
- if (q_cachedDataForStyleInfo == styleInfo)
- return;
-
- q_columnData.reset(columnCount());
- q_rowData.reset(rowCount());
-
- fillRowData(&q_columnData, styleInfo, Qt::Horizontal);
- fillRowData(&q_rowData, styleInfo, Qt::Vertical);
-
- q_columnData.distributeMultiCells();
- q_rowData.distributeMultiCells();
-
- q_totalBoxes[Hor] = q_columnData.totalBox(0, columnCount());
- q_totalBoxes[Ver] = q_rowData.totalBox(0, rowCount());
-
- q_cachedDataForStyleInfo = styleInfo;
+ rowData->reset(rowCount(orientation));
+ fillRowData(rowData, styleInfo, colPositions, colSizes, orientation);
+ rowData->distributeMultiCells();
+ *totalBox = rowData->totalBox(0, rowCount(orientation));
+ //We have items whose width depends on their height
}
-QSizeF QGridLayoutEngine::dynamicallyConstrainedSizeHint(Qt::SizeHint which,
- const QSizeF &constraint) const
-{
- Q_ASSERT(hasDynamicConstraint());
- if (constraint.width() < 0 && constraint.height() < 0) {
- // Process the hfw / wfh items that we did not process in fillRowData()
- const Qt::Orientation constraintOrient = constraintOrientation();
-
- QGridLayoutRowData rowData = constraintOrient == Qt::Vertical ? q_rowData : q_columnData;
- for (int i = q_items.count() - 1; i >= 0; --i) {
- QGridLayoutItem *item = q_items.at(i);
- if (item->hasDynamicConstraint()) {
- QGridLayoutBox box = item->box(constraintOrient);
- QGridLayoutBox &rowBox = rowData.boxes[item->firstRow(constraintOrient)];
- rowBox.combine(box);
- }
- }
-
- QGridLayoutBox totalBoxes[2];
- if (constraintOrient == Qt::Vertical) {
- totalBoxes[Hor] = q_columnData.totalBox(0, columnCount());
- totalBoxes[Ver] = rowData.totalBox(0, rowCount());
- } else {
- totalBoxes[Hor] = rowData.totalBox(0, columnCount());
- totalBoxes[Ver] = q_rowData.totalBox(0, rowCount());
- }
- return QSizeF(totalBoxes[Hor].q_sizes(which), totalBoxes[Ver].q_sizes(which));
- }
-
-
- Q_ASSERT(constraint.width() >= 0 || constraint.height() >= 0);
- q_xx.resize(columnCount());
- q_yy.resize(rowCount());
- q_widths.resize(columnCount());
- q_heights.resize(rowCount());
- q_descents.resize(rowCount());
-
-
- const Qt::Orientation orientation = constraintOrientation();
- QGridLayoutRowData *colData;
- QGridLayoutRowData constrainedRowData;
- QGridLayoutBox *totalBox;
- qreal *sizes;
- qreal *pos;
- qreal *descents;
- qreal targetSize;
- qreal cCount;
- qreal rCount;
-
- if (orientation == Qt::Vertical) {
- // height for width
- colData = &q_columnData;
- totalBox = &q_totalBoxes[Hor];
- sizes = q_widths.data();
- pos = q_xx.data();
- descents = 0;
- targetSize = constraint.width();
- cCount = columnCount();
- rCount = rowCount();
- constrainedRowData = q_rowData;
- } else {
- // width for height
- colData = &q_rowData;
- totalBox = &q_totalBoxes[Ver];
- sizes = q_heights.data();
- pos = q_yy.data();
- descents = q_descents.data();
- targetSize = constraint.height();
- cCount = rowCount();
- rCount = columnCount();
- constrainedRowData = q_columnData;
- }
- colData->calculateGeometries(0, cCount, targetSize, pos, sizes, descents, *totalBox);
- for (int i = q_items.count() - 1; i >= 0; --i) {
- QGridLayoutItem *item = q_items.at(i);
-
- if (item->hasDynamicConstraint()) {
- const qreal size = sizes[item->firstColumn(orientation)];
- QGridLayoutBox box = item->box(orientation, size);
- QGridLayoutBox &rowBox = constrainedRowData.boxes[item->firstRow(orientation)];
- rowBox.combine(box);
- }
- }
- const qreal newSize = constrainedRowData.totalBox(0, rCount).q_sizes(which);
-
- return (orientation == Qt::Vertical) ? QSizeF(targetSize, newSize) : QSizeF(newSize, targetSize);
-}
-
-
/**
returns false if the layout has contradicting constraints (i.e. some items with a horizontal
constraint and other items with a vertical constraint)
@@ -1709,85 +1682,41 @@ Qt::Orientation QGridLayoutEngine::constraintOrientation() const
void QGridLayoutEngine::ensureGeometries(const QLayoutStyleInfo &styleInfo,
const QSizeF &size) const
{
- ensureColumnAndRowData(styleInfo);
- if (q_cachedSize == size)
+ if (q_cachedDataForStyleInfo == styleInfo && q_cachedSize == size)
return;
+ q_cachedDataForStyleInfo = styleInfo;
+ q_cachedSize = size;
+
q_xx.resize(columnCount());
- q_yy.resize(rowCount());
q_widths.resize(columnCount());
+ q_yy.resize(rowCount());
q_heights.resize(rowCount());
q_descents.resize(rowCount());
-
- Qt::Orientation orientation = Qt::Vertical;
- if (hasDynamicConstraint())
- orientation = constraintOrientation();
-
- /*
- In order to do hfw we need to first distribute the columns, then the rows.
- In order to do wfh we need to first distribute the rows, then the columns.
-
- If there is no constraint, the order of distributing the rows or columns first is irrelevant.
- We choose horizontal just to keep the same behaviour as before (however, there shouldn't
- be any behaviour difference).
- */
-
- QGridLayoutRowData *colData;
- QGridLayoutRowData rowData;
- qreal *widths;
- qreal *heights;
- qreal *xx;
- qreal *yy;
- qreal *xdescents = 0;
- qreal *ydescents = 0;
- qreal cCount;
- qreal rCount;
- QSizeF oSize = size;
- if (orientation == Qt::Vertical) {
- // height for width
- colData = &q_columnData;
- rowData = q_rowData;
- widths = q_widths.data();
- heights = q_heights.data();
- xx = q_xx.data();
- yy = q_yy.data();
- cCount = columnCount();
- rCount = rowCount();
- ydescents = q_descents.data();
+ if(constraintOrientation() != Qt::Horizontal) {
+ //We might have items whose width depends on their height
+ ensureColumnAndRowData(&q_columnData, &q_totalBoxes[Hor], styleInfo, NULL, NULL, Qt::Horizontal);
+ //Calculate column widths and positions, and put results in q_xx.data() and q_widths.data() so that we can use this information as
+ //constraints to find the row heights
+ q_columnData.calculateGeometries(0, columnCount(), size.width(), q_xx.data(), q_widths.data(),
+ 0, q_totalBoxes[Hor]);
+ ensureColumnAndRowData(&q_rowData, &q_totalBoxes[Ver], styleInfo, q_xx.data(), q_widths.data(), Qt::Vertical);
+ //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data()
+ q_rowData.calculateGeometries(0, rowCount(), size.height(), q_yy.data(), q_heights.data(),
+ q_descents.data(), q_totalBoxes[Ver]);
} else {
- // width for height
- colData = &q_rowData;
- rowData = q_columnData;
- widths = q_heights.data();
- heights = q_widths.data();
- xx = q_yy.data();
- yy = q_xx.data();
- cCount = rowCount();
- rCount = columnCount();
- xdescents = q_descents.data();
- oSize.transpose();
+ //We have items whose height depends on their width
+ ensureColumnAndRowData(&q_rowData, &q_totalBoxes[Ver], styleInfo, NULL, NULL, Qt::Vertical);
+ //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data() so that we can use this information as
+ //constraints to find the column widths
+ q_rowData.calculateGeometries(0, rowCount(), size.height(), q_yy.data(), q_heights.data(),
+ q_descents.data(), q_totalBoxes[Ver]);
+ ensureColumnAndRowData(&q_columnData, &q_totalBoxes[Hor], styleInfo, q_yy.data(), q_heights.data(), Qt::Horizontal);
+ //Calculate row heights and positions, and put results in q_yy.data() and q_heights.data()
+ q_columnData.calculateGeometries(0, columnCount(), size.width(), q_xx.data(), q_widths.data(),
+ 0, q_totalBoxes[Hor]);
}
-
- colData->calculateGeometries(0, cCount, oSize.width(), xx, widths,
- xdescents, q_totalBoxes[orientation == Qt::Horizontal]);
- for (int i = q_items.count() - 1; i >= 0; --i) {
- QGridLayoutItem *item = q_items.at(i);
- const int col = item->firstColumn(orientation);
- const int row = item->firstRow(orientation);
- if (item->hasDynamicConstraint()) {
- const qreal sz = widths[col];
- QGridLayoutBox box = item->box(orientation, sz);
- rowData.boxes[row].combine(box);
- }
- }
-
- QGridLayoutBox &totalBox = q_totalBoxes[orientation == Qt::Vertical];
- totalBox = rowData.totalBox(0, rCount);
- rowData.calculateGeometries(0, rCount, oSize.height(), yy, heights,
- ydescents, totalBox);
-
- q_cachedSize = size;
}
QT_END_NAMESPACE
diff --git a/src/gui/graphicsview/qgridlayoutengine_p.h b/src/gui/graphicsview/qgridlayoutengine_p.h
index 55451d7..7c77b2a 100644
--- a/src/gui/graphicsview/qgridlayoutengine_p.h
+++ b/src/gui/graphicsview/qgridlayoutengine_p.h
@@ -93,8 +93,8 @@ enum LayoutSide {
enum {
NoConstraint,
- HorizontalConstraint,
- VerticalConstraint,
+ HorizontalConstraint, // Width depends on the height
+ VerticalConstraint, // Height depends on the width
UnknownConstraint, // need to update cache
UnfeasibleConstraint // not feasible, it be has some items with Vertical and others with Horizontal constraints
};
@@ -411,9 +411,14 @@ private:
void setItemAt(int row, int column, QGridLayoutItem *item);
void insertOrRemoveRows(int row, int delta, Qt::Orientation orientation = Qt::Vertical);
void fillRowData(QGridLayoutRowData *rowData, const QLayoutStyleInfo &styleInfo,
- Qt::Orientation orientation = Qt::Vertical) const;
+ qreal *colPositions, qreal *colSizes,
+ Qt::Orientation orientation = Qt::Vertical) const;
void ensureEffectiveFirstAndLastRows() const;
- void ensureColumnAndRowData(const QLayoutStyleInfo &styleInfo) const;
+ void ensureColumnAndRowData(QGridLayoutRowData *rowData, QGridLayoutBox *totalBox,
+ const QLayoutStyleInfo &styleInfo,
+ qreal *colPositions, qreal *colSizes,
+ Qt::Orientation orientation) const;
+
void ensureGeometries(const QLayoutStyleInfo &styleInfo, const QSizeF &size) const;
// User input
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 90b5de5..11a25e2 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -5,7 +5,7 @@ DEFINES += QT_BUILD_GUI_LIB QT_NO_USING_NAMESPACE
win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x65000000
irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
-!win32:!embedded:!mac:!symbian:CONFIG += x11
+!win32:!embedded:!qpa:!mac:!symbian:CONFIG += x11
unix:QMAKE_PKGCONFIG_REQUIRES = QtCore
@@ -64,13 +64,12 @@ symbian {
neon:*-g++* {
DEFINES += QT_HAVE_NEON
- QMAKE_CXXFLAGS *= -mfpu=neon
HEADERS += $$NEON_HEADERS
SOURCES += $$NEON_SOURCES
DRAWHELPER_NEON_ASM_FILES = $$NEON_ASM
- neon_compiler.commands = $$QMAKE_CXX -c
+ neon_compiler.commands = $$QMAKE_CXX -c -mfpu=neon
neon_compiler.commands += $(CXXFLAGS) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
neon_compiler.dependency_type = TYPE_C
neon_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri
index f89706c..92ea397 100644
--- a/src/gui/image/image.pri
+++ b/src/gui/image/image.pri
@@ -23,6 +23,7 @@ HEADERS += \
image/qpictureformatplugin.h \
image/qpixmap.h \
image/qpixmap_raster_p.h \
+ image/qpixmap_blitter_p.h \
image/qpixmapcache.h \
image/qpixmapcache_p.h \
image/qpixmapdata_p.h \
@@ -50,6 +51,7 @@ SOURCES += \
image/qiconengineplugin.cpp \
image/qmovie.cpp \
image/qpixmap_raster.cpp \
+ image/qpixmap_blitter.cpp \
image/qnativeimage.cpp \
image/qimagepixmapcleanuphooks.cpp
@@ -59,6 +61,9 @@ win32 {
else:embedded {
SOURCES += image/qpixmap_qws.cpp
}
+else:qpa {
+ SOURCES += image/qpixmap_qpa.cpp
+}
else:x11 {
HEADERS += image/qpixmap_x11_p.h
SOURCES += image/qpixmap_x11.cpp
diff --git a/src/gui/image/qbitmap.cpp b/src/gui/image/qbitmap.cpp
index 91622f3..9d90b3f 100644
--- a/src/gui/image/qbitmap.cpp
+++ b/src/gui/image/qbitmap.cpp
@@ -227,6 +227,14 @@ QBitmap::~QBitmap()
}
/*!
+ \fn void QBitmap::swap(QBitmap &other)
+ \since 4.8
+
+ Swaps bitmap \a other with this bitmap. This operation is very
+ fast and never fails.
+*/
+
+/*!
Returns the bitmap as a QVariant.
*/
QBitmap::operator QVariant() const
diff --git a/src/gui/image/qbitmap.h b/src/gui/image/qbitmap.h
index 1bbe1cf..93be951 100644
--- a/src/gui/image/qbitmap.h
+++ b/src/gui/image/qbitmap.h
@@ -63,6 +63,7 @@ public:
~QBitmap();
QBitmap &operator=(const QPixmap &);
+ inline void swap(QBitmap &other) { QPixmap::swap(other); } // prevent QBitmap<->QPixmap swaps
operator QVariant() const;
inline void clear() { fill(Qt::color0); }
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index a2f429a..e54bb5f 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -613,6 +613,14 @@ QIcon &QIcon::operator=(const QIcon &other)
}
/*!
+ \fn void QIcon::swap(QIcon &other)
+ \since 4.8
+
+ Swaps icon \a other with this icon. This operation is very
+ fast and never fails.
+*/
+
+/*!
Returns the icon as a QVariant.
*/
QIcon::operator QVariant() const
diff --git a/src/gui/image/qicon.h b/src/gui/image/qicon.h
index fd591e6..5091d03 100644
--- a/src/gui/image/qicon.h
+++ b/src/gui/image/qicon.h
@@ -75,6 +75,8 @@ public:
inline QIcon &operator=(QIcon &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QIcon &other) { qSwap(d, other.d); }
+
operator QVariant() const;
QPixmap pixmap(const QSize &size, Mode mode = Normal, State state = Off) const;
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 300e04b..d86021cb9 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -1329,6 +1329,14 @@ QImage &QImage::operator=(const QImage &image)
}
/*!
+ \fn void QImage::swap(QImage &other)
+ \since 4.8
+
+ Swaps image \a other with this image. This operation is very
+ fast and never fails.
+*/
+
+/*!
\internal
*/
int QImage::devType() const
@@ -6689,6 +6697,10 @@ bool QImageData::convertInPlace(QImage::Format newFormat, Qt::ImageConversionFla
if (format == newFormat)
return true;
+ // No in-place conversion if we have to detach
+ if (ref > 1)
+ return false;
+
const InPlace_Image_Converter *const converterPtr = &inplace_converter_map[format][newFormat];
InPlace_Image_Converter converter = *converterPtr;
if (converter)
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index 4fe7da2..c6a947e 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -144,6 +144,7 @@ public:
inline QImage &operator=(QImage &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QImage &other) { qSwap(d, other.d); }
bool isNull() const;
@@ -334,6 +335,7 @@ private:
QImageData *d;
friend class QRasterPixmapData;
+ friend class QBlittablePixmapData;
friend class QPixmapCacheEntry;
friend Q_GUI_EXPORT qint64 qt_image_id(const QImage &image);
friend const QVector<QRgb> *qt_image_colortable(const QImage &image);
diff --git a/src/gui/image/qimage_ssse3.cpp b/src/gui/image/qimage_ssse3.cpp
index 9aed011..836d7b0 100644
--- a/src/gui/image/qimage_ssse3.cpp
+++ b/src/gui/image/qimage_ssse3.cpp
@@ -54,7 +54,7 @@ Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_ssse3(quint32 *dst, con
{
quint32 *const end = dst + len;
- // Prologue, align dst to 16 bytes. The alignement is done on dst because it has 4 store()
+ // Prologue, align dst to 16 bytes. The alignment is done on dst because it has 4 store()
// for each 3 load() of src.
const int offsetToAlignOn16Bytes = (4 - ((reinterpret_cast<quintptr>(dst) >> 2) & 0x3)) & 0x3;
const int prologLength = qMin(len, offsetToAlignOn16Bytes);
diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp
index 8446387..0f7872e 100644
--- a/src/gui/image/qnativeimage.cpp
+++ b/src/gui/image/qnativeimage.cpp
@@ -45,6 +45,9 @@
#include "private/qpaintengine_raster_p.h"
+#include "private/qapplication_p.h"
+#include "private/qgraphicssystem_p.h"
+
#if defined(Q_WS_X11) && !defined(QT_NO_MITSHM)
#include <qx11info_x11.h>
#include <sys/ipc.h>
@@ -241,8 +244,19 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool /*
: image(width, height, format)
{
-
uint cgflags = kCGImageAlphaNoneSkipFirst;
+ switch (format) {
+ case QImage::Format_ARGB32:
+ cgflags = kCGImageAlphaFirst;
+ break;
+ case QImage::Format_ARGB32_Premultiplied:
+ case QImage::Format_ARGB8565_Premultiplied:
+ case QImage::Format_ARGB6666_Premultiplied:
+ case QImage::Format_ARGB8555_Premultiplied:
+ case QImage::Format_ARGB4444_Premultiplied:
+ cgflags = kCGImageAlphaPremultipliedFirst;
+ break;
+ }
#ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version
cgflags |= kCGBitmapByteOrder32Host;
@@ -284,7 +298,11 @@ QNativeImage::~QNativeImage()
QImage::Format QNativeImage::systemFormat()
{
+#ifdef Q_WS_QPA
+ return QApplicationPrivate::platformIntegration()->screens().at(0)->format();
+#else
return QImage::Format_RGB32;
+#endif
}
#endif // platforms
diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp
index 48d2de3..fc81d23 100644
--- a/src/gui/image/qpicture.cpp
+++ b/src/gui/image/qpicture.cpp
@@ -1030,6 +1030,14 @@ QPicture& QPicture::operator=(const QPicture &p)
}
/*!
+ \fn void QPicture::swap(QPicture &other)
+ \since 4.8
+
+ Swaps picture \a other with this picture. This operation is very
+ fast and never fails.
+*/
+
+/*!
\internal
Constructs a QPicturePrivate
diff --git a/src/gui/image/qpicture.h b/src/gui/image/qpicture.h
index 49b0fd6..d24f23a 100644
--- a/src/gui/image/qpicture.h
+++ b/src/gui/image/qpicture.h
@@ -85,6 +85,7 @@ public:
inline QPicture &operator=(QPicture &&other)
{ qSwap(d_ptr, other.d_ptr); return *this; }
#endif
+ inline void swap(QPicture &other) { d_ptr.swap(other.d_ptr); }
void detach();
bool isDetached() const;
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index ad07fbd..9fd10ae 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -440,6 +440,14 @@ QPixmap &QPixmap::operator=(const QPixmap &pixmap)
}
/*!
+ \fn void QPixmap::swap(QPixmap &other)
+ \since 4.8
+
+ Swaps pixmap \a other with this pixmap. This operation is very
+ fast and never fails.
+*/
+
+/*!
Returns the pixmap as a QVariant.
*/
QPixmap::operator QVariant() const
@@ -1102,6 +1110,9 @@ QPixmap QPixmap::grabWidget(QWidget * widget, const QRect &rect)
return QPixmap();
QPixmap res(r.size());
+ if (!qt_widget_private(widget)->isOpaque)
+ res.fill(Qt::transparent);
+
widget->d_func()->render(&res, QPoint(), r, QWidget::DrawWindowBackground
| QWidget::DrawChildren | QWidget::IgnoreMask, true);
return res;
@@ -1964,6 +1975,8 @@ int QPixmap::defaultDepth()
return 32;
#elif defined(Q_OS_SYMBIAN)
return S60->screenDepth;
+#elif defined(Q_WS_QPA)
+ return 32; //LITE: use graphicssystem (we should do that in general)
#endif
}
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index e9f9365..15fe5fa 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -87,6 +87,8 @@ public:
inline QPixmap &operator=(QPixmap &&other)
{ qSwap(data, other.data); return *this; }
#endif
+ inline void swap(QPixmap &other) { qSwap(data, other.data); }
+
operator QVariant() const;
bool isNull() const; // ### Qt 5: make inline
diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp
new file mode 100644
index 0000000..e8a7b89
--- /dev/null
+++ b/src/gui/image/qpixmap_blitter.cpp
@@ -0,0 +1,311 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qpixmap_blitter_p.h"
+
+#include <qpainter.h>
+#include <qimage.h>
+
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_p.h>
+#include <private/qblittable_p.h>
+
+#include <private/qdrawhelper_p.h>
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+static int global_ser_no = 0;
+
+QBlittablePixmapData::QBlittablePixmapData()
+ : QPixmapData(QPixmapData::PixmapType,BlitterClass), m_engine(0), m_blittable(0)
+#ifdef QT_BLITTER_RASTEROVERLAY
+ ,m_rasterOverlay(0), m_unmergedCopy(0)
+#endif //QT_BLITTER_RASTEROVERLAY
+{
+ setSerialNumber(++global_ser_no);
+}
+
+QBlittablePixmapData::~QBlittablePixmapData()
+{
+ delete m_blittable;
+ delete m_engine;
+#ifdef QT_BLITTER_RASTEROVERLAY
+ delete m_rasterOverlay;
+ delete m_unmergedCopy;
+#endif //QT_BLITTER_RASTEROVERLAY
+}
+
+QBlittable *QBlittablePixmapData::blittable() const
+{
+ if (!m_blittable) {
+ QBlittablePixmapData *that = const_cast<QBlittablePixmapData *>(this);
+ that->m_blittable = this->createBlittable(QSize(w,h));
+ }
+
+ return m_blittable;
+}
+
+void QBlittablePixmapData::setBlittable(QBlittable *blittable)
+{
+ resize(blittable->size().width(),blittable->size().height());
+ m_blittable = blittable;
+}
+
+void QBlittablePixmapData::resize(int width, int height)
+{
+
+ delete m_blittable;
+ m_blittable = 0;
+ delete m_engine;
+ m_engine = 0;
+#ifdef Q_WS_QPA
+ d = QApplicationPrivate::platformIntegration()->screens().at(0)->depth();
+#endif
+ w = width;
+ h = height;
+ is_null = (w <= 0 || h <= 0);
+}
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
+
+int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
+{
+ switch (metric) {
+ case QPaintDevice::PdmWidth:
+ return w;
+ case QPaintDevice::PdmHeight:
+ return h;
+ case QPaintDevice::PdmWidthMM:
+ return qRound(w * 25.4 / qt_defaultDpiX());
+ case QPaintDevice::PdmHeightMM:
+ return qRound(h * 25.4 / qt_defaultDpiY());
+ case QPaintDevice::PdmDepth:
+ return 32;
+ case QPaintDevice::PdmDpiX: // fall-through
+ case QPaintDevice::PdmPhysicalDpiX:
+ return qt_defaultDpiX();
+ case QPaintDevice::PdmDpiY: // fall-through
+ case QPaintDevice::PdmPhysicalDpiY:
+ return qt_defaultDpiY();
+ default:
+ qWarning("QRasterPixmapData::metric(): Unhandled metric type %d", metric);
+ break;
+ }
+
+ return 0;
+}
+
+void QBlittablePixmapData::fill(const QColor &color)
+{
+ //jlind: todo: change when blittables can support non opaque fillRects
+ if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) {
+ blittable()->unlock();
+ blittable()->fillRect(QRectF(0,0,w,h),color);
+ }else {
+ uint pixel;
+ switch (blittable()->lock()->format()) {
+ case QImage::Format_ARGB32_Premultiplied:
+ pixel = PREMUL(color.rgba());
+ break;
+ case QImage::Format_ARGB8565_Premultiplied:
+ pixel = qargb8565(color.rgba()).rawValue();
+ break;
+ case QImage::Format_ARGB8555_Premultiplied:
+ pixel = qargb8555(color.rgba()).rawValue();
+ break;
+ case QImage::Format_ARGB6666_Premultiplied:
+ pixel = qargb6666(color.rgba()).rawValue();
+ break;
+ case QImage::Format_ARGB4444_Premultiplied:
+ pixel = qargb4444(color.rgba()).rawValue();
+ break;
+ default:
+ pixel = color.rgba();
+ break;
+ }
+ //so premultiplied formats are supported and ARGB32 and RGB32
+ blittable()->lock()->fill(pixel);
+ }
+
+}
+
+QImage *QBlittablePixmapData::buffer()
+{
+ return blittable()->lock();
+}
+
+QImage QBlittablePixmapData::toImage() const
+{
+ return blittable()->lock()->copy();
+}
+
+bool QBlittablePixmapData::hasAlphaChannel() const
+{
+ return blittable()->lock()->hasAlphaChannel();
+}
+
+void QBlittablePixmapData::fromImage(const QImage &image,
+ Qt::ImageConversionFlags flags)
+{
+ resize(image.width(),image.height());
+ markRasterOverlay(QRect(0,0,w,h));
+ QImage *thisImg = buffer();
+
+ QImage correctFormatPic = image;
+ if (correctFormatPic.format() != thisImg->format())
+ correctFormatPic = correctFormatPic.convertToFormat(thisImg->format(), flags);
+
+ uchar *mem = thisImg->bits();
+ const uchar *bits = correctFormatPic.bits();
+ int bytesCopied = 0;
+ while (bytesCopied < correctFormatPic.byteCount()) {
+ memcpy(mem,bits,correctFormatPic.bytesPerLine());
+ mem += thisImg->bytesPerLine();
+ bits += correctFormatPic.bytesPerLine();
+ bytesCopied+=correctFormatPic.bytesPerLine();
+ }
+}
+
+QPaintEngine *QBlittablePixmapData::paintEngine() const
+{
+ if (!m_engine) {
+ QBlittablePixmapData *that = const_cast<QBlittablePixmapData *>(this);
+ that->m_engine = new QBlitterPaintEngine(that);
+ }
+ return m_engine;
+}
+
+#ifdef QT_BLITTER_RASTEROVERLAY
+
+static bool showRasterOverlay = !qgetenv("QT_BLITTER_RASTEROVERLAY").isEmpty();
+
+void QBlittablePixmapData::mergeOverlay()
+{
+ if (m_unmergedCopy || !showRasterOverlay)
+ return;
+ m_unmergedCopy = new QImage(buffer()->copy());
+ QPainter p(buffer());
+ p.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ p.drawImage(0,0,*overlay());
+ p.end();
+}
+
+void QBlittablePixmapData::unmergeOverlay()
+{
+ if (!m_unmergedCopy || !showRasterOverlay)
+ return;
+ QPainter p(buffer());
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ p.drawImage(0,0,*m_unmergedCopy);
+ p.end();
+
+ delete m_unmergedCopy;
+ m_unmergedCopy = 0;
+}
+
+QImage *QBlittablePixmapData::overlay()
+{
+ if (!m_rasterOverlay||
+ m_rasterOverlay->size() != QSize(w,h)){
+ m_rasterOverlay = new QImage(w,h,QImage::Format_ARGB32_Premultiplied);
+ m_rasterOverlay->fill(0x00000000);
+ uint color = (qrand() % 11)+7;
+ m_overlayColor = QColor(Qt::GlobalColor(color));
+ m_overlayColor.setAlpha(0x88);
+
+ }
+ return m_rasterOverlay;
+}
+
+void QBlittablePixmapData::markRasterOverlayImpl(const QRectF &rect)
+{
+ if (!showRasterOverlay)
+ return;
+ QRectF transformationRect = clipAndTransformRect(rect);
+ if(!transformationRect.isEmpty()) {
+ QPainter p(overlay());
+ p.setBrush(m_overlayColor);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ p.fillRect(transformationRect,QBrush(m_overlayColor));
+ }
+}
+
+void QBlittablePixmapData::unmarkRasterOverlayImpl(const QRectF &rect)
+{
+ if (!showRasterOverlay)
+ return;
+ QRectF transformationRect = clipAndTransformRect(rect);
+ if (!transformationRect.isEmpty()) {
+ QPainter p(overlay());
+ QColor color(0x00,0x00,0x00,0x00);
+ p.setBrush(color);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ p.fillRect(transformationRect,QBrush(color));
+ }
+}
+
+QRectF QBlittablePixmapData::clipAndTransformRect(const QRectF &rect) const
+{
+ QRectF transformationRect = rect;
+ paintEngine();
+ if (m_engine->state()) {
+ transformationRect = m_engine->state()->matrix.mapRect(rect);
+ const QClipData *clipData = m_engine->clip();
+ if (clipData) {
+ if (clipData->hasRectClip) {
+ transformationRect &= clipData->clipRect;
+ } else if (clipData->hasRegionClip) {
+ const QVector<QRect> rects = clipData->clipRegion.rects();
+ for (int i = 0; i < rects.size(); i++) {
+ transformationRect &= rects.at(i);
+ }
+ }
+ }
+ }
+ return transformationRect;
+}
+
+#endif //QT_BLITTER_RASTEROVERLAY
+
+QT_END_NAMESPACE
+
+#endif //QT_NO_BLITTABLE
diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h
new file mode 100644
index 0000000..55b5618
--- /dev/null
+++ b/src/gui/image/qpixmap_blitter_p.h
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPIXMAP_BLITTER_P_H
+#define QPIXMAP_BLITTER_P_H
+
+#include <private/qpixmapdata_p.h>
+#include <private/qpaintengine_blitter_p.h>
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData
+{
+// Q_DECLARE_PRIVATE(QBlittablePixmapData);
+public:
+ QBlittablePixmapData();
+ ~QBlittablePixmapData();
+
+ virtual QBlittable *createBlittable(const QSize &size) const = 0;
+ QBlittable *blittable() const;
+ void setBlittable(QBlittable *blittable);
+
+ void resize(int width, int height);
+ int metric(QPaintDevice::PaintDeviceMetric metric) const;
+ void fill(const QColor &color);
+ QImage *buffer();
+ QImage toImage() const;
+ bool hasAlphaChannel() const;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
+
+ QPaintEngine *paintEngine() const;
+
+ void markRasterOverlay(const QRectF &);
+ void markRasterOverlay(const QPointF &, const QTextItem &);
+ void markRasterOverlay(const QVectorPath &);
+ void markRasterOverlay(const QRect *rects, int rectCount);
+ void markRasterOverlay(const QRectF *rects, int rectCount);
+ void unmarkRasterOverlay(const QRectF &);
+
+#ifdef QT_BLITTER_RASTEROVERLAY
+ void mergeOverlay();
+ void unmergeOverlay();
+ QImage *overlay();
+
+#endif //QT_BLITTER_RASTEROVERLAY
+protected:
+ QBlitterPaintEngine *m_engine;
+ QBlittable *m_blittable;
+
+#ifdef QT_BLITTER_RASTEROVERLAY
+ QImage *m_rasterOverlay;
+ QImage *m_unmergedCopy;
+ QColor m_overlayColor;
+
+ void markRasterOverlayImpl(const QRectF &);
+ void unmarkRasterOverlayImpl(const QRectF &);
+ QRectF clipAndTransformRect(const QRectF &) const;
+#endif //QT_BLITTER_RASTEROVERLAY
+
+};
+
+inline void QBlittablePixmapData::markRasterOverlay(const QRectF &rect)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ markRasterOverlayImpl(rect);
+#else
+ Q_UNUSED(rect)
+#endif
+}
+
+inline void QBlittablePixmapData::markRasterOverlay(const QVectorPath &path)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ markRasterOverlayImpl(path.convertToPainterPath().boundingRect());
+#else
+ Q_UNUSED(path)
+#endif
+}
+
+inline void QBlittablePixmapData::markRasterOverlay(const QPointF &pos, const QTextItem &ti)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ QFontMetricsF fm(ti.font());
+ QRectF rect = fm.tightBoundingRect(ti.text());
+ rect.moveBottomLeft(pos);
+ markRasterOverlay(rect);
+#else
+ Q_UNUSED(pos)
+ Q_UNUSED(ti)
+#endif
+}
+
+inline void QBlittablePixmapData::markRasterOverlay(const QRect *rects, int rectCount)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ for (int i = 0; i < rectCount; i++) {
+ markRasterOverlay(rects[i]);
+ }
+#else
+ Q_UNUSED(rects)
+ Q_UNUSED(rectCount)
+#endif
+}
+inline void QBlittablePixmapData::markRasterOverlay(const QRectF *rects, int rectCount)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ for (int i = 0; i < rectCount; i++) {
+ markRasterOverlay(rects[i]);
+ }
+#else
+ Q_UNUSED(rects)
+ Q_UNUSED(rectCount)
+#endif
+}
+
+inline void QBlittablePixmapData::unmarkRasterOverlay(const QRectF &rect)
+{
+#ifdef QT_BLITTER_RASTEROVERLAY
+ unmarkRasterOverlayImpl(rect);
+#else
+ Q_UNUSED(rect)
+#endif
+}
+
+QT_END_NAMESPACE
+#endif // QT_NO_BLITTABLE
+#endif // QPIXMAP_BLITTER_P_H
diff --git a/src/gui/image/qpixmap_qpa.cpp b/src/gui/image/qpixmap_qpa.cpp
new file mode 100644
index 0000000..61be216
--- /dev/null
+++ b/src/gui/image/qpixmap_qpa.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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qpixmap.h>
+#include <private/qgraphicssystem_p.h>
+#include <private/qapplication_p.h>
+
+QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h)
+{
+ return QApplicationPrivate::platformIntegration()->grabWindow(window, x, y, w, h);
+}
diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp
index 47249d9..b7c8acb 100644
--- a/src/gui/image/qpixmap_s60.cpp
+++ b/src/gui/image/qpixmap_s60.cpp
@@ -968,11 +968,12 @@ void QS60PixmapData::fromNativeType(void* pixmap, NativeType nativeType)
if (needsCopy) {
TSize size = sourceBitmap->SizeInPixels();
+ int bytesPerLine = sourceBitmap->ScanLineLength(size.iWidth, displayMode);
QSymbianBitmapDataAccess da;
da.beginDataAccess(sourceBitmap);
uchar *bytes = (uchar*)sourceBitmap->DataAddress();
- QImage img = QImage(bytes, size.iWidth, size.iHeight, format);
+ QImage img = QImage(bytes, size.iWidth, size.iHeight, bytesPerLine, format);
img = img.copy();
da.endDataAccess(sourceBitmap);
diff --git a/src/gui/image/qpixmap_x11_p.h b/src/gui/image/qpixmap_x11_p.h
index f171281..7eab64c 100644
--- a/src/gui/image/qpixmap_x11_p.h
+++ b/src/gui/image/qpixmap_x11_p.h
@@ -115,7 +115,7 @@ private:
friend class QEglContext; // Needs gl_surface
friend class QGLContext; // Needs gl_surface
friend class QX11GLPixmapData; // Needs gl_surface
- friend class QMeeGoGraphicsSystem; // Needs gl_surface and flags
+ friend class QMeeGoLivePixmapData; // Needs gl_surface and flags
friend bool qt_createEGLSurfaceForPixmap(QPixmapData*, bool); // Needs gl_surface
void release();
diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h
index ec62b0b..f69eb3d 100644
--- a/src/gui/image/qpixmapdata_p.h
+++ b/src/gui/image/qpixmapdata_p.h
@@ -75,7 +75,8 @@ public:
};
#endif
enum ClassId { RasterClass, X11Class, MacClass, DirectFBClass,
- OpenGLClass, OpenVGClass, RuntimeClass, CustomClass = 1024 };
+ OpenGLClass, OpenVGClass, RuntimeClass, BlitterClass,
+ CustomClass = 1024 };
QPixmapData(PixelType pixelType, int classId);
virtual ~QPixmapData();
diff --git a/src/gui/image/qpixmapdatafactory.cpp b/src/gui/image/qpixmapdatafactory.cpp
index 7498a7c..50dad38 100644
--- a/src/gui/image/qpixmapdatafactory.cpp
+++ b/src/gui/image/qpixmapdatafactory.cpp
@@ -53,6 +53,9 @@
#ifdef Q_WS_MAC
# include <private/qpixmap_mac_p.h>
#endif
+#ifdef Q_WS_QPA
+# include <private/qpixmap_raster_p.h>
+#endif
#ifdef Q_OS_SYMBIAN
# include <private/qpixmap_s60_p.h>
#endif
@@ -82,8 +85,10 @@ QPixmapData* QSimplePixmapDataFactory::create(QPixmapData::PixelType type)
return new QRasterPixmapData(type);
#elif defined(Q_WS_MAC)
return new QMacPixmapData(type);
+#elif defined(Q_WS_QPA)
+ return new QRasterPixmapData(type);
#elif defined(Q_OS_SYMBIAN)
- return new QS60PixmapData(type);
+ return new QS60PixmapData(type);
#else
#error QSimplePixmapDataFactory::create() not implemented
#endif
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index 935aba0..ea62cf8 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -331,6 +331,7 @@ public:
float gamma;
int quality;
QString description;
+ QStringList readTexts;
png_struct *png_ptr;
png_info *info_ptr;
@@ -389,25 +390,20 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngHeader()
while (num_text--) {
QString key, value;
-#if defined(PNG_iTXt_SUPPORTED) && !defined(QT_NO_TEXTCODEC)
- if (text_ptr->lang) {
- QTextCodec *codec = QTextCodec::codecForName(text_ptr->lang);
- if (codec) {
- key = codec->toUnicode(text_ptr->lang_key);
- value = codec->toUnicode(QByteArray(text_ptr->text, text_ptr->itxt_length));
- } else {
- key = QString::fromLatin1(text_ptr->key);
- value = QString::fromLatin1(QByteArray(text_ptr->text, int(text_ptr->text_length)));
- }
+ key = QString::fromLatin1(text_ptr->key);
+#if defined(PNG_iTXt_SUPPORTED)
+ if (text_ptr->itxt_length) {
+ value = QString::fromUtf8(text_ptr->text, int(text_ptr->itxt_length));
} else
#endif
{
- key = QString::fromLatin1(text_ptr->key);
value = QString::fromLatin1(QByteArray(text_ptr->text, int(text_ptr->text_length)));
}
if (!description.isEmpty())
description += QLatin1String("\n\n");
description += key + QLatin1String(": ") + value.simplified();
+ readTexts.append(key);
+ readTexts.append(value);
text_ptr++;
}
#endif
@@ -485,25 +481,8 @@ bool Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngImage(QImage *outImage)
outImage->setDotsPerMeterX(png_get_x_pixels_per_meter(png_ptr,info_ptr));
outImage->setDotsPerMeterY(png_get_y_pixels_per_meter(png_ptr,info_ptr));
-#ifndef QT_NO_IMAGE_TEXT
- png_textp text_ptr;
- int num_text=0;
- png_get_text(png_ptr,info_ptr,&text_ptr,&num_text);
- while (num_text--) {
- outImage->setText(text_ptr->key,0,QString::fromAscii(text_ptr->text));
- text_ptr++;
- }
-
- foreach (const QString &pair, description.split(QLatin1String("\n\n"))) {
- int index = pair.indexOf(QLatin1Char(':'));
- if (index >= 0 && pair.indexOf(QLatin1Char(' ')) < index) {
- outImage->setText(QLatin1String("Description"), pair.simplified());
- } else {
- QString key = pair.left(index);
- outImage->setText(key, pair.mid(index + 2).simplified());
- }
- }
-#endif
+ for (int i = 0; i < readTexts.size()-1; i+=2)
+ outImage->setText(readTexts.at(i), readTexts.at(i+1));
png_read_end(png_ptr, end_info);
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
@@ -634,29 +613,40 @@ static void set_text(const QImage &image, png_structp png_ptr, png_infop info_pt
return;
png_textp text_ptr = new png_text[text.size()];
+ qMemSet(text_ptr, 0, text.size() * sizeof(png_text));
QMap<QString, QString>::ConstIterator it = text.constBegin();
int i = 0;
while (it != text.constEnd()) {
- QString t = it.value();
- if (t.length() < 40)
- text_ptr[i].compression = PNG_TEXT_COMPRESSION_NONE;
- else
- text_ptr[i].compression = PNG_TEXT_COMPRESSION_zTXt;
text_ptr[i].key = qstrdup(it.key().left(79).toLatin1().constData());
+ bool noCompress = (it.value().length() < 40);
-#ifndef PNG_iTXt_SUPPORTED
- QByteArray value = it.value().toLatin1();
- text_ptr[i].text = qstrdup(value.constData());
- text_ptr[i].text_length = value.size();
-#else
- QByteArray value = it.value().toUtf8();
- text_ptr[i].text = qstrdup(value.constData());
- text_ptr[i].text_length = 0;
- text_ptr[i].itxt_length = value.size();
- text_ptr[i].lang = const_cast<char*>("UTF-8");
- text_ptr[i].lang_key = qstrdup(it.key().toUtf8().constData());
+#ifdef PNG_iTXt_SUPPORTED
+ bool needsItxt = false;
+ foreach(const QChar c, it.value()) {
+ uchar ch = c.cell();
+ if (c.row() || (ch < 0x20 && ch != '\n') || (ch > 0x7e && ch < 0xa0)) {
+ needsItxt = true;
+ break;
+ }
+ }
+
+ if (needsItxt) {
+ text_ptr[i].compression = noCompress ? PNG_ITXT_COMPRESSION_NONE : PNG_ITXT_COMPRESSION_zTXt;
+ QByteArray value = it.value().toUtf8();
+ text_ptr[i].text = qstrdup(value.constData());
+ text_ptr[i].itxt_length = value.size();
+ text_ptr[i].lang = const_cast<char*>("UTF-8");
+ text_ptr[i].lang_key = qstrdup(it.key().toUtf8().constData());
+ }
+ else
#endif
+ {
+ text_ptr[i].compression = noCompress ? PNG_TEXT_COMPRESSION_NONE : PNG_TEXT_COMPRESSION_zTXt;
+ QByteArray value = it.value().toLatin1();
+ text_ptr[i].text = qstrdup(value.constData());
+ text_ptr[i].text_length = value.size();
+ }
++i;
++it;
}
diff --git a/src/gui/image/qtiffhandler.cpp b/src/gui/image/qtiffhandler.cpp
index 2e8b998..dd2bd10 100644
--- a/src/gui/image/qtiffhandler.cpp
+++ b/src/gui/image/qtiffhandler.cpp
@@ -611,6 +611,7 @@ QVariant QTiffHandler::option(ImageOption option) const
TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width);
TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height);
imageSize = QSize(width, height);
+ TIFFClose(tiff);
}
device()->seek(pos);
if (imageSize.isValid())
diff --git a/src/gui/image/qxbmhandler.cpp b/src/gui/image/qxbmhandler.cpp
index 0dd4e99..f9c2e0c 100644
--- a/src/gui/image/qxbmhandler.cpp
+++ b/src/gui/image/qxbmhandler.cpp
@@ -66,27 +66,36 @@ static inline int hex2byte(register char *p)
static bool read_xbm_header(QIODevice *device, int& w, int& h)
{
const int buflen = 300;
+ const int maxlen = 4096;
char buf[buflen + 1];
QRegExp r1(QLatin1String("^#define[ \t]+[a-zA-Z0-9._]+[ \t]+"));
QRegExp r2(QLatin1String("[0-9]+"));
qint64 readBytes = 0;
+ qint64 totalReadBytes = 0;
- // "#define .._width <num>"
- readBytes = device->readLine(buf, buflen);
- if (readBytes <= 0)
- return false;
- buf[readBytes - 1] = '\0';
+ buf[0] = '\0';
// skip initial comment, if any
- while (buf[0] != '#' && (readBytes = device->readLine( buf, buflen )) > 0) {}
+ while (buf[0] != '#') {
+ readBytes = device->readLine(buf, buflen);
+
+ // if readBytes >= buflen, it's very probably not a C file
+ if (readBytes <= 0 || readBytes >= buflen -1)
+ return false;
+
+ // limit xbm headers to the first 4k in the file to prevent
+ // excessive reads on non-xbm files
+ totalReadBytes += readBytes;
+ if (totalReadBytes >= maxlen)
+ return false;
+ }
- if (readBytes <= 0)
- return false;
buf[readBytes - 1] = '\0';
QString sbuf;
sbuf = QString::fromLatin1(buf);
+ // "#define .._width <num>"
if (r1.indexIn(sbuf) == 0 &&
r2.indexIn(sbuf, r1.matchedLength()) == r1.matchedLength())
w = QByteArray(&buf[r1.matchedLength()]).trimmed().toInt();
diff --git a/src/gui/image/qxpmhandler.cpp b/src/gui/image/qxpmhandler.cpp
index b97afd3..453100c 100644
--- a/src/gui/image/qxpmhandler.cpp
+++ b/src/gui/image/qxpmhandler.cpp
@@ -766,7 +766,7 @@ static bool qt_get_named_xpm_rgb(const char *name_no_space, QRgb *rgb)
{
XPMRGBData x;
x.name = name_no_space;
- // Funtion bsearch() is supposed to be
+ // Function bsearch() is supposed to be
// void *bsearch(const void *key, const void *base, ...
// So why (char*)? Are there broken bsearch() declarations out there?
XPMRGBData *r = (XPMRGBData *)bsearch((char *)&x, (char *)xpmRgbTbl, xpmRgbTblSize,
diff --git a/src/gui/inputmethod/inputmethod.pri b/src/gui/inputmethod/inputmethod.pri
index 02e3e57..d439438 100644
--- a/src/gui/inputmethod/inputmethod.pri
+++ b/src/gui/inputmethod/inputmethod.pri
@@ -19,7 +19,7 @@ embedded {
HEADERS += inputmethod/qwsinputcontext_p.h
SOURCES += inputmethod/qwsinputcontext_qws.cpp
}
-mac:!embedded {
+mac:!embedded:!qpa {
HEADERS += inputmethod/qmacinputcontext_p.h
SOURCES += inputmethod/qmacinputcontext_mac.cpp
}
diff --git a/src/gui/inputmethod/qinputcontextfactory.cpp b/src/gui/inputmethod/qinputcontextfactory.cpp
index 865c1b2..afe5095 100644
--- a/src/gui/inputmethod/qinputcontextfactory.cpp
+++ b/src/gui/inputmethod/qinputcontextfactory.cpp
@@ -205,7 +205,7 @@ QStringList QInputContextFactory::keys()
This function contains pure Symbian exception handling code for
getting S60 language list.
- Returned object ownership is transfered to caller.
+ Returned object ownership is transferred to caller.
*/
static CAknInputLanguageList* s60LangListL()
{
@@ -224,7 +224,7 @@ static CAknInputLanguageList* s60LangListL()
\internal
This function utility function return S60 language list.
- Returned object ownership is transfered to caller.
+ Returned object ownership is transferred to caller.
*/
static CAknInputLanguageList* s60LangList()
{
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index 0842ee8..8af6013 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -1169,7 +1169,7 @@ QAbstractItemView::EditTriggers QAbstractItemView::editTriggers() const
\property QAbstractItemView::verticalScrollMode
\brief how the view scrolls its contents in the vertical direction
- This property controlls how the view scroll its contents vertically.
+ This property controls how the view scroll its contents vertically.
Scrolling can be done either per pixel or per item.
*/
@@ -1195,7 +1195,7 @@ QAbstractItemView::ScrollMode QAbstractItemView::verticalScrollMode() const
\property QAbstractItemView::horizontalScrollMode
\brief how the view scrolls its contents in the horizontal direction
- This property controlls how the view scroll its contents horizontally.
+ This property controls how the view scroll its contents horizontally.
Scrolling can be done either per pixel or per item.
*/
@@ -1278,7 +1278,7 @@ bool QAbstractItemView::hasAutoScroll() const
\property QAbstractItemView::autoScrollMargin
\brief the size of the area when auto scrolling is triggered
- This property controlls the size of the area at the edge of the viewport that
+ This property controls the size of the area at the edge of the viewport that
triggers autoscrolling. The default value is 16 pixels.
*/
void QAbstractItemView::setAutoScrollMargin(int margin)
@@ -1366,7 +1366,7 @@ bool QAbstractItemView::dragEnabled() const
Note that the model used needs to provide support for drag and drop operations.
- \sa setDragDropMode() {Using drag & drop with item views}
+ \sa setDragDropMode() {Using drag and drop with item views}
*/
/*!
@@ -4101,13 +4101,13 @@ bool QAbstractItemViewPrivate::openEditor(const QModelIndex &index, QEvent *even
if (!w)
return false;
- if (event)
- QApplication::sendEvent(w->focusProxy() ? w->focusProxy() : w, event);
-
q->setState(QAbstractItemView::EditingState);
w->show();
w->setFocus();
+ if (event)
+ QApplication::sendEvent(w->focusProxy() ? w->focusProxy() : w, event);
+
return true;
}
diff --git a/src/gui/itemviews/qabstractproxymodel.cpp b/src/gui/itemviews/qabstractproxymodel.cpp
index 51dfa7a..b9574f1 100644
--- a/src/gui/itemviews/qabstractproxymodel.cpp
+++ b/src/gui/itemviews/qabstractproxymodel.cpp
@@ -121,12 +121,15 @@ QAbstractProxyModel::~QAbstractProxyModel()
void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
Q_D(QAbstractProxyModel);
- if (d->model)
+ if (d->model) {
disconnect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
+ disconnect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
+ }
if (sourceModel) {
d->model = sourceModel;
connect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
+ connect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
} else {
d->model = QAbstractItemModelPrivate::staticEmptyModel();
}
@@ -359,7 +362,7 @@ QMimeData* QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const
QModelIndexList list;
foreach(const QModelIndex &index, indexes)
list << mapToSource(index);
- return d->model->mimeData(indexes);
+ return d->model->mimeData(list);
}
/*!
@@ -380,6 +383,25 @@ Qt::DropActions QAbstractProxyModel::supportedDropActions() const
return d->model->supportedDropActions();
}
+/*
+ \since 4.8
+
+ This slot is called just after the internal data of a model is cleared
+ while it is being reset.
+
+ This slot is provided the convenience of subclasses of concrete proxy
+ models, such as subclasses of QSortFilterProxyModel which maintain extra
+ data.
+
+ \snippet doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp 10
+
+ \sa modelAboutToBeReset(), modelReset()
+*/
+void QAbstractProxyModel::resetInternalData()
+{
+
+}
+
QT_END_NAMESPACE
#include "moc_qabstractproxymodel.cpp"
diff --git a/src/gui/itemviews/qabstractproxymodel.h b/src/gui/itemviews/qabstractproxymodel.h
index a5a1168..0daa7f8 100644
--- a/src/gui/itemviews/qabstractproxymodel.h
+++ b/src/gui/itemviews/qabstractproxymodel.h
@@ -95,6 +95,9 @@ public:
QStringList mimeTypes() const;
Qt::DropActions supportedDropActions() const;
+protected Q_SLOTS:
+ void resetInternalData();
+
protected:
QAbstractProxyModel(QAbstractProxyModelPrivate &, QObject *parent);
diff --git a/src/gui/itemviews/qdirmodel.cpp b/src/gui/itemviews/qdirmodel.cpp
index 48599bc..cb6f81e 100644
--- a/src/gui/itemviews/qdirmodel.cpp
+++ b/src/gui/itemviews/qdirmodel.cpp
@@ -201,25 +201,6 @@ void QDirModelPrivate::invalidate()
QDirModel keeps a cache with file information. The cache needs to be
updated with refresh().
- A directory model that displays the contents of a default directory
- is usually constructed with a parent object:
-
- \snippet doc/src/snippets/shareddirmodel/main.cpp 2
-
- A tree view can be used to display the contents of the model
-
- \snippet doc/src/snippets/shareddirmodel/main.cpp 4
-
- and the contents of a particular directory can be displayed by
- setting the tree view's root index:
-
- \snippet doc/src/snippets/shareddirmodel/main.cpp 7
-
- The view's root index can be used to control how much of a
- hierarchical model is displayed. QDirModel provides a convenience
- function that returns a suitable model index for a path to a
- directory within the model.
-
QDirModel can be accessed using the standard interface provided by
QAbstractItemModel, but it also provides some convenience functions
that are specific to a directory model. The fileInfo() and isDir()
diff --git a/src/gui/itemviews/qitemselectionmodel.cpp b/src/gui/itemviews/qitemselectionmodel.cpp
index 7156b87..7b892c5 100644
--- a/src/gui/itemviews/qitemselectionmodel.cpp
+++ b/src/gui/itemviews/qitemselectionmodel.cpp
@@ -781,7 +781,7 @@ void QItemSelectionModelPrivate::_q_layoutAboutToBeChanged()
savedPersistentIndexes.clear();
savedPersistentCurrentIndexes.clear();
- // optimisation for when all indexes are selected
+ // optimization for when all indexes are selected
// (only if there is lots of items (1000) because this is not entirely correct)
if (ranges.isEmpty() && currentSelection.count() == 1) {
QItemSelectionRange range = currentSelection.first();
@@ -1068,6 +1068,19 @@ void QItemSelectionModel::select(const QItemSelection &selection, QItemSelection
// store old selection
QItemSelection sel = selection;
+ // If d->ranges is non-empty when the source model is reset the persistent indexes
+ // it contains will be invalid. We can't clear them in a modelReset slot because that might already
+ // be too late if another model observer is connected to the same modelReset slot and is invoked first
+ // it might call select() on this selection model before any such QItemSelectionModelPrivate::_q_modelReset() slot
+ // is invoked, so it would not be cleared yet. We clear it invalid ranges in it here.
+ QItemSelection::iterator it = d->ranges.begin();
+ while (it != d->ranges.end()) {
+ if (!it->isValid())
+ it = d->ranges.erase(it);
+ else
+ ++it;
+ }
+
QItemSelection old = d->ranges;
old.merge(d->currentSelection, d->currentCommand);
diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp
index ce1f0e5..d1ef354 100644
--- a/src/gui/itemviews/qlistview.cpp
+++ b/src/gui/itemviews/qlistview.cpp
@@ -1490,19 +1490,20 @@ void QListView::updateGeometries()
// if the scroll bars are turned off, we resize the contents to the viewport
if (d->movement == Static && !d->isWrapping()) {
- d->layoutChildren(); // we need the viewport size to be updated
+ const QSize maxSize = maximumViewportSize();
if (d->flow == TopToBottom) {
if (horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
- d->setContentsSize(viewport()->width(), contentsSize().height());
+ d->setContentsSize(maxSize.width(), contentsSize().height());
horizontalScrollBar()->setRange(0, 0); // we see all the contents anyway
}
} else { // LeftToRight
if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOff) {
- d->setContentsSize(contentsSize().width(), viewport()->height());
+ d->setContentsSize(contentsSize().width(), maxSize.height());
verticalScrollBar()->setRange(0, 0); // we see all the contents anyway
}
}
}
+
}
/*!
diff --git a/src/gui/itemviews/qstringlistmodel.cpp b/src/gui/itemviews/qstringlistmodel.cpp
index 8d69ee4..60ff952 100644
--- a/src/gui/itemviews/qstringlistmodel.cpp
+++ b/src/gui/itemviews/qstringlistmodel.cpp
@@ -290,8 +290,9 @@ QStringList QStringListModel::stringList() const
*/
void QStringListModel::setStringList(const QStringList &strings)
{
+ emit beginResetModel();
lst = strings;
- reset();
+ emit endResetModel();
}
/*!
diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp
index d8fef55..d1022f1 100644
--- a/src/gui/itemviews/qtableview.cpp
+++ b/src/gui/itemviews/qtableview.cpp
@@ -114,7 +114,7 @@ void QSpanCollection::updateSpan(QSpanCollection::Span *span, int old_height)
}
} else if (old_height > span->height()) {
//remove the span from all the subspans lists that intersect the columns not covered anymore
- Index::iterator it_y = index.lowerBound(-qMax(span->bottom(), span->top())); //qMax usefull if height is 0
+ Index::iterator it_y = index.lowerBound(-qMax(span->bottom(), span->top())); //qMax useful if height is 0
Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list
while (-it_y.key() <= span->top() + old_height -1) {
if (-it_y.key() > span->bottom()) {
@@ -1404,7 +1404,7 @@ void QTableView::paintEvent(QPaintEvent *event)
}
if (showGrid) {
- // Find the bottom right (the last rows/coloumns might be hidden)
+ // Find the bottom right (the last rows/columns might be hidden)
while (verticalHeader->isSectionHidden(verticalHeader->logicalIndex(bottom))) --bottom;
QPen old = painter.pen();
painter.setPen(gridPen);
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index 2629d7f..4261e93 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -32,8 +32,6 @@ HEADERS += \
kernel/qshortcutmap_p.h \
kernel/qsizepolicy.h \
kernel/qpalette.h \
- kernel/qsound.h \
- kernel/qsound_p.h \
kernel/qstackedlayout.h \
kernel/qtooltip.h \
kernel/qwhatsthis.h \
@@ -50,7 +48,7 @@ HEADERS += \
kernel/qgesturemanager_p.h \
kernel/qsoftkeymanager_p.h \
kernel/qsoftkeymanager_common_p.h \
- kernel/qguiplatformplugin_p.h
+ kernel/qguiplatformplugin_p.h \
SOURCES += \
kernel/qaction.cpp \
@@ -72,7 +70,6 @@ SOURCES += \
kernel/qpalette.cpp \
kernel/qshortcut.cpp \
kernel/qshortcutmap.cpp \
- kernel/qsound.cpp \
kernel/qstackedlayout.cpp \
kernel/qtooltip.cpp \
kernel/qguivariant.cpp \
@@ -200,7 +197,66 @@ embedded {
}
}
-!embedded:!x11:mac {
+!qpa {
+ HEADERS += \
+ kernel/qsound.h \
+ kernel/qsound_p.h
+
+ SOURCES += \
+ kernel/qsound.cpp
+}
+
+qpa {
+ HEADERS += \
+ kernel/qgenericpluginfactory_qpa.h \
+ kernel/qgenericplugin_qpa.h \
+ kernel/qeventdispatcher_qpa_p.h \
+ kernel/qwindowsysteminterface_qpa.h \
+ kernel/qwindowsysteminterface_qpa_p.h \
+ kernel/qplatformintegration_qpa.h \
+ kernel/qplatformscreen_qpa.h \
+ kernel/qplatformintegrationfactory_qpa_p.h \
+ kernel/qplatformintegrationplugin_qpa.h \
+ kernel/qplatformwindow_qpa.h \
+ kernel/qplatformwindowformat_qpa.h \
+ kernel/qplatformglcontext_qpa.h \
+ kernel/qdesktopwidget_qpa_p.h \
+ kernel/qplatformeventloopintegration_qpa.h \
+ kernel/qplatformcursor_qpa.h
+
+ SOURCES += \
+ kernel/qapplication_qpa.cpp \
+ kernel/qclipboard_qpa.cpp \
+ kernel/qcursor_qpa.cpp \
+ kernel/qdnd_qws.cpp \
+ kernel/qdesktopwidget_qpa.cpp \
+ kernel/qgenericpluginfactory_qpa.cpp \
+ kernel/qgenericplugin_qpa.cpp \
+ kernel/qkeymapper_qws.cpp \
+ kernel/qwidget_qpa.cpp \
+ kernel/qeventdispatcher_qpa.cpp \
+ kernel/qwindowsysteminterface_qpa.cpp \
+ kernel/qplatformintegration_qpa.cpp \
+ kernel/qplatformscreen_qpa.cpp \
+ kernel/qplatformintegrationfactory_qpa.cpp \
+ kernel/qplatformintegrationplugin_qpa.cpp \
+ kernel/qplatformwindow_qpa.cpp \
+ kernel/qplatformwindowformat_qpa.cpp \
+ kernel/qplatformeventloopintegration_qpa.cpp \
+ kernel/qplatformglcontext_qpa.cpp \
+ kernel/qplatformcursor_qpa.cpp
+
+ contains(QT_CONFIG, glib) {
+ SOURCES += \
+ kernel/qeventdispatcher_glib_qpa.cpp
+ HEADERS += \
+ kernel/qeventdispatcher_glib_qpa_p.h
+ QMAKE_CXXFLAGS += $$QT_CFLAGS_GLIB
+ LIBS_PRIVATE +=$$QT_LIBS_GLIB
+ }
+}
+
+!embedded:!qpa:!x11:mac {
SOURCES += \
kernel/qclipboard_mac.cpp \
kernel/qmime_mac.cpp \
diff --git a/src/gui/kernel/mac.pri b/src/gui/kernel/mac.pri
index 1538510..21acd06 100644
--- a/src/gui/kernel/mac.pri
+++ b/src/gui/kernel/mac.pri
@@ -1,4 +1,4 @@
-!x11:!embedded:mac {
+!x11:!embedded:!qpa:mac {
LIBS_PRIVATE += -framework Carbon -lz
*-mwerks:INCLUDEPATH += compat
}
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 1284947..833e803 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -450,6 +450,9 @@ QPalette *QApplicationPrivate::sys_pal = 0; // default system palette
QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer
QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics system
+#if defined(Q_WS_QPA)
+QPlatformIntegration *QApplicationPrivate::platform_integration = 0;
+#endif
QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization
bool QApplicationPrivate::runtime_graphics_system = false;
@@ -495,7 +498,7 @@ bool QApplicationPrivate::fade_tooltip = false;
bool QApplicationPrivate::animate_toolbox = false;
bool QApplicationPrivate::widgetCount = false;
bool QApplicationPrivate::load_testability = false;
-QString QApplicationPrivate::qmljsDebugArguments;
+QString QApplicationPrivate::qmljs_debug_arguments;
#ifdef QT_KEYPAD_NAVIGATION
# ifdef Q_OS_SYMBIAN
Qt::NavigationMode QApplicationPrivate::navigationMode = Qt::NavigationModeKeypadDirectional;
@@ -512,7 +515,7 @@ inline bool QApplicationPrivate::isAlien(QWidget *widget)
{
if (!widget)
return false;
-#if defined(Q_WS_QWS)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
return !widget->isWindow()
# ifdef Q_BACKINGSTORE_SUBSURFACES
&& !(widget->d_func()->maybeTopData() && widget->d_func()->maybeTopData()->windowSurface)
@@ -568,7 +571,7 @@ void QApplicationPrivate::process_cmdline()
if (arg == "-qdevel" || arg == "-qdebug") {
// obsolete argument
} else if (arg.indexOf("-qmljsdebugger=", 0) != -1) {
- qmljsDebugArguments = QString::fromLocal8Bit(arg.right(arg.length() - 15));
+ qmljs_debug_arguments = QString::fromLocal8Bit(arg.right(arg.length() - 15));
} else if (arg.indexOf("-style=", 0) != -1) {
s = QString::fromLocal8Bit(arg.right(arg.length() - 7).toLower());
} else if (arg == "-style" && i < argc-1) {
@@ -804,6 +807,7 @@ void QApplicationPrivate::construct(
)
{
initResources();
+ graphics_system_name = QLatin1String(qgetenv("QT_DEFAULT_GRAPHICS_SYSTEM"));
qt_is_gui_used = (qt_appType != QApplication::Tty);
process_cmdline();
@@ -964,10 +968,11 @@ void QApplicationPrivate::initialize()
QWidgetPrivate::mapper = new QWidgetMapper;
QWidgetPrivate::allWidgets = new QWidgetSet;
-#if !defined(Q_WS_X11) && !defined(Q_WS_QWS)
+#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
// initialize the graphics system - on X11 this is initialized inside
// qt_init() in qapplication_x11.cpp because of several reasons.
// On QWS, the graphics system is set by the QScreen plugin.
+ // We don't use graphics systems in Qt QPA
graphics_system = QGraphicsSystemFactory::create(graphics_system_name);
#endif
@@ -1428,10 +1433,18 @@ QStyle *QApplication::style()
// Compile-time search for default style
//
QString style;
- if (!QApplicationPrivate::styleOverride.isEmpty())
+#ifdef QT_BUILD_INTERNAL
+ QString envStyle = QString::fromLocal8Bit(qgetenv("QT_STYLE_OVERRIDE"));
+#else
+ QString envStyle;
+#endif
+ if (!QApplicationPrivate::styleOverride.isEmpty()) {
style = QApplicationPrivate::styleOverride;
- else
+ } else if (!envStyle.isEmpty()) {
+ style = envStyle;
+ } else {
style = QApplicationPrivate::desktopStyleKey();
+ }
QStyle *&app_style = QApplicationPrivate::app_style;
app_style = QStyleFactory::create(style);
@@ -1633,14 +1646,18 @@ QStyle* QApplication::setStyle(const QString& style)
void QApplication::setGraphicsSystem(const QString &system)
{
-#ifdef QT_GRAPHICSSYSTEM_RUNTIME
+#ifdef Q_WS_QPA
+ Q_UNUSED(system);
+#else
+# ifdef QT_GRAPHICSSYSTEM_RUNTIME
if (QApplicationPrivate::graphics_system_name == QLatin1String("runtime")) {
QRuntimeGraphicsSystem *r =
static_cast<QRuntimeGraphicsSystem *>(QApplicationPrivate::graphics_system);
r->setGraphicsSystem(system);
} else
-#endif
+# endif
QApplicationPrivate::graphics_system_name = system;
+#endif
}
/*!
@@ -2786,7 +2803,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) {
// Update cursor for alien/graphics widgets.
const bool enterOnAlien = (enter && (isAlien(enter) || enter->testAttribute(Qt::WA_DontShowOnScreen)));
-#if defined(Q_WS_X11)
+#if defined(Q_WS_X11) || defined(Q_WS_QPA)
//Whenever we leave an alien widget on X11, we need to reset its nativeParentWidget()'s cursor.
// This is not required on Windows as the cursor is reset on every single mouse move.
QWidget *parentOfLeavingCursor = 0;
@@ -2810,7 +2827,15 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) {
if (!parentOfLeavingCursor->window()->graphicsProxyWidget())
#endif
{
+#if defined(Q_WS_X11)
qt_x11_enforce_cursor(parentOfLeavingCursor,true);
+#elif defined(Q_WS_QPA)
+ if (enter == QApplication::desktop()) {
+ qt_qpa_set_cursor(enter, true);
+ } else {
+ qt_qpa_set_cursor(parentOfLeavingCursor, true);
+ }
+#endif
}
}
#endif
@@ -2834,6 +2859,8 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) {
qt_x11_enforce_cursor(cursorWidget, true);
#elif defined(Q_OS_SYMBIAN)
qt_symbian_set_cursor(cursorWidget, true);
+#elif defined(Q_WS_QPA)
+ qt_qpa_set_cursor(cursorWidget, true);
#endif
}
}
@@ -3138,7 +3165,7 @@ bool QApplicationPrivate::sendMouseEvent(QWidget *receiver, QMouseEvent *event,
return result;
}
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
/*
This function should only be called when the widget changes visibility, i.e.
when the \a widget is shown, hidden or deleted. This function does nothing
@@ -3150,7 +3177,7 @@ extern QWidget *qt_button_down;
void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget)
{
#ifndef QT_NO_CURSOR
-#ifdef Q_WS_QWS
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
if (!widget || widget->isWindow())
return;
#else
@@ -6075,10 +6102,17 @@ QPixmap QApplicationPrivate::getPixmapCursor(Qt::CursorShape cshape)
default:
break;
}
+#else
+ Q_UNUSED(cshape);
#endif
return QPixmap();
}
+QString QApplicationPrivate::qmljsDebugArgumentsString()
+{
+ return qmljs_debug_arguments;
+}
+
QT_END_NAMESPACE
#include "moc_qapplication.cpp"
diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm
index c3f3e74..3aafeb4 100644
--- a/src/gui/kernel/qapplication_mac.mm
+++ b/src/gui/kernel/qapplication_mac.mm
@@ -549,7 +549,7 @@ void qt_mac_update_os_settings()
FontMap("QTipLabel", kThemeSmallSystemFont),
FontMap("QLabel", kThemeSystemFont),
FontMap("QToolButton", kThemeSmallSystemFont),
- FontMap("QMenuItem", kThemeMenuItemCmdKeyFont), // It doesn't exist, but its unique.
+ FontMap("QMenuItem", kThemeMenuItemFont), // It doesn't exist, but its unique.
FontMap("QComboLineEdit", kThemeViewsFont), // It doesn't exist, but its unique.
FontMap("QSmallFont", kThemeSmallSystemFont), // It doesn't exist, but its unique.
FontMap("QMiniFont", kThemeMiniSystemFont), // It doesn't exist, but its unique.
@@ -1246,7 +1246,7 @@ void qt_init(QApplicationPrivate *priv, int)
qt_redirectNSApplicationSendEvent();
QMacCocoaAutoReleasePool pool;
- NSObject *oldDelegate = [cocoaApp delegate];
+ id oldDelegate = [cocoaApp delegate];
QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate) *newDelegate = [QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate) sharedDelegate];
Q_ASSERT(newDelegate);
[newDelegate setQtPrivate:priv];
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 636829e..7b49999 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -65,8 +65,10 @@
#include "QtCore/qhash.h"
#include "QtCore/qpointer.h"
#include "private/qcoreapplication_p.h"
-#include "private/qshortcutmap_p.h"
+#include "QtGui/private/qshortcutmap_p.h"
#include <private/qthread_p.h>
+#include "QtCore/qpoint.h"
+#include <QTime>
#ifdef Q_WS_QWS
#include "QtGui/qscreen_qws.h"
#include <private/qgraphicssystem_qws_p.h>
@@ -74,6 +76,11 @@
#ifdef Q_OS_SYMBIAN
#include <w32std.h>
#endif
+#ifdef Q_WS_QPA
+#include <QWindowSystemInterface>
+#include "qwindowsysteminterface_qpa_p.h"
+#include "QtGui/qplatformintegration_qpa.h"
+#endif
QT_BEGIN_NAMESPACE
@@ -312,10 +319,18 @@ public:
static QString desktopStyleKey();
static QGraphicsSystem *graphicsSystem()
-#if !defined(Q_WS_QWS)
- { return graphics_system; }
-#else
+#if defined(Q_WS_QWS)
{ return QScreen::instance()->graphicsSystem(); }
+#else
+ { return graphics_system; }
+#endif
+
+#if defined(Q_WS_QPA)
+ static QPlatformIntegration *platformIntegration()
+ { return platform_integration; }
+
+ static QAbstractEventDispatcher *qt_qpa_core_dispatcher()
+ { return QCoreApplication::instance()->d_func()->threadData->eventDispatcher; }
#endif
void createEventDispatcher();
@@ -418,6 +433,9 @@ public:
static QGraphicsSystem *graphics_system;
static QString graphics_system_name;
static bool runtime_graphics_system;
+#ifdef Q_WS_QPA
+ static QPlatformIntegration *platform_integration;
+#endif
private:
static QFont *app_font; // private for a reason! Always use QApplication::font() instead!
@@ -446,7 +464,8 @@ public:
static bool animate_toolbox;
static bool widgetCount; // Coupled with -widgetcount switch
static bool load_testability; // Coupled with -testability switch
- static QString qmljsDebugArguments; // a string containing arguments for js/qml debugging.
+ static QString qmljs_debug_arguments; // a string containing arguments for js/qml debugging.
+ static QString qmljsDebugArgumentsString(); // access string from other libraries
#ifdef Q_WS_MAC
static bool native_modal_dialog_active;
@@ -476,6 +495,30 @@ public:
static bool qt_mac_apply_settings();
#endif
+#ifdef Q_WS_QPA
+ static void processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e);
+ static void processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e);
+ static void processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e);
+ static void processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e);
+
+ static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e);
+
+ static void processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e);
+
+ static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e);
+ static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e);
+
+ static void processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e);
+
+// static void reportScreenCount(int count);
+ static void reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e);
+// static void reportGeometryChange(int screenIndex);
+ static void reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e);
+// static void reportAvailableGeometryChange(int screenIndex);
+ static void reportAvailableGeometryChange(QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e);
+
+#endif
+
#ifdef Q_WS_QWS
QPointer<QWSManager> last_manager;
QWSServerCleaner qwsServerCleaner;
@@ -521,7 +564,7 @@ public:
void _q_aboutToQuit();
#endif
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
void sendSyntheticEnterLeave(QWidget *widget);
#endif
@@ -629,6 +672,8 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window,
extern void qt_x11_enforce_cursor(QWidget *);
#elif defined(Q_OS_SYMBIAN)
extern void qt_symbian_set_cursor(QWidget *, bool);
+#elif defined (Q_WS_QPA)
+ extern void qt_qpa_set_cursor(QWidget *, bool);
#endif
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp
new file mode 100644
index 0000000..ece035c
--- /dev/null
+++ b/src/gui/kernel/qapplication_qpa.cpp
@@ -0,0 +1,928 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qapplication_p.h"
+#include "qcolormap.h"
+#include "qpixmapcache.h"
+#if !defined(QT_NO_GLIB)
+#include "qeventdispatcher_glib_qpa_p.h"
+#endif
+#include "qeventdispatcher_qpa_p.h"
+#ifndef QT_NO_CURSOR
+#include "private/qcursor_p.h"
+#endif
+
+#include "private/qwidget_p.h"
+
+#include "qgenericpluginfactory_qpa.h"
+#include "qplatformintegrationfactory_qpa_p.h"
+#include <qdesktopwidget.h>
+
+#include <qinputcontext.h>
+#include <QPlatformCursor>
+#include <qdebug.h>
+#include <QWindowSystemInterface>
+#include "qwindowsysteminterface_qpa_p.h"
+#include <QPlatformIntegration>
+
+#include "qdesktopwidget_qpa_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static QString appName;
+static QString appFont;
+
+QWidget *qt_button_down = 0; // widget got last button-down
+
+static bool app_do_modal = false;
+extern QWidgetList *qt_modal_stack; // stack of modal widgets
+
+int qt_last_x = 0;
+int qt_last_y = 0;
+QPointer<QWidget> qt_last_mouse_receiver = 0;
+
+static Qt::KeyboardModifiers modifiers = Qt::NoModifier;
+static Qt::MouseButtons buttons = Qt::NoButton;
+static ulong mousePressTime;
+static Qt::MouseButton mousePressButton = Qt::NoButton;
+static int mousePressX;
+static int mousePressY;
+static int mouse_double_click_distance = 5;
+
+void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e)
+{
+ switch(e->type) {
+ case QWindowSystemInterfacePrivate::Mouse:
+ QApplicationPrivate::processMouseEvent(static_cast<QWindowSystemInterfacePrivate::MouseEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Wheel:
+ QApplicationPrivate::processWheelEvent(static_cast<QWindowSystemInterfacePrivate::WheelEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Key:
+ QApplicationPrivate::processKeyEvent(static_cast<QWindowSystemInterfacePrivate::KeyEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Touch:
+ QApplicationPrivate::processTouchEvent(static_cast<QWindowSystemInterfacePrivate::TouchEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::GeometryChange:
+ QApplicationPrivate::processGeometryChangeEvent(static_cast<QWindowSystemInterfacePrivate::GeometryChangeEvent*>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Enter:
+ QApplicationPrivate::processEnterEvent(static_cast<QWindowSystemInterfacePrivate::EnterEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Leave:
+ QApplicationPrivate::processLeaveEvent(static_cast<QWindowSystemInterfacePrivate::LeaveEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::Close:
+ QApplicationPrivate::processCloseEvent(
+ static_cast<QWindowSystemInterfacePrivate::CloseEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::ScreenCountChange:
+ QApplicationPrivate::reportScreenCount(
+ static_cast<QWindowSystemInterfacePrivate::ScreenCountEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::ScreenGeometry:
+ QApplicationPrivate::reportGeometryChange(
+ static_cast<QWindowSystemInterfacePrivate::ScreenGeometryEvent *>(e));
+ break;
+ case QWindowSystemInterfacePrivate::ScreenAvailableGeometry:
+ QApplicationPrivate::reportAvailableGeometryChange(
+ static_cast<QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *>(e));
+ break;
+ default:
+ qWarning() << "Unknown user input event type:" << e->type;
+ break;
+ }
+}
+
+QString QApplicationPrivate::appName() const
+{
+ return QT_PREPEND_NAMESPACE(appName);
+}
+
+void QApplicationPrivate::createEventDispatcher()
+{
+ Q_Q(QApplication);
+#if !defined(QT_NO_GLIB)
+ if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported())
+ eventDispatcher = new QPAEventDispatcherGlib(q);
+ else
+#endif
+ eventDispatcher = new QEventDispatcherQPA(q);
+}
+
+static bool qt_try_modal(QWidget *widget, QEvent::Type type)
+{
+ QWidget * top = 0;
+
+ if (QApplicationPrivate::tryModalHelper(widget, &top))
+ return true;
+
+ bool block_event = false;
+ bool paint_event = false;
+
+ switch (type) {
+#if 0
+ case QEvent::Focus:
+ if (!static_cast<QWSFocusEvent*>(event)->simpleData.get_focus)
+ break;
+ // drop through
+#endif
+ case QEvent::MouseButtonPress: // disallow mouse/key events
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseMove:
+ case QEvent::KeyPress:
+ case QEvent::KeyRelease:
+ block_event = true;
+ break;
+ default:
+ break;
+ }
+
+ if ((block_event || paint_event) && top->parentWidget() == 0)
+ top->raise();
+
+ return !block_event;
+}
+
+
+
+void QApplicationPrivate::enterModal_sys(QWidget *widget)
+{
+ if (!qt_modal_stack)
+ qt_modal_stack = new QWidgetList;
+ qt_modal_stack->insert(0, widget);
+ app_do_modal = true;
+}
+
+void QApplicationPrivate::leaveModal_sys(QWidget *widget )
+{
+ if (qt_modal_stack && qt_modal_stack->removeAll(widget)) {
+ if (qt_modal_stack->isEmpty()) {
+ delete qt_modal_stack;
+ qt_modal_stack = 0;
+ }
+ }
+ app_do_modal = qt_modal_stack != 0;
+}
+
+bool QApplicationPrivate::modalState()
+{
+ return app_do_modal;
+}
+
+void QApplicationPrivate::closePopup(QWidget *popup)
+{
+ Q_Q(QApplication);
+ if (!popupWidgets)
+ return;
+ popupWidgets->removeAll(popup);
+
+//###
+// if (popup == qt_popup_down) {
+// qt_button_down = 0;
+// qt_popup_down = 0;
+// }
+
+ if (QApplicationPrivate::popupWidgets->count() == 0) { // this was the last popup
+ delete QApplicationPrivate::popupWidgets;
+ QApplicationPrivate::popupWidgets = 0;
+
+ //### replay mouse event?
+
+ //### transfer/release mouse grab
+
+ //### transfer/release keyboard grab
+
+ //give back focus
+
+ if (active_window) {
+ if (QWidget *fw = active_window->focusWidget()) {
+ if (fw != QApplication::focusWidget()) {
+ fw->setFocus(Qt::PopupFocusReason);
+ } else {
+ QFocusEvent e(QEvent::FocusIn, Qt::PopupFocusReason);
+ q->sendEvent(fw, &e);
+ }
+ }
+ }
+
+ } else {
+ // A popup was closed, so the previous popup gets the focus.
+
+ QWidget* aw = QApplicationPrivate::popupWidgets->last();
+ if (QWidget *fw = aw->focusWidget())
+ fw->setFocus(Qt::PopupFocusReason);
+
+ //### regrab the keyboard and mouse in case 'popup' lost the grab
+
+
+ }
+
+}
+
+static int openPopupCount = 0;
+void QApplicationPrivate::openPopup(QWidget *popup)
+{
+ openPopupCount++;
+ if (!popupWidgets) { // create list
+ popupWidgets = new QWidgetList;
+
+ /* only grab if you are the first/parent popup */
+ //#### ->grabMouse(popup,true);
+ //#### ->grabKeyboard(popup,true);
+ //### popupGrabOk = true;
+ }
+ popupWidgets->append(popup); // add to end of list
+
+ // popups are not focus-handled by the window system (the first
+ // popup grabbed the keyboard), so we have to do that manually: A
+ // new popup gets the focus
+ if (popup->focusWidget()) {
+ popup->focusWidget()->setFocus(Qt::PopupFocusReason);
+ } else if (popupWidgets->count() == 1) { // this was the first popup
+ if (QWidget *fw = QApplication::focusWidget()) {
+ QFocusEvent e(QEvent::FocusOut, Qt::PopupFocusReason);
+ QApplication::sendEvent(fw, &e);
+ }
+ }
+}
+
+void QApplicationPrivate::initializeMultitouch_sys()
+{
+}
+
+void QApplicationPrivate::cleanupMultitouch_sys()
+{
+}
+
+void QApplicationPrivate::initializeWidgetPaletteHash()
+{
+}
+
+void QApplication::setCursorFlashTime(int msecs)
+{
+ QApplicationPrivate::cursor_flash_time = msecs;
+}
+
+int QApplication::cursorFlashTime()
+{
+ return QApplicationPrivate::cursor_flash_time;
+}
+
+void QApplication::setDoubleClickInterval(int ms)
+{
+ QApplicationPrivate::mouse_double_click_time = ms;
+}
+
+int QApplication::doubleClickInterval()
+{
+ return QApplicationPrivate::mouse_double_click_time;
+}
+
+void QApplication::setKeyboardInputInterval(int ms)
+{
+ QApplicationPrivate::keyboard_input_time = ms;
+}
+
+int QApplication::keyboardInputInterval()
+{
+ return QApplicationPrivate::keyboard_input_time;
+}
+
+#ifndef QT_NO_WHEELEVENT
+void QApplication::setWheelScrollLines(int lines)
+{
+ QApplicationPrivate::wheel_scroll_lines = lines;
+}
+
+int QApplication::wheelScrollLines()
+{
+ return QApplicationPrivate::wheel_scroll_lines;
+}
+#endif
+
+void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable)
+{
+ switch (effect) {
+ case Qt::UI_AnimateMenu:
+ QApplicationPrivate::animate_menu = enable;
+ break;
+ case Qt::UI_FadeMenu:
+ if (enable)
+ QApplicationPrivate::animate_menu = true;
+ QApplicationPrivate::fade_menu = enable;
+ break;
+ case Qt::UI_AnimateCombo:
+ QApplicationPrivate::animate_combo = enable;
+ break;
+ case Qt::UI_AnimateTooltip:
+ QApplicationPrivate::animate_tooltip = enable;
+ break;
+ case Qt::UI_FadeTooltip:
+ if (enable)
+ QApplicationPrivate::animate_tooltip = true;
+ QApplicationPrivate::fade_tooltip = enable;
+ break;
+ case Qt::UI_AnimateToolBox:
+ QApplicationPrivate::animate_toolbox = enable;
+ break;
+ default:
+ QApplicationPrivate::animate_ui = enable;
+ break;
+ }
+}
+
+bool QApplication::isEffectEnabled(Qt::UIEffect effect)
+{
+ if (QColormap::instance().depth() < 16 || !QApplicationPrivate::animate_ui)
+ return false;
+
+ switch(effect) {
+ case Qt::UI_AnimateMenu:
+ return QApplicationPrivate::animate_menu;
+ case Qt::UI_FadeMenu:
+ return QApplicationPrivate::fade_menu;
+ case Qt::UI_AnimateCombo:
+ return QApplicationPrivate::animate_combo;
+ case Qt::UI_AnimateTooltip:
+ return QApplicationPrivate::animate_tooltip;
+ case Qt::UI_FadeTooltip:
+ return QApplicationPrivate::fade_tooltip;
+ case Qt::UI_AnimateToolBox:
+ return QApplicationPrivate::animate_toolbox;
+ default:
+ return QApplicationPrivate::animate_ui;
+ }
+}
+
+#ifndef QT_NO_CURSOR
+void QApplication::setOverrideCursor(const QCursor &cursor)
+{
+ qApp->d_func()->cursor_list.prepend(cursor);
+ qt_qpa_set_cursor(0, false);
+}
+
+void QApplication::restoreOverrideCursor()
+{
+ if (qApp->d_func()->cursor_list.isEmpty())
+ return;
+ qApp->d_func()->cursor_list.removeFirst();
+ qt_qpa_set_cursor(0, false);
+}
+
+#endif// QT_NO_CURSOR
+
+QWidget *QApplication::topLevelAt(const QPoint &pos)
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+
+ QList<QPlatformScreen *> screens = pi->screens();
+ QList<QPlatformScreen *>::const_iterator screen = screens.constBegin();
+ QList<QPlatformScreen *>::const_iterator end = screens.constEnd();
+
+ // The first screen in a virtual environment should know about all top levels
+ if (pi->isVirtualDesktop()) {
+ QWidget *w = (*screen)->topLevelAt(pos);
+ return w;
+ }
+
+ while (screen != end) {
+ if ((*screen)->geometry().contains(pos))
+ return (*screen)->topLevelAt(pos);
+ ++screen;
+ }
+ return 0;
+}
+
+void QApplication::beep()
+{
+}
+
+void QApplication::alert(QWidget *, int)
+{
+}
+
+static void init_platform(const QString &name)
+{
+ QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name);
+ if (!QApplicationPrivate::platform_integration) {
+ QStringList keys = QPlatformIntegrationFactory::keys();
+ QString fatalMessage =
+ QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name);
+ foreach(QString key, keys) {
+ fatalMessage.append(key + QString::fromLatin1("\n"));
+ }
+ qFatal("%s", fatalMessage.toLocal8Bit().constData());
+
+ }
+
+}
+
+
+static void cleanup_platform()
+{
+ delete QApplicationPrivate::platform_integration;
+ QApplicationPrivate::platform_integration = 0;
+}
+
+static void init_plugins(const QList<QByteArray> pluginList)
+{
+ for (int i = 0; i < pluginList.count(); ++i) {
+ QByteArray pluginSpec = pluginList.at(i);
+ qDebug() << "init_plugins" << i << pluginSpec;
+ int colonPos = pluginSpec.indexOf(':');
+ QObject *plugin;
+ if (colonPos < 0)
+ plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec), QString());
+ else
+ plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)),
+ QLatin1String(pluginSpec.mid(colonPos+1)));
+ qDebug() << " created" << plugin;
+ }
+}
+
+#ifndef QT_NO_QWS_INPUTMETHODS
+class QDummyInputContext : public QInputContext
+{
+public:
+ explicit QDummyInputContext(QObject* parent = 0) : QInputContext(parent) {}
+ ~QDummyInputContext() {}
+ QString identifierName() { return QString(); }
+ QString language() { return QString(); }
+
+ void reset() {}
+ bool isComposing() const { return false; }
+
+};
+#endif // QT_NO_QWS_INPUTMETHODS
+
+void qt_init(QApplicationPrivate *priv, int type)
+{
+ Q_UNUSED(type);
+
+ qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
+ char *p;
+ char **argv = priv->argv;
+ int argc = priv->argc;
+
+ if (argv && *argv) { //apparently, we allow people to pass 0 on the other platforms
+ p = strrchr(argv[0], '/');
+ appName = QString::fromLocal8Bit(p ? p + 1 : argv[0]);
+ }
+
+ QList<QByteArray> pluginList;
+ QString platformName = QLatin1String(qgetenv("QT_QPA_PLATFORM"));
+
+ // Get command line params
+
+ int j = argc ? 1 : 0;
+ for (int i=1; i<argc; i++) {
+ if (argv[i] && *argv[i] != '-') {
+ argv[j++] = argv[i];
+ continue;
+ }
+ QByteArray arg = argv[i];
+ if (arg == "-fn" || arg == "-font") {
+ if (++i < argc)
+ appFont = QString::fromLocal8Bit(argv[i]);
+ } else if (arg == "-platform") {
+ if (++i < argc)
+ platformName = QLatin1String(argv[i]);
+ } else if (arg == "-plugin") {
+ if (++i < argc)
+ pluginList << argv[i];
+ } else {
+ argv[j++] = argv[i];
+ }
+ }
+
+ if (j < priv->argc) {
+ priv->argv[j] = 0;
+ priv->argc = j;
+ }
+
+#if 0
+ QByteArray pluginEnv = qgetenv("QT_QPA_PLUGINS");
+ if (!pluginEnv.isEmpty()) {
+ pluginList.append(pluginEnv.split(';'));
+ }
+#endif
+
+ init_platform(platformName);
+ init_plugins(pluginList);
+
+ QColormap::initialize();
+ QFont::initialize();
+#ifndef QT_NO_CURSOR
+// QCursorData::initialize();
+#endif
+
+ qApp->setObjectName(appName);
+
+#ifndef QT_NO_QWS_INPUTMETHODS
+ qApp->setInputContext(new QDummyInputContext(qApp));
+#endif
+}
+
+void qt_cleanup()
+{
+ cleanup_platform();
+
+ QPixmapCache::clear();
+#ifndef QT_NO_CURSOR
+ QCursorData::cleanup();
+#endif
+ QFont::cleanup();
+ QColormap::cleanup();
+ delete QApplicationPrivate::inputContext;
+ QApplicationPrivate::inputContext = 0;
+
+ QApplicationPrivate::active_window = 0; //### this should not be necessary
+}
+
+
+#ifdef QT3_SUPPORT
+void QApplication::setMainWidget(QWidget *mainWidget)
+{
+ QApplicationPrivate::main_widget = mainWidget;
+ if (QApplicationPrivate::main_widget && windowIcon().isNull()
+ && QApplicationPrivate::main_widget->testAttribute(Qt::WA_SetWindowIcon))
+ setWindowIcon(QApplicationPrivate::main_widget->windowIcon());
+}
+#endif
+
+void QApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e)
+{
+ // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons();
+ static QWeakPointer<QWidget> implicit_mouse_grabber;
+
+ QEvent::Type type;
+ // move first
+ Qt::MouseButtons stateChange = e->buttons ^ buttons;
+ if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) {
+ QWindowSystemInterfacePrivate::MouseEvent * newMouseEvent =
+ new QWindowSystemInterfacePrivate::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons);
+ QWindowSystemInterfacePrivate::windowSystemEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop
+ stateChange = Qt::NoButton;
+ }
+
+ QWidget * tlw = e->widget.data();
+
+ QPoint localPoint = e->localPos;
+ QPoint globalPoint = e->globalPos;
+ QWidget *mouseWindow = tlw;
+
+ Qt::MouseButton button = Qt::NoButton;
+
+
+ if (qt_last_x != globalPoint.x() || qt_last_y != globalPoint.y()) {
+ type = QEvent::MouseMove;
+ qt_last_x = globalPoint.x();
+ qt_last_y = globalPoint.y();
+ if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance||
+ qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance)
+ mousePressButton = Qt::NoButton;
+ }
+ else { // check to see if a new button has been pressed/released
+ for (int check = Qt::LeftButton;
+ check <= Qt::XButton2;
+ check = check << 1) {
+ if (check & stateChange) {
+ button = Qt::MouseButton(check);
+ break;
+ }
+ }
+ if (button == Qt::NoButton) {
+ // Ignore mouse events that don't change the current state
+ return;
+ }
+ buttons = e->buttons;
+ if (button & e->buttons) {
+ if ((e->timestamp - mousePressTime) < static_cast<ulong>(QApplication::doubleClickInterval()) && button == mousePressButton) {
+ type = QEvent::MouseButtonDblClick;
+ mousePressButton = Qt::NoButton;
+ }
+ else {
+ type = QEvent::MouseButtonPress;
+ mousePressTime = e->timestamp;
+ mousePressButton = button;
+ mousePressX = qt_last_x;
+ mousePressY = qt_last_y;
+ }
+ }
+ else
+ type = QEvent::MouseButtonRelease;
+ }
+
+ if (self->inPopupMode()) {
+ //popup mouse handling is magical...
+ mouseWindow = qApp->activePopupWidget();
+
+ implicit_mouse_grabber.clear();
+ //### how should popup mode and implicit mouse grab interact?
+
+ } else if (tlw && app_do_modal && !qt_try_modal(tlw, QEvent::MouseButtonRelease) ) {
+ //even if we're blocked by modality, we should deliver the mouse release event..
+ //### this code is not completely correct: multiple buttons can be pressed simultaneously
+ if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) {
+ //qDebug() << "modal blocked mouse event to" << tlw;
+ return;
+ }
+ }
+
+ // find the tlw if we didn't get it from the plugin
+ if (!mouseWindow) {
+ mouseWindow = QApplication::topLevelAt(globalPoint);
+ }
+
+ if (!mouseWindow && !implicit_mouse_grabber)
+ mouseWindow = QApplication::desktop();
+
+ if (mouseWindow && mouseWindow != tlw) {
+ //we did not get a sensible localPoint from the window system, so let's calculate it
+ localPoint = mouseWindow->mapFromGlobal(globalPoint);
+ }
+
+ // which child should have it?
+ QWidget *mouseWidget = mouseWindow;
+ if (mouseWindow) {
+ QWidget *w = mouseWindow->childAt(localPoint);
+ if (w) {
+ mouseWidget = w;
+ }
+ }
+
+ //handle implicit mouse grab
+ if (type == QEvent::MouseButtonPress && !implicit_mouse_grabber) {
+ implicit_mouse_grabber = mouseWidget;
+
+ Q_ASSERT(mouseWindow);
+ mouseWindow->activateWindow(); //focus
+ } else if (implicit_mouse_grabber) {
+ mouseWidget = implicit_mouse_grabber.data();
+ mouseWindow = mouseWidget->window();
+ if (mouseWindow != tlw)
+ localPoint = mouseWindow->mapFromGlobal(globalPoint);
+ }
+
+ Q_ASSERT(mouseWidget);
+
+ //localPoint is local to mouseWindow, but it needs to be local to mouseWidget
+ localPoint = mouseWidget->mapFrom(mouseWindow, localPoint);
+
+ if (buttons == Qt::NoButton) {
+ //qDebug() << "resetting mouse grabber";
+ implicit_mouse_grabber.clear();
+ }
+
+ if (mouseWidget != qt_last_mouse_receiver) {
+ dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver);
+ qt_last_mouse_receiver = mouseWidget;
+ }
+
+ // Remember, we might enter a modal event loop when sending the event,
+ // so think carefully before adding code below this point.
+
+ // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber;
+
+ QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers);
+
+ QList<QWeakPointer<QPlatformCursor> > cursors = QPlatformCursorPrivate::getInstances();
+ foreach (QWeakPointer<QPlatformCursor> cursor, cursors) {
+ if (cursor)
+ cursor.data()->pointerEvent(ev);
+ }
+
+ QApplication::sendSpontaneousEvent(mouseWidget, &ev);
+}
+
+
+//### there's a lot of duplicated logic here -- refactoring required!
+
+void QApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e)
+{
+// QPoint localPoint = ev.pos();
+ QPoint globalPoint = e->globalPos;
+// bool trustLocalPoint = !!tlw; //is there something the local point can be local to?
+ QWidget *mouseWidget;
+
+ qt_last_x = globalPoint.x();
+ qt_last_y = globalPoint.y();
+
+ QWidget *mouseWindow = e->widget.data();
+
+ // find the tlw if we didn't get it from the plugin
+ if (!mouseWindow) {
+ mouseWindow = QApplication::topLevelAt(globalPoint);
+ }
+
+ if (!mouseWindow)
+ return;
+
+ mouseWidget = mouseWindow;
+
+ if (app_do_modal && !qt_try_modal(mouseWindow, QEvent::Wheel) ) {
+ qDebug() << "modal blocked wheel event" << mouseWindow;
+ return;
+ }
+ QPoint p = mouseWindow->mapFromGlobal(globalPoint);
+ QWidget *w = mouseWindow->childAt(p);
+ if (w) {
+ mouseWidget = w;
+ p = mouseWidget->mapFromGlobal(globalPoint);
+ }
+
+ QWheelEvent ev(p, globalPoint, e->delta, buttons, modifiers,
+ e->orient);
+ QApplication::sendSpontaneousEvent(mouseWidget, &ev);
+}
+
+
+
+// Remember, Qt convention is: keyboard state is state *before*
+
+void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e)
+{
+ QWidget *focusW = 0;
+ if (self->inPopupMode()) {
+ QWidget *popupW = qApp->activePopupWidget();
+ focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW;
+ }
+ if (!focusW)
+ focusW = QApplication::focusWidget();
+ if (!focusW) {
+ focusW = e->widget.data();
+ }
+ if (!focusW)
+ focusW = QApplication::activeWindow();
+
+ //qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW;
+
+ if (!focusW)
+ return;
+ if (app_do_modal && !qt_try_modal(focusW, e->keyType))
+ return;
+
+ modifiers = e->modifiers;
+ QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount);
+ QApplication::sendSpontaneousEvent(focusW, &ev);
+}
+
+void QApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e)
+{
+ QApplicationPrivate::dispatchEnterLeave(e->enter.data(),0);
+ qt_last_mouse_receiver = e->enter.data();
+}
+
+void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e)
+{
+ QApplicationPrivate::dispatchEnterLeave(0,qt_last_mouse_receiver);
+
+ if (e->leave.data() && !e->leave.data()->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen
+ QApplicationPrivate::dispatchEnterLeave(0, e->leave.data());
+ qt_last_mouse_receiver = 0;
+
+}
+
+
+void QApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e)
+{
+ if (e->tlw.isNull())
+ return;
+ QWidget *tlw = e->tlw.data();
+ if (!tlw->isWindow())
+ return; //geo of native child widgets is controlled by lighthouse
+ //so we already have sent the events; besides this new rect
+ //is not mapped to parent
+
+ QRect newRect = e->newGeometry;
+ QRect cr(tlw->geometry());
+ bool isResize = cr.size() != newRect.size();
+ bool isMove = cr.topLeft() != newRect.topLeft();
+ tlw->data->crect = newRect;
+ if (isResize) {
+ QResizeEvent e(tlw->data->crect.size(), cr.size());
+ QApplication::sendSpontaneousEvent(tlw, &e);
+ tlw->update();
+ }
+
+ if (isMove) {
+ //### frame geometry
+ QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft());
+ QApplication::sendSpontaneousEvent(tlw, &e);
+ }
+}
+
+void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e)
+{
+ if (e->topLevel.isNull()) {
+ //qDebug() << "QApplicationPrivate::processCloseEvent NULL";
+ return;
+ }
+ e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
+}
+
+void QApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e)
+{
+ translateRawTouchEvent(e->widget.data(), e->devType, e->points);
+}
+
+void QApplicationPrivate::reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e)
+{
+ // This operation only makes sense after the QApplication constructor runs
+ if (QCoreApplication::startingUp())
+ return;
+
+ QApplication::desktop()->d_func()->updateScreenList();
+ // signal anything listening for creation or deletion of screens
+ QDesktopWidget *desktop = QApplication::desktop();
+ emit desktop->screenCountChanged(e->count);
+}
+
+void QApplicationPrivate::reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e)
+{
+ // This operation only makes sense after the QApplication constructor runs
+ if (QCoreApplication::startingUp())
+ return;
+
+ QApplication::desktop()->d_func()->updateScreenList();
+
+ // signal anything listening for screen geometry changes
+ QDesktopWidget *desktop = QApplication::desktop();
+ emit desktop->resized(e->index);
+
+ // make sure maximized and fullscreen windows are updated
+ QWidgetList list = QApplication::topLevelWidgets();
+ for (int i = list.size() - 1; i >= 0; --i) {
+ QWidget *w = list.at(i);
+ if (w->isFullScreen())
+ w->d_func()->setFullScreenSize_helper();
+ else if (w->isMaximized())
+ w->d_func()->setMaxWindowState_helper();
+ }
+}
+
+void QApplicationPrivate::reportAvailableGeometryChange(
+ QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e)
+{
+ // This operation only makes sense after the QApplication constructor runs
+ if (QCoreApplication::startingUp())
+ return;
+
+ QApplication::desktop()->d_func()->updateScreenList();
+
+ // signal anything listening for screen geometry changes
+ QDesktopWidget *desktop = QApplication::desktop();
+ emit desktop->workAreaResized(e->index);
+
+ // make sure maximized and fullscreen windows are updated
+ QWidgetList list = QApplication::topLevelWidgets();
+ for (int i = list.size() - 1; i >= 0; --i) {
+ QWidget *w = list.at(i);
+ if (w->isFullScreen())
+ w->d_func()->setFullScreenSize_helper();
+ else if (w->isMaximized())
+ w->d_func()->setMaxWindowState_helper();
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 57702c6..5f01bcb 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1237,10 +1237,11 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
#ifdef Q_WS_S60
// If widget is fullscreen/minimized, hide status pane and button container otherwise show them.
- const bool visible = !(qwidget->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
+ QWidget *const window = qwidget->window();
+ const bool visible = !(window->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
const bool statusPaneVisibility = visible;
- const bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen;
- const bool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+ const bool isFullscreen = window->windowState() & Qt::WindowFullScreen;
+ const bool cbaVisibilityHint = window->windowFlags() & Qt::WindowSoftkeysVisibleHint;
const bool buttonGroupVisibility = (visible || (isFullscreen && cbaVisibilityHint));
S60->setStatusPaneAndButtonGroupVisibility(statusPaneVisibility, buttonGroupVisibility);
#endif
@@ -1424,7 +1425,7 @@ void qt_init(QApplicationPrivate * /* priv */, int)
TInt err = CApaCommandLine::GetCommandLineFromProcessEnvironment(commandLine);
// After this construction, CEikonEnv will be available from CEikonEnv::Static().
// (much like our qApp).
- CEikonEnv* coe = new CEikonEnv;
+ QtEikonEnv* coe = new QtEikonEnv;
//not using QT_TRAP_THROWING, because coe owns the cleanupstack so it can't be pushed there.
if(err == KErrNone)
TRAP(err, coe->ConstructAppFromCommandLineL(factory,*commandLine));
@@ -2057,6 +2058,17 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent
}
#endif
break;
+#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+ case EEventUser:
+ {
+ // GOOM is looking for candidates to kill so indicate that we are
+ // capable of cleaning up by handling this event
+ TInt32 *data = reinterpret_cast<TInt32 *>(event->EventData());
+ if (data[0] == EApaSystemEventShutdown && data[1] == KGoomMemoryLowEvent)
+ return 1;
+ }
+ break;
+#endif
default:
break;
}
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index a32a957..1dab738 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -115,12 +115,25 @@ extern void qt_wince_hide_taskbar(HWND hwnd); //defined in qguifunctions_wince.c
# if defined(Q_WS_WINCE)
# include <bldver.h>
# endif
-# include <winable.h>
+# if !defined(Q_WS_WINCE)
+# include <winable.h>
+# endif
+#endif
+
+#ifndef QT_NO_GESTURES
+# ifndef GID_ZOOM
+# define GID_ZOOM 3
+# define GID_TWOFINGERTAP 6
+# define GID_PRESSANDTAP 7
+# define GID_ROLLOVER GID_PRESSANDTAP
+# endif
#endif
#ifndef WM_TOUCH
# define WM_TOUCH 0x0240
+#endif
+#ifndef TOUCHEVENTF_MOVE
# define TOUCHEVENTF_MOVE 0x0001
# define TOUCHEVENTF_DOWN 0x0002
# define TOUCHEVENTF_UP 0x0004
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
index d905639..ff98229 100644
--- a/src/gui/kernel/qapplication_x11.cpp
+++ b/src/gui/kernel/qapplication_x11.cpp
@@ -2335,6 +2335,30 @@ void qt_init(QApplicationPrivate *priv, int,
X11->desktopEnvironment = DE_4DWM;
break;
}
+
+ if (XGetWindowProperty(X11->display, QX11Info::appRootWindow(),
+ ATOM(_NET_SUPPORTING_WM_CHECK),
+ 0, 1024, False, XA_WINDOW, &type,
+ &format, &length, &after, &data) == Success) {
+ if (type == XA_WINDOW && format == 32) {
+ Window windowManagerWindow = *((Window*) data);
+ XFree(data);
+ data = 0;
+
+ if (windowManagerWindow != XNone) {
+ Atom utf8atom = ATOM(UTF8_STRING);
+ if (XGetWindowProperty(QX11Info::display(), windowManagerWindow, ATOM(_NET_WM_NAME),
+ 0, 1024, False, utf8atom, &type,
+ &format, &length, &after, &data) == Success) {
+ if (type == utf8atom && format == 8) {
+ if (qstrcmp((const char *)data, "MCompositor") == 0)
+ X11->desktopEnvironment = DE_MEEGO_COMPOSITOR;
+ }
+ }
+ }
+ }
+ }
+
} while(0);
if (data)
@@ -3741,7 +3765,7 @@ int QApplication::x11ProcessEvent(XEvent* event)
// toplevel reparented...
QWidget *newparent = QWidget::find(event->xreparent.parent);
if (! newparent || (newparent->windowType() == Qt::Desktop)) {
- // we dont' know about the new parent (or we've been
+ // we don't know about the new parent (or we've been
// reparented to root), perhaps a window manager
// has been (re)started? reset the focus model to unknown
X11->focus_model = QX11Data::FM_Unknown;
diff --git a/src/gui/kernel/qclipboard_qpa.cpp b/src/gui/kernel/qclipboard_qpa.cpp
new file mode 100644
index 0000000..92b9e83
--- /dev/null
+++ b/src/gui/kernel/qclipboard_qpa.cpp
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qclipboard.h"
+
+#ifndef QT_NO_CLIPBOARD
+
+#include "qmimedata.h"
+#include "qapplication.h"
+
+QT_BEGIN_NAMESPACE
+
+QT_USE_NAMESPACE
+
+
+class QClipboardData
+{
+public:
+ QClipboardData();
+ ~QClipboardData();
+
+ void setSource(QMimeData* s)
+ {
+ if (s == src)
+ return;
+ delete src;
+ src = s;
+ }
+ QMimeData* source()
+ { return src; }
+
+ void clear();
+
+private:
+ QMimeData* src;
+};
+
+QClipboardData::QClipboardData()
+{
+ src = 0;
+}
+
+QClipboardData::~QClipboardData()
+{
+ delete src;
+}
+
+void QClipboardData::clear()
+{
+ delete src;
+ src = 0;
+}
+
+
+static QClipboardData *internalCbData = 0;
+
+static void cleanupClipboardData()
+{
+ delete internalCbData;
+ internalCbData = 0;
+}
+
+static QClipboardData *clipboardData()
+{
+ if (internalCbData == 0) {
+ internalCbData = new QClipboardData;
+ qAddPostRoutine(cleanupClipboardData);
+ }
+ return internalCbData;
+}
+
+
+void QClipboard::clear(Mode mode)
+{
+ setText(QString(), mode);
+}
+
+
+bool QClipboard::event(QEvent *e)
+{
+ return QObject::event(e);
+}
+
+const QMimeData* QClipboard::mimeData(Mode mode) const
+{
+ if (mode != Clipboard) return 0;
+
+ QClipboardData *d = clipboardData();
+ return d->source();
+}
+
+void QClipboard::setMimeData(QMimeData* src, Mode mode)
+{
+ if (mode != Clipboard) return;
+
+ QClipboardData *d = clipboardData();
+
+ d->setSource(src);
+
+ emitChanged(QClipboard::Clipboard);
+}
+
+bool QClipboard::supportsMode(Mode mode) const
+{
+ return (mode == Clipboard);
+}
+
+bool QClipboard::ownsMode(Mode mode) const
+{
+ if (mode == Clipboard)
+ qWarning("QClipboard::ownsClipboard: UNIMPLEMENTED!");
+ return false;
+}
+
+void QClipboard::connectNotify( const char * )
+{
+}
+
+void QClipboard::ownerDestroyed()
+{
+}
+
+#endif // QT_NO_CLIPBOARD
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qclipboard_s60.cpp b/src/gui/kernel/qclipboard_s60.cpp
index f07e066..73280b2 100644
--- a/src/gui/kernel/qclipboard_s60.cpp
+++ b/src/gui/kernel/qclipboard_s60.cpp
@@ -50,16 +50,18 @@
#include "qwidget.h"
#include "qevent.h"
#include "private/qcore_symbian_p.h"
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "txtclipboard.h"
+#endif
+#include "txtetext.h"
#include <QtDebug>
// Symbian's clipboard
#include <baclipb.h>
QT_BEGIN_NAMESPACE
-//### Mime Type mapping to UIDs
-
const TUid KQtCbDataStream = {0x2001B2DD};
-
+const TInt KPlainTextBegin = 0;
class QClipboardData
{
@@ -141,7 +143,6 @@ void writeToStreamLX(const QMimeData* aData, RWriteStream& aStream)
{
HBufC* stringData = TPtrC(reinterpret_cast<const TUint16*>((*iter).utf16())).AllocLC();
QByteArray ba = aData->data((*iter));
- qDebug() << "copy to clipboard mime: " << *iter << " data: " << ba;
// mime type
aStream << TCardinality(stringData->Size());
aStream << *(stringData);
@@ -152,6 +153,43 @@ void writeToStreamLX(const QMimeData* aData, RWriteStream& aStream)
}
}
+void writeToSymbianStoreLX(const QMimeData* aData, CClipboard* clipboard)
+{
+ // This function both leaves and throws exceptions. There must be no destructor
+ // dependencies between cleanup styles, and no cleanup stack dependencies on stacked objects.
+ if (aData->hasText()) {
+ CPlainText* text = CPlainText::NewL();
+ CleanupStack::PushL(text);
+
+ TPtrC textPtr(qt_QString2TPtrC(aData->text()));
+ text->InsertL(KPlainTextBegin, textPtr);
+ text->CopyToStoreL(clipboard->Store(), clipboard->StreamDictionary(),
+ KPlainTextBegin, textPtr.Length());
+ CleanupStack::PopAndDestroy(text);
+ }
+}
+
+void readSymbianStoreLX(QMimeData* aData, CClipboard* clipboard)
+{
+ // This function both leaves and throws exceptions. There must be no destructor
+ // dependencies between cleanup styles, and no cleanup stack dependencies on stacked objects.
+ CPlainText* text = CPlainText::NewL();
+ CleanupStack::PushL(text);
+ TInt dataLength = text->PasteFromStoreL(clipboard->Store(), clipboard->StreamDictionary(),
+ KPlainTextBegin);
+ if (dataLength == 0) {
+ User::Leave(KErrNotFound);
+ }
+ HBufC* hBuf = HBufC::NewL(dataLength);
+ TPtr buf = hBuf->Des();
+ text->Extract(buf, KPlainTextBegin, dataLength);
+
+ QString string = qt_TDesC2QString(buf);
+ CleanupStack::PopAndDestroy(text);
+
+ aData->setText(string);
+}
+
void readFromStreamLX(QMimeData* aData,RReadStream& aStream)
{
// This function both leaves and throws exceptions. There must be no destructor
@@ -174,7 +212,6 @@ void readFromStreamLX(QMimeData* aData,RReadStream& aStream)
ba.reserve(dataSize);
aStream.ReadL(reinterpret_cast<uchar*>(ba.data_ptr()->data),dataSize);
ba.data_ptr()->size = dataSize;
- qDebug() << "paste from clipboard mime: " << mimeType << " data: " << ba;
aData->setData(mimeType,ba);
}
}
@@ -192,23 +229,42 @@ const QMimeData* QClipboard::mimeData(Mode mode) const
{
if (mode != Clipboard) return 0;
QClipboardData *d = clipboardData();
+ bool dataExists(false);
if (d)
{
TRAPD(err,{
RFs fs = qt_s60GetRFs();
CClipboard* cb = CClipboard::NewForReadingLC(fs);
Q_ASSERT(cb);
+ //stream for qt
RStoreReadStream stream;
TStreamId stid = (cb->StreamDictionary()).At(KQtCbDataStream);
- stream.OpenLC(cb->Store(),stid);
- QT_TRYCATCH_LEAVING(readFromStreamLX(d->source(),stream));
- CleanupStack::PopAndDestroy(2,cb);
- return d->source();
+ if (stid != 0) {
+ stream.OpenLC(cb->Store(),stid);
+ QT_TRYCATCH_LEAVING(readFromStreamLX(d->source(),stream));
+ CleanupStack::PopAndDestroy(&stream);
+ dataExists = true;
+ }
+ else {
+ //symbian clipboard
+ RStoreReadStream symbianStream;
+ TStreamId symbianStId = (cb->StreamDictionary()).At(KClipboardUidTypePlainText);
+ if (symbianStId != 0) {
+ symbianStream.OpenLC(cb->Store(), symbianStId);
+ QT_TRYCATCH_LEAVING(readSymbianStoreLX(d->source(), cb));
+ CleanupStack::PopAndDestroy(&symbianStream);
+ dataExists = true;
+ }
+ }
+ CleanupStack::PopAndDestroy(cb);
});
if (err != KErrNone){
qDebug()<< "clipboard is empty/err: " << err;
}
+ if (dataExists) {
+ return d->source();
+ }
}
return 0;
}
@@ -223,6 +279,7 @@ void QClipboard::setMimeData(QMimeData* src, Mode mode)
TRAPD(err,{
RFs fs = qt_s60GetRFs();
CClipboard* cb = CClipboard::NewForWritingLC(fs);
+ //stream for qt
RStoreWriteStream stream;
TStreamId stid = stream.CreateLC(cb->Store());
QT_TRYCATCH_LEAVING(writeToStreamLX(src,stream));
@@ -230,7 +287,14 @@ void QClipboard::setMimeData(QMimeData* src, Mode mode)
stream.CommitL();
(cb->StreamDictionary()).AssignL(KQtCbDataStream,stid);
cb->CommitL();
- CleanupStack::PopAndDestroy(2,cb);
+
+ //stream for symbian
+ RStoreWriteStream symbianStream;
+ TStreamId symbianStId = symbianStream.CreateLC(cb->Store());
+ QT_TRYCATCH_LEAVING(writeToSymbianStoreLX(src, cb));
+ (cb->StreamDictionary()).AssignL(KClipboardUidTypePlainText, symbianStId);
+ cb->CommitL();
+ CleanupStack::PopAndDestroy(3,cb);
});
if (err != KErrNone){
qDebug()<< "clipboard write err :" << err;
diff --git a/src/gui/kernel/qclipboard_win.cpp b/src/gui/kernel/qclipboard_win.cpp
index 63ca9e5..c2e29fd 100644
--- a/src/gui/kernel/qclipboard_win.cpp
+++ b/src/gui/kernel/qclipboard_win.cpp
@@ -141,7 +141,7 @@ public:
clipBoardViewer = new QWidget();
clipBoardViewer->createWinId();
clipBoardViewer->setObjectName(QLatin1String("internal clipboard owner"));
- // We dont need this internal widget to appear in QApplication::topLevelWidgets()
+ // We don't need this internal widget to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets)
QWidgetPrivate::allWidgets->remove(clipBoardViewer);
}
diff --git a/src/gui/kernel/qclipboard_x11.cpp b/src/gui/kernel/qclipboard_x11.cpp
index 55548ef..62c861d 100644
--- a/src/gui/kernel/qclipboard_x11.cpp
+++ b/src/gui/kernel/qclipboard_x11.cpp
@@ -132,7 +132,7 @@ void setupOwner()
requestor = new QWidget(0);
requestor->createWinId();
requestor->setObjectName(QLatin1String("internal clipboard requestor"));
- // We dont need this internal widgets to appear in QApplication::topLevelWidgets()
+ // We don't need this internal widgets to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets) {
QWidgetPrivate::allWidgets->remove(owner);
QWidgetPrivate::allWidgets->remove(requestor);
@@ -769,7 +769,7 @@ QByteArray QX11Data::clipboardReadIncrementalProperty(Window win, Atom property,
delete requestor;
requestor = new QWidget(0);
requestor->setObjectName(QLatin1String("internal clipboard requestor"));
- // We dont need this internal widget to appear in QApplication::topLevelWidgets()
+ // We don't need this internal widget to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets)
QWidgetPrivate::allWidgets->remove(requestor);
diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm
index 8d38f45..b963b3c 100644
--- a/src/gui/kernel/qcocoamenuloader_mac.mm
+++ b/src/gui/kernel/qcocoamenuloader_mac.mm
@@ -70,13 +70,13 @@ QT_USE_NAMESPACE
showAllItem = [[appMenu itemWithTitle:@"Show All"] retain];
// Get the names in the nib to match the app name set by Qt.
- NSString *appName = reinterpret_cast<const NSString*>(QCFString::toCFStringRef(qAppName()));
+ const NSString *appName = reinterpret_cast<const NSString*>(QCFString::toCFStringRef(qAppName()));
[quitItem setTitle:[[quitItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[hideItem setTitle:[[hideItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[aboutItem setTitle:[[aboutItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[appName release];
// Disable the items that don't do anything. If someone associates a QAction with them
// They should get synced back in.
@@ -89,7 +89,7 @@ QT_USE_NAMESPACE
- (void)ensureAppMenuInMenu:(NSMenu *)menu
{
// The application menu is the menu in the menu bar that contains the
- // 'Quit' item. When changing menu bar (e.g when swithing between
+ // 'Quit' item. When changing menu bar (e.g when switching between
// windows with different menu bars), we never recreate this menu, but
// instead pull it out the current menu bar and place into the new one:
NSMenu *mainMenu = [NSApp mainMenu];
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index 8576f52..dfcc2e6 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -534,7 +534,7 @@ static int qCocoaViewCount = 0;
return;
// We use a different graphics system.
- if (QApplicationPrivate::graphicsSystem() != 0) {
+ if (QApplicationPrivate::graphicsSystem() != 0 && !qwidgetprivate->isInUnifiedToolbar) {
// Qt handles the painting occuring inside the window.
// Cocoa also keeps track of all widgets as NSView and therefore might
@@ -558,6 +558,15 @@ static int qCocoaViewCount = 0;
CGContextRef cg = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
qwidgetprivate->hd = cg;
+
+ // We steal the CGContext for flushing in the unified toolbar with the raster engine.
+ if (QApplicationPrivate::graphicsSystem() != 0 && qwidgetprivate->isInUnifiedToolbar) {
+ qwidgetprivate->cgContext = cg;
+ qwidgetprivate->hasOwnContext = true;
+ qwidgetprivate->unifiedSurface->flush(qwidget, qwidgetprivate->ut_rg, qwidgetprivate->ut_pt);
+ return;
+ }
+
CGContextSaveGState(cg);
if (qwidget->isVisible() && qwidget->updatesEnabled()) { //process the actual paint event.
@@ -955,10 +964,6 @@ static int qCocoaViewCount = 0;
}
}
#endif //QT_NO_WHEELEVENT
-
- if (!wheelOK) {
- return [super scrollWheel:theEvent];
- }
}
- (void)tabletProximity:(NSEvent *)tabletEvent
@@ -1408,7 +1413,7 @@ static int qCocoaViewCount = 0;
if (!selectedText.isEmpty()) {
QCFString string(selectedText.mid(theRange.location, theRange.length));
const NSString *tmpString = reinterpret_cast<const NSString *>((CFStringRef)string);
- return [[[NSAttributedString alloc] initWithString:tmpString] autorelease];
+ return [[[NSAttributedString alloc] initWithString:const_cast<NSString *>(tmpString)] autorelease];
} else {
return nil;
}
diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h
index ed6b254..62d2f41 100644
--- a/src/gui/kernel/qcursor.h
+++ b/src/gui/kernel/qcursor.h
@@ -130,7 +130,7 @@ public:
static int x11Screen();
#elif defined(Q_WS_MAC)
Qt::HANDLE handle() const;
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
int handle() const;
#elif defined(Q_OS_SYMBIAN)
Qt::HANDLE handle() const;
diff --git a/src/gui/kernel/qcursor_p.h b/src/gui/kernel/qcursor_p.h
index 23798b4..bfd6eac 100644
--- a/src/gui/kernel/qcursor_p.h
+++ b/src/gui/kernel/qcursor_p.h
@@ -91,7 +91,7 @@ public:
short hx, hy;
#if defined (Q_WS_MAC)
int mId;
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
int id;
#endif
#if defined (Q_WS_WIN)
diff --git a/src/gui/kernel/qcursor_qpa.cpp b/src/gui/kernel/qcursor_qpa.cpp
new file mode 100644
index 0000000..a6ae7d3
--- /dev/null
+++ b/src/gui/kernel/qcursor_qpa.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qcursor.h>
+#include <private/qcursor_p.h>
+#include <qbitmap.h>
+
+QT_BEGIN_NAMESPACE
+
+QT_USE_NAMESPACE
+
+#ifndef QT_NO_CURSOR
+
+static int nextCursorId = Qt::BitmapCursor;
+
+/*****************************************************************************
+ Internal QCursorData class
+ *****************************************************************************/
+
+QCursorData::QCursorData(Qt::CursorShape s)
+ : cshape(s), bm(0), bmm(0), hx(0), hy(0), id(s)
+{
+ ref = 1;
+}
+
+QCursorData::~QCursorData()
+{
+ delete bm;
+ delete bmm;
+}
+
+
+/*****************************************************************************
+ Global cursors
+ *****************************************************************************/
+
+extern QCursorData *qt_cursorTable[Qt::LastCursor + 1]; // qcursor.cpp
+
+int QCursor::handle() const
+{
+ return d->id;
+}
+
+
+QCursorData *QCursorData::setBitmap(const QBitmap &bitmap, const QBitmap &mask, int hotX, int hotY)
+{
+ if (!QCursorData::initialized)
+ QCursorData::initialize();
+ if (bitmap.depth() != 1 || mask.depth() != 1 || bitmap.size() != mask.size()) {
+ qWarning("QCursor: Cannot create bitmap cursor; invalid bitmap(s)");
+ QCursorData *c = qt_cursorTable[0];
+ c->ref.ref();
+ return c;
+ }
+ QCursorData *d = new QCursorData;
+ d->bm = new QBitmap(bitmap);
+ d->bmm = new QBitmap(mask);
+ d->cshape = Qt::BitmapCursor;
+ d->id = ++nextCursorId;
+ d->hx = hotX >= 0 ? hotX : bitmap.width() / 2;
+ d->hy = hotY >= 0 ? hotY : bitmap.height() / 2;
+
+ return d;
+}
+
+void QCursorData::update()
+{
+}
+
+#endif //QT_NO_CURSOR
+
+extern int qt_last_x,qt_last_y;
+
+QPoint QCursor::pos()
+{
+ return QPoint(qt_last_x, qt_last_y);
+}
+
+void QCursor::setPos(int x, int y)
+{
+ // Need to check, since some X servers generate null mouse move
+ // events, causing looping in applications which call setPos() on
+ // every mouse move event.
+ //
+ if (pos() == QPoint(x, y))
+ return;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qdesktopwidget.qdoc b/src/gui/kernel/qdesktopwidget.qdoc
index 2d72bf9..c550082 100644
--- a/src/gui/kernel/qdesktopwidget.qdoc
+++ b/src/gui/kernel/qdesktopwidget.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/kernel/qdesktopwidget_qpa.cpp b/src/gui/kernel/qdesktopwidget_qpa.cpp
new file mode 100644
index 0000000..cff05f5
--- /dev/null
+++ b/src/gui/kernel/qdesktopwidget_qpa.cpp
@@ -0,0 +1,180 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdesktopwidget.h"
+#include "private/qapplication_p.h"
+#include "private/qgraphicssystem_p.h"
+#include <QWidget>
+#include "private/qwidget_p.h"
+#include "private/qdesktopwidget_qpa_p.h"
+QT_BEGIN_NAMESPACE
+
+QT_USE_NAMESPACE
+
+void QDesktopWidgetPrivate::updateScreenList()
+{
+ QList<QPlatformScreen *> screenList = QApplicationPrivate::platformIntegration()->screens();
+ int targetLength = screenList.length();
+ int currentLength = screens.length();
+
+ // Add or remove screen widgets as necessary
+ if(currentLength > targetLength) {
+ QDesktopScreenWidget *screen;
+ while (currentLength-- > targetLength) {
+ screen = screens.takeLast();
+ delete screen;
+ }
+ }
+ else if (currentLength < targetLength) {
+ QDesktopScreenWidget *screen;
+ while (currentLength < targetLength) {
+ screen = new QDesktopScreenWidget(currentLength++);
+ screens.append(screen);
+ }
+ }
+
+ QRegion virtualGeometry;
+ bool doVirtualGeometry = QApplicationPrivate::platformIntegration()->isVirtualDesktop();
+
+ // update the geometry of each screen widget
+ for (int i = 0; i < screens.length(); i++) {
+ QRect screenGeometry = screenList.at(i)->geometry();
+ screens.at(i)->setGeometry(screenGeometry);
+ if (doVirtualGeometry)
+ virtualGeometry += screenGeometry;
+ }
+
+ virtualScreen.setGeometry(virtualGeometry.boundingRect());
+ Q_Q(QDesktopWidget);
+ q->setGeometry(virtualScreen.geometry());
+}
+
+QDesktopWidget::QDesktopWidget()
+ : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop)
+{
+ Q_D(QDesktopWidget);
+ setObjectName(QLatin1String("desktop"));
+ d->updateScreenList();
+}
+
+QDesktopWidget::~QDesktopWidget()
+{
+}
+
+bool QDesktopWidget::isVirtualDesktop() const
+{
+ return QApplicationPrivate::platformIntegration()->isVirtualDesktop();
+}
+
+int QDesktopWidget::primaryScreen() const
+{
+ return 0;
+}
+
+int QDesktopWidget::numScreens() const
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ return qMax(pi->screens().size(), 1);
+}
+
+QWidget *QDesktopWidget::screen(int screen)
+{
+ Q_D(QDesktopWidget);
+ if (QApplicationPrivate::platformIntegration()->isVirtualDesktop())
+ return &d->virtualScreen;
+ if (screen < 0 || screen >= d->screens.length())
+ return d->screens.at(0);
+ return d->screens.at(screen);
+}
+
+const QRect QDesktopWidget::availableGeometry(int screenNo) const
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ QList<QPlatformScreen *> screens = pi->screens();
+ if (screenNo == -1)
+ screenNo = 0;
+ if (screenNo < 0 || screenNo >= screens.size())
+ return QRect();
+ else
+ return screens[screenNo]->availableGeometry();
+}
+
+const QRect QDesktopWidget::screenGeometry(int screenNo) const
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ QList<QPlatformScreen *> screens = pi->screens();
+ if (screenNo == -1)
+ screenNo = 0;
+ if (screenNo < 0 || screenNo >= screens.size())
+ return QRect();
+ else
+ return screens[screenNo]->geometry();
+}
+
+int QDesktopWidget::screenNumber(const QWidget *w) const
+{
+ if (!w)
+ return 0;
+
+ QRect frame = w->frameGeometry();
+ if (!w->isWindow())
+ frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
+ const QPoint midpoint = (frame.topLeft() + frame.bottomRight()) / 2;
+ return screenNumber(midpoint);
+}
+
+int QDesktopWidget::screenNumber(const QPoint &p) const
+{
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ QList<QPlatformScreen *> screens = pi->screens();
+
+ for (int i = 0; i < screens.size(); ++i)
+ if (screens[i]->geometry().contains(p))
+ return i;
+
+ return primaryScreen(); //even better would be closest screen
+}
+
+void QDesktopWidget::resizeEvent(QResizeEvent *)
+{
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qdesktopwidget_qpa_p.h b/src/gui/kernel/qdesktopwidget_qpa_p.h
new file mode 100644
index 0000000..8bed09d
--- /dev/null
+++ b/src/gui/kernel/qdesktopwidget_qpa_p.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QDESKTOPWIDGET_QPA_P_H
+#define QDESKTOPWIDGET_QPA_P_H
+
+#include "QDesktopWidget"
+#include "private/qwidget_p.h"
+
+class QDesktopScreenWidget : public QWidget {
+ Q_OBJECT
+public:
+ QDesktopScreenWidget(int screenNumber = -1) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; }
+};
+
+class QDesktopWidgetPrivate : public QWidgetPrivate {
+ Q_DECLARE_PUBLIC(QDesktopWidget)
+
+public:
+ ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; }
+ void updateScreenList();
+
+ QList<QDesktopScreenWidget *> screens;
+ QDesktopScreenWidget virtualScreen;
+};
+
+#endif // QDESKTOPWIDGET_QPA_P_H
diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h
index 033e6a6..598a9de 100644
--- a/src/gui/kernel/qdnd_p.h
+++ b/src/gui/kernel/qdnd_p.h
@@ -261,11 +261,11 @@ public:
#endif
private:
-#ifdef Q_WS_QWS
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
Qt::DropAction currentActionForOverrideCursor;
#endif
#ifdef Q_OS_SYMBIAN
-#ifndef QT_NO_CURSOR
+#ifndef QT_NO_CURSOR
QCursor overrideCursor;
#endif
#endif
diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp
new file mode 100644
index 0000000..01d40ca
--- /dev/null
+++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeventdispatcher_glib_qpa_p.h"
+
+#include "qapplication.h"
+
+#include "qplatformdefs.h"
+#include "qapplication.h"
+
+#include <glib.h>
+#include "qapplication_p.h"
+
+#include <qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+struct GUserEventSource
+{
+ GSource source;
+ QPAEventDispatcherGlib *q;
+};
+
+static gboolean userEventSourcePrepare(GSource *s, gint *timeout)
+{
+ Q_UNUSED(s)
+ Q_UNUSED(timeout)
+
+ return QWindowSystemInterfacePrivate::windowSystemEventsQueued() > 0;
+}
+
+static gboolean userEventSourceCheck(GSource *source)
+{
+ return userEventSourcePrepare(source, 0);
+}
+
+static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer)
+{
+ GUserEventSource * source = reinterpret_cast<GUserEventSource *>(s);
+
+ QWindowSystemInterfacePrivate::WindowSystemEvent * event;
+ while (QWindowSystemInterfacePrivate::windowSystemEventsQueued()) {
+ event = QWindowSystemInterfacePrivate::getWindowSystemEvent();
+ if (!event)
+ break;
+
+ // send through event filter
+ if (source->q->filterEvent(event)) {
+ delete event;
+ continue;
+ }
+ QApplicationPrivate::processWindowSystemEvent(event);
+ delete event;
+ }
+
+ return true;
+}
+
+
+static GSourceFuncs userEventSourceFuncs = {
+ userEventSourcePrepare,
+ userEventSourceCheck,
+ userEventSourceDispatch,
+ NULL,
+ NULL,
+ NULL
+};
+
+QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context)
+ : QEventDispatcherGlibPrivate(context)
+{
+ userEventSource = reinterpret_cast<GUserEventSource *>(g_source_new(&userEventSourceFuncs,
+ sizeof(GUserEventSource)));
+ userEventSource->q = 0;
+ g_source_set_can_recurse(&userEventSource->source, true);
+ g_source_attach(&userEventSource->source, mainContext);
+}
+
+
+QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent)
+ : QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent)
+{
+ Q_D(QPAEventDispatcherGlib);
+ d->userEventSource->q = this;
+}
+
+QPAEventDispatcherGlib::~QPAEventDispatcherGlib()
+{
+ Q_D(QPAEventDispatcherGlib);
+
+ g_source_destroy(&d->userEventSource->source);
+ g_source_unref(&d->userEventSource->source);
+ d->userEventSource = 0;
+}
+
+bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
+{
+ static bool init = false;
+ if (!init) {
+ if (QApplicationPrivate::platformIntegration()->createEventLoopIntegration()) {
+ qWarning("Eventloop integration is not supported by the glib event dispatcher");
+ qWarning("Use the UNIX event dispatcher by defining environment variable QT_NO_GLIB=1");
+ }
+ init = true;
+ }
+ return QEventDispatcherGlib::processEvents(flags);
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h
new file mode 100644
index 0000000..1c32ab2
--- /dev/null
+++ b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEVENTDISPATCHER_GLIB_QPA_P_H
+#define QEVENTDISPATCHER_GLIB_QPA_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qeventdispatcher_glib_p.h>
+
+typedef struct _GMainContext GMainContext;
+
+QT_BEGIN_NAMESPACE
+class QPAEventDispatcherGlibPrivate;
+
+class QPAEventDispatcherGlib : public QEventDispatcherGlib
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QPAEventDispatcherGlib)
+
+public:
+ explicit QPAEventDispatcherGlib(QObject *parent = 0);
+ ~QPAEventDispatcherGlib();
+
+ bool processEvents(QEventLoop::ProcessEventsFlags flags);
+};
+
+struct GUserEventSource;
+
+class QPAEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate
+{
+ Q_DECLARE_PUBLIC(QPAEventDispatcherGlib)
+public:
+ QPAEventDispatcherGlibPrivate(GMainContext *context = 0);
+ GUserEventSource *userEventSource;
+};
+
+
+QT_END_NAMESPACE
+
+#endif // QEVENTDISPATCHER_GLIB_QPA_P_H
diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp
new file mode 100644
index 0000000..cb70141
--- /dev/null
+++ b/src/gui/kernel/qeventdispatcher_qpa.cpp
@@ -0,0 +1,302 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformdefs.h"
+#include "qapplication.h"
+#include "qeventdispatcher_qpa_p.h"
+#include "private/qeventdispatcher_unix_p.h"
+#include "qapplication_p.h"
+#include "qplatformeventloopintegration_qpa.h"
+
+#include <QWindowSystemInterface>
+#include <QtCore/QElapsedTimer>
+#include <QtCore/QAtomicInt>
+#include <QtCore/QSemaphore>
+
+#include <errno.h>
+
+QT_BEGIN_NAMESPACE
+
+QT_USE_NAMESPACE
+
+class Rendezvous
+{
+public:
+ void checkpoint()
+ {
+ if (state.testAndSetOrdered(0,1)) {
+ semaphore.acquire();
+ } else if (state.testAndSetAcquire(1,0)) {
+ semaphore.release();
+ } else {
+ qWarning("Barrier internal error");
+ }
+ }
+private:
+ QSemaphore semaphore;
+ QAtomicInt state;
+};
+
+class SelectWorker : public QThread
+{
+public:
+ SelectWorker(QEventDispatcherQPAPrivate *eventDispatcherPrivate)
+ : QThread(),
+ m_edPrivate(eventDispatcherPrivate),
+ m_retVal(0)
+ {
+ }
+
+ void setSelectValues(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
+ {
+ m_nfds = nfds;
+ m_readfds = readfds;
+ m_writefds = writefds;
+ m_exceptfds = exceptfds;
+
+
+ }
+
+ int retVal() const {
+ return m_retVal;
+ }
+
+protected:
+ void run();
+
+private:
+ QEventDispatcherQPAPrivate *m_edPrivate;
+ int m_retVal;
+
+ int m_nfds;
+ fd_set *m_readfds, *m_writefds, *m_exceptfds;
+};
+
+class QEventDispatcherQPAPrivate : public QEventDispatcherUNIXPrivate
+{
+ Q_DECLARE_PUBLIC(QEventDispatcherQPA)
+public:
+ QEventDispatcherQPAPrivate()
+ : eventLoopIntegration(0),
+ barrierBeforeBlocking(0),
+ barrierReturnValue(0),
+ selectReturnMutex(0),
+ selectWorkerNeedsSync(true),
+ selectWorkerHasResult(false),
+ m_integrationInitialised(false),
+ m_hasIntegration(false)
+ {
+
+ }
+
+ ~QEventDispatcherQPAPrivate()
+ {
+ delete selectWorker;
+ delete eventLoopIntegration;
+ delete barrierBeforeBlocking;
+ delete barrierReturnValue;
+ delete selectReturnMutex;
+ }
+
+ bool hasIntegration() const
+ {
+ if (!m_integrationInitialised) {
+ QEventDispatcherQPAPrivate *that = const_cast<QEventDispatcherQPAPrivate *>(this);
+ if (qApp && (qApp->thread() == QThread::currentThread())) { // guiThread
+ if (QApplicationPrivate::platformIntegration()) {
+ that->eventLoopIntegration = QApplicationPrivate::platformIntegration()->createEventLoopIntegration();
+ if (that->eventLoopIntegration) {
+ that->selectWorker = new SelectWorker(that);
+ that->barrierBeforeBlocking = new Rendezvous;
+ that->barrierReturnValue = new Rendezvous;
+ that->selectReturnMutex = new QMutex;
+ that->selectWorker->start();
+ that->m_hasIntegration = true;
+ if (!QElapsedTimer::isMonotonic())
+ qWarning("Having eventloop integration without monotonic timers can lead to undefined behaviour");
+ }
+ }
+ }
+ that->m_integrationInitialised = true;
+ }
+ return m_hasIntegration;
+ }
+
+ QPlatformEventLoopIntegration *eventLoopIntegration;
+ Rendezvous *barrierBeforeBlocking;
+ Rendezvous *barrierReturnValue;
+
+ QMutex *selectReturnMutex;
+ bool selectWorkerNeedsSync;
+ bool selectWorkerHasResult;
+
+ SelectWorker *selectWorker;
+private:
+ bool m_integrationInitialised;
+ bool m_hasIntegration;
+};
+
+QEventDispatcherQPA::QEventDispatcherQPA(QObject *parent)
+ : QEventDispatcherUNIX(*new QEventDispatcherQPAPrivate, parent)
+{ }
+
+QEventDispatcherQPA::~QEventDispatcherQPA()
+{ }
+
+bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags)
+{
+ Q_D(QEventDispatcherQPA);
+ int nevents = 0;
+
+ // handle gui and posted events
+ d->interrupt = false;
+ QApplication::sendPostedEvents();
+
+ while (!d->interrupt) { // also flushes output buffer ###can be optimized
+ QWindowSystemInterfacePrivate::WindowSystemEvent *event;
+ if (!(flags & QEventLoop::ExcludeUserInputEvents)
+ && QWindowSystemInterfacePrivate::windowSystemEventsQueued() > 0) {
+ // process a pending user input event
+ event = QWindowSystemInterfacePrivate::getWindowSystemEvent();
+ if (!event)
+ break;
+ } else {
+ break;
+ }
+
+ if (filterEvent(event)) {
+ delete event;
+ continue;
+ }
+ nevents++;
+
+ QApplicationPrivate::processWindowSystemEvent(event);
+ delete event;
+ }
+
+ if (!d->interrupt) {
+ if (QEventDispatcherUNIX::processEvents(flags))
+ return true;
+ }
+ return (nevents > 0);
+}
+
+bool QEventDispatcherQPA::hasPendingEvents()
+{
+ extern uint qGlobalPostedEventsCount(); // from qapplication.cpp
+ return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::windowSystemEventsQueued();
+}
+
+void QEventDispatcherQPA::registerSocketNotifier(QSocketNotifier *notifier)
+{
+ Q_D(QEventDispatcherQPA);
+ QEventDispatcherUNIX::registerSocketNotifier(notifier);
+ if (d->hasIntegration())
+ wakeUp();
+
+}
+
+void QEventDispatcherQPA::unregisterSocketNotifier(QSocketNotifier *notifier)
+{
+ Q_D(QEventDispatcherQPA);
+ QEventDispatcherUNIX::unregisterSocketNotifier(notifier);
+ if (d->hasIntegration())
+ wakeUp();
+}
+
+void QEventDispatcherQPA::flush()
+{
+ if(qApp)
+ qApp->sendPostedEvents();
+}
+
+
+int QEventDispatcherQPA::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+ timeval *timeout)
+{
+ Q_D(QEventDispatcherQPA);
+ int retVal = 0;
+ if (d->hasIntegration()) {
+ qint64 timeoutmsec = 0;
+ if (timeout)
+ timeoutmsec = timeout->tv_sec * 1000 + (timeout->tv_usec/1000);
+ d->selectReturnMutex->lock();
+ if (d->selectWorkerNeedsSync) {
+ if (d->selectWorkerHasResult) {
+ retVal = d->selectWorker->retVal();
+ d->selectWorkerHasResult = false;
+
+ d->selectReturnMutex->unlock();
+ d->barrierReturnValue->checkpoint();
+ return retVal;
+ } else {
+ d->selectWorkerNeedsSync = false;
+ d->selectWorker->setSelectValues(nfds,readfds, writefds, exceptfds);
+ d->barrierBeforeBlocking->checkpoint();
+ }
+ }
+ d->selectReturnMutex->unlock();
+ d->eventLoopIntegration->processEvents(timeoutmsec);
+ retVal = 0; //is 0 if select has not returned
+ } else {
+ retVal = QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout);
+ }
+ return retVal;
+}
+
+void SelectWorker::run()
+{
+ while(true) {
+ m_retVal = 0;
+ m_edPrivate->barrierBeforeBlocking->checkpoint(); // wait for mainthread
+ int tmpRet = qt_safe_select(m_nfds,m_readfds,m_writefds,m_exceptfds,0);
+ m_edPrivate->selectReturnMutex->lock();
+ m_edPrivate->eventLoopIntegration->wakeup();
+
+ m_edPrivate->selectWorkerNeedsSync = true;
+ m_edPrivate->selectWorkerHasResult = true;
+ m_retVal = tmpRet;
+
+ m_edPrivate->selectReturnMutex->unlock();
+ m_edPrivate->barrierReturnValue->checkpoint();
+ }
+}
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qeventdispatcher_qpa_p.h b/src/gui/kernel/qeventdispatcher_qpa_p.h
new file mode 100644
index 0000000..8065c3e
--- /dev/null
+++ b/src/gui/kernel/qeventdispatcher_qpa_p.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEVENTDISPATCHER_QPA_P_H
+#define QEVENTDISPATCHER_QPA_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "private/qeventdispatcher_unix_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEventDispatcherQPAPrivate;
+
+class QEventDispatcherQPA : public QEventDispatcherUNIX
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QEventDispatcherQPA)
+
+public:
+ explicit QEventDispatcherQPA(QObject *parent = 0);
+ ~QEventDispatcherQPA();
+
+ bool processEvents(QEventLoop::ProcessEventsFlags flags);
+ bool hasPendingEvents();
+
+ void registerSocketNotifier(QSocketNotifier *notifier);
+ void unregisterSocketNotifier(QSocketNotifier *notifier);
+
+ void flush();
+
+protected:
+ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
+ timeval *timeout);
+};
+
+QT_END_NAMESPACE
+
+#endif // QEVENTDISPATCHER_QPA_P_H
diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp
index bc787b8..77ebd0d 100644
--- a/src/gui/kernel/qeventdispatcher_s60.cpp
+++ b/src/gui/kernel/qeventdispatcher_s60.cpp
@@ -45,6 +45,62 @@
QT_BEGIN_NAMESPACE
+QtEikonEnv::QtEikonEnv()
+ : m_lastIterationCount(0)
+ , m_savedStatusCode(KRequestPending)
+ , m_hasAlreadyRun(false)
+{
+}
+
+QtEikonEnv::~QtEikonEnv()
+{
+}
+
+void QtEikonEnv::RunL()
+{
+ QEventDispatcherS60 *dispatcher = qobject_cast<QEventDispatcherS60 *>(QAbstractEventDispatcher::instance());
+ if (!dispatcher) {
+ CEikonEnv::RunL();
+ return;
+ }
+
+ if (m_lastIterationCount != dispatcher->iterationCount()) {
+ m_hasAlreadyRun = false;
+ m_lastIterationCount = dispatcher->iterationCount();
+ }
+
+ if (m_hasAlreadyRun) {
+ // Fool the active scheduler into believing we are still waiting for events.
+ // The window server thinks we are not, however.
+ m_savedStatusCode = iStatus.Int();
+ iStatus = KRequestPending;
+ SetActive();
+ dispatcher->queueDeferredActiveObjectsCompletion();
+ } else {
+ m_hasAlreadyRun = true;
+ CEikonEnv::RunL();
+ }
+}
+
+void QtEikonEnv::DoCancel()
+{
+ complete();
+
+ CEikonEnv::DoCancel();
+}
+
+void QtEikonEnv::complete()
+{
+ if (m_hasAlreadyRun) {
+ if (m_savedStatusCode != KRequestPending) {
+ TRequestStatus *status = &iStatus;
+ QEventDispatcherSymbian::RequestComplete(status, m_savedStatusCode);
+ m_savedStatusCode = KRequestPending;
+ }
+ m_hasAlreadyRun = false;
+ }
+}
+
QEventDispatcherS60::QEventDispatcherS60(QObject *parent)
: QEventDispatcherSymbian(parent),
m_noInputEvents(false)
@@ -127,4 +183,14 @@ void QEventDispatcherS60::removeInputEventsForWidget(QObject *object)
}
}
+// reimpl
+void QEventDispatcherS60::reactivateDeferredActiveObjects()
+{
+ if (S60->qtOwnsS60Environment) {
+ static_cast<QtEikonEnv *>(CCoeEnv::Static())->complete();
+ }
+
+ QEventDispatcherSymbian::reactivateDeferredActiveObjects();
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qeventdispatcher_s60_p.h b/src/gui/kernel/qeventdispatcher_s60_p.h
index d2f327c..c14fef0 100644
--- a/src/gui/kernel/qeventdispatcher_s60_p.h
+++ b/src/gui/kernel/qeventdispatcher_s60_p.h
@@ -56,8 +56,30 @@
#include <private/qeventdispatcher_symbian_p.h>
#include "qt_s60_p.h"
+#include <eikenv.h>
+
QT_BEGIN_NAMESPACE
+class QEventDispatcherS60;
+
+class QtEikonEnv : public CEikonEnv
+{
+public:
+ QtEikonEnv();
+ ~QtEikonEnv();
+
+ // from CActive.
+ void RunL();
+ void DoCancel();
+
+ void complete();
+
+private:
+ int m_lastIterationCount;
+ TInt m_savedStatusCode;
+ bool m_hasAlreadyRun;
+};
+
class Q_GUI_EXPORT QEventDispatcherS60 : public QEventDispatcherSymbian
{
Q_OBJECT
@@ -73,6 +95,8 @@ public:
void saveInputEvent(QSymbianControl *control, QWidget *widget, QInputEvent *event);
+ void reactivateDeferredActiveObjects();
+
private:
bool sendDeferredInputEvents();
diff --git a/src/gui/kernel/qgenericplugin_qpa.cpp b/src/gui/kernel/qgenericplugin_qpa.cpp
new file mode 100644
index 0000000..43d6525
--- /dev/null
+++ b/src/gui/kernel/qgenericplugin_qpa.cpp
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgenericplugin_qpa.h"
+
+#ifndef QT_NO_LIBRARY
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QGenericPlugin
+ \ingroup plugins
+ \ingroup qpa
+
+ \brief The QGenericPlugin class is an abstract base class for
+ window-system related plugins in Qt QPA.
+
+ Note that this class is only available in \l{Qt QPA}.
+
+ A mouse plugin can be created by subclassing
+ QGenericPlugin and reimplementing the pure virtual keys() and
+ create() functions. By exporting the derived class using the
+ Q_EXPORT_PLUGIN2() macro, The default implementation of the
+ QGenericPluginFactory class will automatically detect the plugin and
+ load the driver into the server application at run-time. See \l
+ {How to Create Qt Plugins} for details.
+
+ \sa QGenericPluginFactory
+*/
+
+/*!
+ \fn QStringList QGenericPlugin::keys() const
+
+ Implement this function to return the list of valid keys, i.e. the
+ drivers supported by this plugin.
+
+ \sa create()
+*/
+
+/*!
+ Constructs a plugin with the given \a parent.
+
+ Note that this constructor is invoked automatically by the
+ Q_EXPORT_PLUGIN2() macro, so there is no need for calling it
+ explicitly.
+*/
+QGenericPlugin::QGenericPlugin(QObject *parent)
+ : QObject(parent)
+{
+}
+
+/*!
+ Destroys the plugin.
+
+ Note that Qt destroys a plugin automatically when it is no longer
+ used, so there is no need for calling the destructor explicitly.
+*/
+QGenericPlugin::~QGenericPlugin()
+{
+}
+
+/*!
+ \fn QObject* QGenericPlugin::create(const QString &key, const QString& specification)
+
+ Implement this function to create a driver matching the type
+ specified by the given \a key and \a specification parameters. Note that
+ keys are case-insensitive.
+
+ \sa keys()
+*/
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_LIBRARY
diff --git a/src/gui/kernel/qgenericplugin_qpa.h b/src/gui/kernel/qgenericplugin_qpa.h
new file mode 100644
index 0000000..e1792cd
--- /dev/null
+++ b/src/gui/kernel/qgenericplugin_qpa.h
@@ -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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGENERICPLUGIN_QPA_H
+#define QGENERICPLUGIN_QPA_H
+
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+#ifndef QT_NO_LIBRARY
+
+//class QGenericObject; ?????
+
+ struct Q_GUI_EXPORT QGenericPluginFactoryInterface : public QFactoryInterface
+{
+ virtual QObject* create(const QString &name, const QString &spec) = 0;
+};
+
+#define QGenericPluginFactoryInterface_iid "com.trolltech.Qt.QGenericPluginFactoryInterface"
+Q_DECLARE_INTERFACE(QGenericPluginFactoryInterface, QGenericPluginFactoryInterface_iid)
+
+class Q_GUI_EXPORT QGenericPlugin : public QObject, public QGenericPluginFactoryInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(QGenericPluginFactoryInterface:QFactoryInterface)
+public:
+ explicit QGenericPlugin(QObject *parent = 0);
+ ~QGenericPlugin();
+
+ virtual QStringList keys() const = 0;
+ virtual QObject* create(const QString& name, const QString &spec) = 0;
+};
+
+#endif // QT_NO_LIBRARY
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QGENERICPLUGIN_QPA_H
diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.cpp b/src/gui/kernel/qgenericpluginfactory_qpa.cpp
new file mode 100644
index 0000000..abc575a
--- /dev/null
+++ b/src/gui/kernel/qgenericpluginfactory_qpa.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgenericpluginfactory_qpa.h"
+
+#include "qapplication.h"
+#include "private/qfactoryloader_p.h"
+#include "qgenericplugin_qpa.h"
+#include "qdebug.h"
+
+QT_BEGIN_NAMESPACE
+
+#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL)
+#ifndef QT_NO_LIBRARY
+
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
+ (QGenericPluginFactoryInterface_iid,
+ QLatin1String("/generic"), Qt::CaseInsensitive))
+
+#endif //QT_NO_LIBRARY
+#endif //QT_MAKEDLL
+
+/*!
+ \class QGenericPluginFactory
+ \ingroup qpa
+
+ \brief The QGenericPluginFactory class creates window-system
+ related plugin drivers in Qt QPA.
+
+ Note that this class is only available in \l{Qt QPA}.
+
+
+ \sa QGenericPlugin
+*/
+
+/*!
+ Creates the driver specified by \a key, using the given \a specification.
+
+ Note that the keys are case-insensitive.
+
+ \sa keys()
+*/
+QObject *QGenericPluginFactory::create(const QString& key, const QString &specification)
+{
+ QString driver = key.toLower();
+
+#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL)
+#ifndef QT_NO_LIBRARY
+ if (QGenericPluginFactoryInterface *factory = qobject_cast<QGenericPluginFactoryInterface*>(loader()->instance(driver)))
+ return factory->create(driver, specification);
+#endif
+#endif
+ return 0;
+}
+
+/*!
+ Returns the list of valid keys, i.e. the available mouse drivers.
+
+ \sa create()
+*/
+QStringList QGenericPluginFactory::keys()
+{
+ QStringList list;
+
+#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL)
+#ifndef QT_NO_LIBRARY
+ QStringList plugins = loader()->keys();
+ for (int i = 0; i < plugins.size(); ++i) {
+ if (!list.contains(plugins.at(i)))
+ list += plugins.at(i);
+ }
+#endif //QT_NO_LIBRARY
+#endif //QT_MAKEDLL
+ return list;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.h b/src/gui/kernel/qgenericpluginfactory_qpa.h
new file mode 100644
index 0000000..59eac38
--- /dev/null
+++ b/src/gui/kernel/qgenericpluginfactory_qpa.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGENERICPLUGINFACTORY_QPA_H
+#define QGENERICPLUGINFACTORY_QPA_H
+
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QString;
+class QObject;
+
+class Q_GUI_EXPORT QGenericPluginFactory
+{
+public:
+ static QStringList keys();
+ static QObject *create(const QString&, const QString &);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QGENERICPLUGINFACTORY_QPA_H
diff --git a/src/gui/kernel/qgesture.cpp b/src/gui/kernel/qgesture.cpp
index 5725a22..e3339c4 100644
--- a/src/gui/kernel/qgesture.cpp
+++ b/src/gui/kernel/qgesture.cpp
@@ -260,6 +260,27 @@ QGesture::GestureCancelPolicy QGesture::gestureCancelPolicy() const
/*!
\property QPanGesture::acceleration
+ \brief the acceleration in the motion of the touch point for this gesture
+*/
+
+/*!
+ \property QPanGesture::horizontalVelocity
+ \brief the horizontal component of the motion of the touch point for this
+ gesture
+ \since 4.7.1
+ \internal
+
+ \sa verticalVelocity, acceleration
+*/
+
+/*!
+ \property QPanGesture::verticalVelocity
+ \brief the vertical component of the motion of the touch point for this
+ gesture
+ \since 4.7.1
+ \internal
+
+ \sa horizontalVelocity, acceleration
*/
/*!
@@ -633,6 +654,12 @@ void QPinchGesture::setRotationAngle(qreal value)
*/
/*!
+ \property QSwipeGesture::velocity
+ \since 4.7.1
+ \internal
+*/
+
+/*!
\internal
*/
QSwipeGesture::QSwipeGesture(QObject *parent)
diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp
index 8dd2db7..930ca10 100644
--- a/src/gui/kernel/qgesturemanager.cpp
+++ b/src/gui/kernel/qgesturemanager.cpp
@@ -171,9 +171,13 @@ void QGestureManager::cleanupCachedGestures(QObject *target, Qt::GestureType typ
foreach (QGesture *g, gestures) {
m_deletedRecognizers.remove(g);
m_gestureToRecognizer.remove(g);
+ m_maybeGestures.remove(g);
+ m_activeGestures.remove(g);
+ m_gestureOwners.remove(g);
+ m_gestureTargets.remove(g);
+ m_gesturesToDelete.insert(g);
}
- qDeleteAll(gestures);
iter = m_objectGestures.erase(iter);
} else {
++iter;
@@ -382,6 +386,11 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
recycle(gesture);
m_gestureTargets.remove(gesture);
}
+
+ //Clean up the Gestures
+ qDeleteAll(m_gesturesToDelete);
+ m_gesturesToDelete.clear();
+
return consumeEventHint;
}
@@ -444,7 +453,8 @@ void QGestureManager::cancelGesturesForChildren(QGesture *original)
void QGestureManager::cleanupGesturesForRemovedRecognizer(QGesture *gesture)
{
QGestureRecognizer *recognizer = m_deletedRecognizers.value(gesture);
- Q_ASSERT(recognizer);
+ if(!recognizer) //The Gesture is removed while in the even loop, so the recognizers for this gestures was removed
+ return;
m_deletedRecognizers.remove(gesture);
if (m_deletedRecognizers.keys(recognizer).isEmpty()) {
// no more active gestures, cleanup!
diff --git a/src/gui/kernel/qgesturemanager_p.h b/src/gui/kernel/qgesturemanager_p.h
index 0d84b67..a5a3482 100644
--- a/src/gui/kernel/qgesturemanager_p.h
+++ b/src/gui/kernel/qgesturemanager_p.h
@@ -130,6 +130,7 @@ private:
QHash<QGestureRecognizer *, QSet<QGesture *> > m_obsoleteGestures;
QHash<QGesture *, QGestureRecognizer *> m_deletedRecognizers;
+ QSet<QGesture *> m_gesturesToDelete;
void cleanupGesturesForRemovedRecognizer(QGesture *gesture);
QGesture *getState(QObject *widget, QGestureRecognizer *recognizer,
diff --git a/src/gui/kernel/qguifunctions_wince.cpp b/src/gui/kernel/qguifunctions_wince.cpp
index 6e2ed76..572698e 100644
--- a/src/gui/kernel/qguifunctions_wince.cpp
+++ b/src/gui/kernel/qguifunctions_wince.cpp
@@ -112,6 +112,9 @@ struct AygSIPINFO
#ifndef SPI_GETSIPINFO
#define SPI_GETSIPINFO 225
#endif
+#ifndef SPI_GETPLATFORMTYPE
+#define SPI_GETPLATFORMTYPE 257
+#endif
typedef BOOL (*AygInitDialog)(AygSHINITDLGINFO*);
typedef BOOL (*AygFullScreen)(HWND, DWORD);
diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp
index 2dd251b..98b9c4a 100644
--- a/src/gui/kernel/qguiplatformplugin.cpp
+++ b/src/gui/kernel/qguiplatformplugin.cpp
@@ -152,7 +152,7 @@ QString QGuiPlatformPlugin::styleName()
return QLatin1String("Windows"); // default style for Symbian without S60
#elif defined(Q_WS_X11) && defined(Q_OS_IRIX)
return QLatin1String("SGI"); // default style for X11 on IRIX
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
return QLatin1String("Plastique"); // default style for X11 and small devices
#elif defined(Q_WS_MAC)
return QLatin1String("Macintosh"); // default style for all Mac's
diff --git a/src/gui/kernel/qkeymapper_mac.cpp b/src/gui/kernel/qkeymapper_mac.cpp
index 3dc6afc..300e5ca 100644
--- a/src/gui/kernel/qkeymapper_mac.cpp
+++ b/src/gui/kernel/qkeymapper_mac.cpp
@@ -749,7 +749,7 @@ bool QKeyMapperPrivate::translateKeyEvent(QWidget *widget, EventHandlerCallRef e
}
return false;
}
- // Once we process the key down , we dont need to send the saved event again from
+ // Once we process the key down , we don't need to send the saved event again from
// kEventTextInputUnicodeForKeyEvent, so clear it.
if (currentContext && ekind == kEventRawKeyDown) {
QMacInputContext *context = qobject_cast<QMacInputContext*>(currentContext);
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index e14a9198..b4a360a 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -1521,6 +1521,14 @@ QKeySequence &QKeySequence::operator=(const QKeySequence &other)
}
/*!
+ \fn void QKeySequence::swap(QKeySequence &other)
+ \since 4.8
+
+ Swaps key sequence \a other with this key sequence. This operation is very
+ fast and never fails.
+*/
+
+/*!
\fn bool QKeySequence::operator!=(const QKeySequence &other) const
Returns true if this key sequence is not equal to the \a other
diff --git a/src/gui/kernel/qkeysequence.h b/src/gui/kernel/qkeysequence.h
index b47873d..a2352eb 100644
--- a/src/gui/kernel/qkeysequence.h
+++ b/src/gui/kernel/qkeysequence.h
@@ -183,6 +183,7 @@ public:
inline QKeySequence &operator=(QKeySequence &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QKeySequence &other) { qSwap(d, other.d); }
bool operator==(const QKeySequence &other) const;
inline bool operator!= (const QKeySequence &other) const
{ return !(*this == other); }
diff --git a/src/gui/kernel/qmotifdnd_x11.cpp b/src/gui/kernel/qmotifdnd_x11.cpp
index 3334455..3b79129 100644
--- a/src/gui/kernel/qmotifdnd_x11.cpp
+++ b/src/gui/kernel/qmotifdnd_x11.cpp
@@ -385,7 +385,10 @@ static void DndReadSourceProperty(Display * dpy,
static void DndWriteReceiverProperty(Display * dpy, Window window,
unsigned char protocol_style)
{
- DndReceiverProp receiver_prop ;
+ DndReceiverProp receiver_prop;
+
+ // squelch potential valgrind errors about uninitialized reads
+ memset(&receiver_prop, 0, sizeof(receiver_prop));
receiver_prop.byte_order = DndByteOrder() ;
receiver_prop.protocol_version = DND_PROTOCOL_VERSION;
diff --git a/src/gui/kernel/qplatformcursor_qpa.cpp b/src/gui/kernel/qplatformcursor_qpa.cpp
new file mode 100644
index 0000000..ac557b9
--- /dev/null
+++ b/src/gui/kernel/qplatformcursor_qpa.cpp
@@ -0,0 +1,660 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qplatformcursor_qpa.h"
+
+#include <QWidget>
+#include <QPainter>
+#include <QBitmap>
+#include <QApplication>
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+QList <QWeakPointer<QPlatformCursor> > QPlatformCursorPrivate::instances;
+
+/*!
+ \class QGraphicsSystemCursor
+
+ \brief The QGraphicsSystemCursor class provides information about
+ pointer device events (movement, buttons), and requests to change
+ the currently displayed cursor.
+
+ Note that QGraphicsSystemCursor does not include any graphics for
+ display. An application that sets a QCursor may provide its own
+ graphics.
+
+ \sa QGraphicsSystemCursorImage
+*/
+
+/*!
+ \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event)
+
+ This method is called by Qt whenever a QMouseEvent is generated by the
+ underlying pointer input. \a event is a reference to the QMouseEvent in
+ question. A default do-nothing implementation is provided.
+
+ \sa QApplicationPrivate::handleMouseEvent()
+*/
+
+/*!
+ \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget)
+
+ \brief This method is called by Qt whenever the cursor graphic should be changed.
+
+ Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor.
+
+ \a widgetCursor is a pointer to the QCursor that should be displayed.
+
+ \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note
+ that this may be 0 if the current position is not occupied by a displayed widget.
+
+ \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos()
+*/
+
+/*!
+ \fn QGraphicsSystemCursor::QGraphicsSystemCursor()
+
+ \brief Constructs a QGraphicsSystemCursor
+*/
+QPlatformCursor::QPlatformCursor(QPlatformScreen *scr )
+ : screen(scr)
+{
+ QPlatformCursorPrivate::instances.append(this);
+}
+
+// End of display and pointer event handling code
+// Beginning of built-in cursor graphics
+// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp
+
+/*!
+ \class QGraphicsSystemCursorImage
+
+ \brief The QGraphicsSystemCursorImage class provides a set of graphics
+ intended to be used as cursors.
+
+ \sa QGraphicsSystemCursor
+*/
+
+static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1];
+static bool systemCursorTableInit = false;
+
+// 16 x 16
+static const uchar cur_arrow_bits[] = {
+ 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08,
+ 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22,
+ 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 };
+static const uchar mcur_arrow_bits[] = {
+ 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f,
+ 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e,
+ 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 };
+
+static const unsigned char cur_up_arrow_bits[] = {
+ 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04,
+ 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
+ 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01};
+static const unsigned char mcur_up_arrow_bits[] = {
+ 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07,
+ 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
+ 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
+
+static const unsigned char cur_cross_bits[] = {
+ 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
+ 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01,
+ 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00};
+static const unsigned char mcur_cross_bits[] = {
+ 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
+ 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
+ 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00};
+
+static const uchar cur_ibeam_bits[] = {
+ 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
+ 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00,
+ 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 };
+static const uchar mcur_ibeam_bits[] = {
+ 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
+ 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01,
+ 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 };
+
+static const uchar cur_ver_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f,
+ 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f,
+ 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 };
+static const uchar mcur_ver_bits[] = {
+ 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f,
+ 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f,
+ 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 };
+
+static const uchar cur_hor_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18,
+ 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar mcur_hor_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c,
+ 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c,
+ 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 };
+static const uchar cur_bdiag_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e,
+ 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00,
+ 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar mcur_bdiag_bits[] = {
+ 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f,
+ 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01,
+ 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 };
+static const uchar cur_fdiag_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00,
+ 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c,
+ 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 };
+static const uchar mcur_fdiag_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00,
+ 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e,
+ 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 };
+
+// 20 x 20
+static const uchar forbidden_bits[] = {
+ 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01,
+ 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06,
+ 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03,
+ 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 };
+
+static const uchar forbiddenm_bits[] = {
+ 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03,
+ 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f,
+ 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07,
+ 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00};
+
+// 32 x 32
+static const uchar wait_data_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
+ 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00,
+ 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00,
+ 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00,
+ 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00,
+ 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00,
+ 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar wait_mask_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00,
+ 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
+ 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
+ 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00,
+ 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00,
+ 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00,
+ 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00,
+ 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static const uchar hsplit_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
+ 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
+ 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03,
+ 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00,
+ 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,
+ 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar hsplitm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00,
+ 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07,
+ 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00,
+ 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00,
+ 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar vsplit_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar vsplitm_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
+ 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
+ 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00,
+ 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00,
+ 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar phand_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
+ 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00,
+ 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00,
+ 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00,
+ 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar phandm_bits[] = {
+ 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00,
+ 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00,
+ 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00,
+ 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00,
+ 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static const uchar size_all_data_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00,
+ 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+static const uchar size_all_mask_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00,
+ 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00,
+ 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01,
+ 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00,
+ 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00,
+ 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00,
+ 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static const uchar whatsthis_bits[] = {
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00,
+ 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00,
+ 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00,
+ 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00,
+ 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00,
+ 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00,
+ 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
+static const uchar whatsthism_bits[] = {
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00,
+ 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00,
+ 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00,
+ 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00,
+ 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00,
+ 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00,
+ 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
+
+static const uchar busy_bits[] = {
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+ 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00,
+ 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00,
+ 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00,
+ 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00,
+ 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00,
+ 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+static const uchar busym_bits[] = {
+ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
+ 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00,
+ 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00,
+ 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00,
+ 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00,
+ 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00,
+ 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+// 16 x 16
+static const uchar openhand_bits[] = {
+ 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92,
+ 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20,
+ 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00};
+static const uchar openhandm_bits[] = {
+ 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff,
+ 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f,
+ 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00};
+static const uchar closedhand_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50,
+ 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10,
+ 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00};
+static const uchar closedhandm_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f,
+ 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f,
+ 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00};
+
+void QPlatformCursorImage::createSystemCursor(int id)
+{
+ if (!systemCursorTableInit) {
+ for (int i = 0; i <= Qt::LastCursor; i++)
+ systemCursorTable[i] = 0;
+ systemCursorTableInit = true;
+ }
+ switch (id) {
+ // 16x16 cursors
+ case Qt::ArrowCursor:
+ systemCursorTable[Qt::ArrowCursor] =
+ new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0);
+ break;
+
+ case Qt::UpArrowCursor:
+ systemCursorTable[Qt::UpArrowCursor] =
+ new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0);
+ break;
+
+ case Qt::CrossCursor:
+ systemCursorTable[Qt::CrossCursor] =
+ new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::IBeamCursor:
+ systemCursorTable[Qt::IBeamCursor] =
+ new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::SizeVerCursor:
+ systemCursorTable[Qt::SizeVerCursor] =
+ new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::SizeHorCursor:
+ systemCursorTable[Qt::SizeHorCursor] =
+ new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::SizeBDiagCursor:
+ systemCursorTable[Qt::SizeBDiagCursor] =
+ new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::SizeFDiagCursor:
+ systemCursorTable[Qt::SizeFDiagCursor] =
+ new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7);
+ break;
+
+ case Qt::BlankCursor:
+ systemCursorTable[Qt::BlankCursor] =
+ new QPlatformCursorImage(0, 0, 0, 0, 0, 0);
+ break;
+
+ // 20x20 cursors
+ case Qt::ForbiddenCursor:
+ systemCursorTable[Qt::ForbiddenCursor] =
+ new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10);
+ break;
+
+ // 32x32 cursors
+ case Qt::WaitCursor:
+ systemCursorTable[Qt::WaitCursor] =
+ new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15);
+ break;
+
+ case Qt::SplitVCursor:
+ systemCursorTable[Qt::SplitVCursor] =
+ new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15);
+ break;
+
+ case Qt::SplitHCursor:
+ systemCursorTable[Qt::SplitHCursor] =
+ new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15);
+ break;
+
+ case Qt::SizeAllCursor:
+ systemCursorTable[Qt::SizeAllCursor] =
+ new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15);
+ break;
+
+ case Qt::PointingHandCursor:
+ systemCursorTable[Qt::PointingHandCursor] =
+ new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0);
+ break;
+
+ case Qt::WhatsThisCursor:
+ systemCursorTable[Qt::WhatsThisCursor] =
+ new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0);
+ break;
+ case Qt::BusyCursor:
+ systemCursorTable[Qt::BusyCursor] =
+ new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0);
+ break;
+
+ case Qt::OpenHandCursor:
+ systemCursorTable[Qt::OpenHandCursor] =
+ new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8);
+ break;
+ case Qt::ClosedHandCursor:
+ systemCursorTable[Qt::ClosedHandCursor] =
+ new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8);
+ break;
+ default:
+ qWarning("Unknown system cursor %d", id);
+ }
+}
+
+/*!
+ \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id)
+
+ \brief Calling this method sets the cursor image to the specified shape
+
+ \a id is one of the defined Qt::CursorShape values.
+
+ If id is invalid, Qt::BitmapCursor, or unknown by the implementation,
+ Qt::ArrowCursor is used instead.
+*/
+
+void QPlatformCursorImage::set(Qt::CursorShape id)
+{
+ QPlatformCursorImage *cursor = 0;
+ if (id >= 0 && id <= Qt::LastCursor) {
+ if (!systemCursorTable[id])
+ createSystemCursor(id);
+ cursor = systemCursorTable[id];
+ }
+
+ if (cursor == 0) {
+ if (!systemCursorTable[Qt::ArrowCursor])
+ createSystemCursor(Qt::ArrowCursor);
+ cursor = systemCursorTable[Qt::ArrowCursor];
+ }
+ cursorImage = cursor->cursorImage;
+ hot = cursor->hot;
+}
+
+/*!
+ \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy)
+
+ \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy)
+
+ \a image A pointer to a QImage
+
+ \a hx The x coordinate of the cursor's hotspot
+
+ \a hy the y coordinate of the cursor's hotspot
+*/
+
+void QPlatformCursorImage::set(const QImage &image, int hx, int hy)
+{
+ hot.setX(hx);
+ hot.setY(hy);
+ cursorImage = image;
+}
+
+/*!
+ \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy)
+
+ \brief set the cursor image to the graphic represented by the combination of data, mask,
+ width, and height
+
+ \a data The pixel data of the graphic
+
+ \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn
+
+ \a width The width of the graphic in pixels
+
+ \a height The height of the graphic in pixels
+
+ \a hx The X hotspot of the cursor graphic
+
+ \a hy The Y hotspot of the cursor graphic
+*/
+void QPlatformCursorImage::set(const uchar *data, const uchar *mask,
+ int width, int height, int hx, int hy)
+{
+ hot.setX(hx);
+ hot.setY(hy);
+
+ cursorImage = QImage(width,height, QImage::Format_Indexed8);
+
+ if (!width || !height || !data || !mask || cursorImage.isNull())
+ return;
+
+ cursorImage.setNumColors(3);
+ cursorImage.setColor(0, 0xff000000);
+ cursorImage.setColor(1, 0xffffffff);
+ cursorImage.setColor(2, 0x00000000);
+
+ int bytesPerLine = (width + 7) / 8;
+ int p = 0;
+ int d, m;
+
+ int x = -1, w = 0;
+
+ uchar *cursor_data = cursorImage.bits();
+ int bpl = cursorImage.bytesPerLine();
+ for (int i = 0; i < height; i++)
+ {
+ for (int j = 0; j < bytesPerLine; j++, data++, mask++)
+ {
+ for (int b = 0; b < 8 && j*8+b < width; b++)
+ {
+ d = *data & (1 << b);
+ m = *mask & (1 << b);
+ if (d && m) p = 0;
+ else if (!d && m) p = 1;
+ else p = 2;
+ cursor_data[j*8+b] = p;
+
+ // calc region
+ if (x < 0 && m)
+ x = j*8+b;
+ else if (x >= 0 && !m) {
+ x = -1;
+ w = 0;
+ }
+ if (m)
+ w++;
+ }
+ }
+ if (x >= 0) {
+ x = -1;
+ w = 0;
+ }
+ cursor_data += bpl;
+ }
+
+}
+
+/*!
+ \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY)
+
+ \brief set the cursor image to the graphic represented by the combination of data, mask,
+ width, and height
+
+ \a data The pixel data of the graphic
+
+ \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn
+
+ \a width The width of the graphic in pixels
+
+ \a height The height of the graphic in pixels
+
+ \a hotX The X hotspot of the cursor graphic
+
+ \a hotY The Y hotspot of the cursor graphic
+
+ \sa set
+*/
+
+/*!
+ \fn QImage *QGraphicsSystemCursorImage::image()
+
+ \brief Return the cursor graphic as a pointer to a QImage
+*/
+
+/*!
+ \fn QPoint QGraphicsSystemCursorImage::hotspot()
+
+ \brief Return the cursor's hotspot
+*/
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformcursor_qpa.h b/src/gui/kernel/qplatformcursor_qpa.h
new file mode 100644
index 0000000..71d0e87
--- /dev/null
+++ b/src/gui/kernel/qplatformcursor_qpa.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGRAPHICSSYSTEMCURSOR_H
+#define QGRAPHICSSYSTEMCURSOR_H
+
+#include <QtCore/QList>
+#include <QtGui/QImage>
+#include <QtGui/QMouseEvent>
+#include <QtCore/QWeakPointer>
+#include <QtCore/QObject>
+#include <QtGui/QPlatformScreen>
+#include <QtGui/QCursor>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+// Cursor graphics management
+class Q_GUI_EXPORT QPlatformCursorImage {
+public:
+ QPlatformCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY)
+ { set(data, mask, width, height, hotX, hotY); }
+ QImage * image() { return &cursorImage; }
+ QPoint hotspot() { return hot; }
+ void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY);
+ void set(const QImage &image, int hx, int hy);
+ void set(Qt::CursorShape);
+private:
+ static void createSystemCursor(int id);
+ QImage cursorImage;
+ QPoint hot;
+};
+
+class QPlatformCursor;
+
+class QPlatformCursorPrivate {
+public:
+ static QList<QWeakPointer<QPlatformCursor> > getInstances() { return instances; }
+ static QList<QWeakPointer<QPlatformCursor> > instances;
+};
+
+class Q_GUI_EXPORT QPlatformCursor : public QObject {
+public:
+ QPlatformCursor(QPlatformScreen *);
+
+ // input methods
+ virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); }
+ virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0;
+
+protected:
+ QPlatformScreen* screen; // Where to request an update
+
+private:
+ Q_DECLARE_PRIVATE(QPlatformCursor);
+ friend void qt_qpa_set_cursor(QWidget * w, bool force);
+ friend class QApplicationPrivate;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QGRAPHICSSYSTEMCURSOR_H
diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp
new file mode 100644
index 0000000..8bdba5e
--- /dev/null
+++ b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.h b/src/gui/kernel/qplatformeventloopintegration_qpa.h
new file mode 100644
index 0000000..a06fecf
--- /dev/null
+++ b/src/gui/kernel/qplatformeventloopintegration_qpa.h
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMEVENTLOOPINTEGRATION_QPA_H
+#define QPLATFORMEVENTLOOPINTEGRATION_QPA_H
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformEventLoopIntegration
+{
+public:
+ virtual void processEvents( qint64 msec ) = 0;
+ virtual void wakeup() = 0;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMEVENTLOOPINTEGRATION_QPA_H
diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp
new file mode 100644
index 0000000..36db2b0
--- /dev/null
+++ b/src/gui/kernel/qplatformglcontext_qpa.cpp
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtOpenGL module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformglcontext_qpa.h"
+
+QPlatformGLContext::~QPlatformGLContext()
+{ }
+
+static QPlatformGLContext *staticSharedContext = 0;
+
+void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext)
+{
+ staticSharedContext = sharedContext;
+}
+
+QPlatformGLContext *QPlatformGLContext::defaultSharedContext()
+{
+ return staticSharedContext;
+}
diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h
new file mode 100644
index 0000000..ed41723
--- /dev/null
+++ b/src/gui/kernel/qplatformglcontext_qpa.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtOpenGL module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORM_GL_CONTEXT_H
+#define QPLATFORM_GL_CONTEXT_H
+
+#include <QtCore/qnamespace.h>
+#include <QtGui/QPlatformWindowFormat>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class Q_OPENGL_EXPORT QPlatformGLContext
+{
+public:
+ virtual ~QPlatformGLContext();
+
+ virtual void makeCurrent() = 0;
+ virtual void doneCurrent() = 0;
+ virtual void swapBuffers() = 0;
+ virtual void* getProcAddress(const QString& procName) = 0;
+
+ virtual QPlatformWindowFormat platformWindowFormat() const = 0;
+
+ static QPlatformGLContext *defaultSharedContext();
+
+protected:
+
+ static void setDefaultSharedContext(QPlatformGLContext *sharedContext);
+
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+
+#endif // QPLATFORM_GL_INTEGRATION_P_H
diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp
new file mode 100644
index 0000000..e2a493d
--- /dev/null
+++ b/src/gui/kernel/qplatformintegration_qpa.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformintegration_qpa.h"
+
+#include <QtGui/QPlatformFontDatabase>
+
+QT_BEGIN_NAMESPACE
+
+QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const
+{
+ Q_UNUSED(window);
+ Q_UNUSED(x);
+ Q_UNUSED(y);
+ Q_UNUSED(width);
+ Q_UNUSED(height);
+ return QPixmap();
+}
+
+QPlatformEventLoopIntegration *QPlatformIntegration::createEventLoopIntegration() const
+{
+ return 0;
+}
+
+bool QPlatformIntegration::hasOpenGL() const
+{
+ return false;
+}
+
+QPlatformFontDatabase *QPlatformIntegration::fontDatabase() const
+{
+ static QPlatformFontDatabase *db = 0;
+ if (!db) {
+ db = new QPlatformFontDatabase;
+ }
+ return db;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h
new file mode 100644
index 0000000..b1f4e5f
--- /dev/null
+++ b/src/gui/kernel/qplatformintegration_qpa.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMINTEGRATION_H
+#define QPLATFORMINTEGRATION_H
+
+#include <QtGui/qwindowdefs.h>
+#include <QtGui/private/qwindowsurface_p.h>
+#include <QtGui/private/qpixmapdata_p.h>
+#include <QtGui/qplatformscreen_qpa.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformWindow;
+class QWindowSurface;
+class QBlittable;
+class QWidget;
+class QPlatformEventLoopIntegration;
+class QPlatformFontDatabase;
+
+class Q_GUI_EXPORT QPlatformIntegration
+{
+public:
+ virtual ~QPlatformIntegration() { }
+
+// GraphicsSystem functions
+ virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0;
+ virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0;
+ virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0;
+ virtual void moveToScreen(QWidget *window, int screen) {Q_UNUSED(window); Q_UNUSED(screen);}
+
+// Window System functions
+ virtual QList<QPlatformScreen *> screens() const = 0;
+ virtual bool isVirtualDesktop() { return false; }
+ virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const;
+
+//Fontdatabase integration.
+ virtual QPlatformFontDatabase *fontDatabase() const;
+
+// Experimental in mainthread eventloop integration
+// This should only be used if it is only possible to do window system event processing in
+// the gui thread. All of the functions in QWindowSystemInterface are thread safe.
+ virtual QPlatformEventLoopIntegration *createEventLoopIntegration() const;
+
+//jl:XXX should it be hasGLContext and do we need it at all?
+ virtual bool hasOpenGL() const;
+
+
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMINTEGRATION_H
diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp
new file mode 100644
index 0000000..9122e1a
--- /dev/null
+++ b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformintegrationfactory_qpa_p.h"
+#include <QPlatformIntegrationPlugin>
+#include "private/qfactoryloader_p.h"
+#include "qmutex.h"
+
+#include "qapplication.h"
+#include "qdebug.h"
+
+QT_BEGIN_NAMESPACE
+
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
+ (QPlatformIntegrationFactoryInterface_iid, QLatin1String("/platforms"), Qt::CaseInsensitive))
+#endif
+
+QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key)
+{
+ QPlatformIntegration *ret = 0;
+ QStringList paramList = key.split(QLatin1Char(':'));
+ QString platform = paramList.takeFirst().toLower();
+
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+ if (QPlatformIntegrationFactoryInterface *factory = qobject_cast<QPlatformIntegrationFactoryInterface*>(loader()->instance(platform)))
+ ret = factory->create(platform, paramList);
+#endif
+
+ return ret;
+}
+
+/*!
+ Returns the list of valid keys, i.e. the keys this factory can
+ create styles for.
+
+ \sa create()
+*/
+QStringList QPlatformIntegrationFactory::keys()
+{
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+ QStringList list = loader()->keys();
+#else
+ QStringList list;
+#endif
+ return list;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa_p.h b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h
new file mode 100644
index 0000000..ba02d2c
--- /dev/null
+++ b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMINTEGRATIONFACTORY_H
+#define QPLATFORMINTEGRATIONFACTORY_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformIntegration;
+
+class QPlatformIntegrationFactory
+{
+public:
+ static QStringList keys();
+ static QPlatformIntegration *create(const QString&);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMINTEGRATIONFACTORY_H
+
diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.cpp b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp
new file mode 100644
index 0000000..3bf2474
--- /dev/null
+++ b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformintegrationplugin_qpa.h"
+
+QT_BEGIN_NAMESPACE
+
+QPlatformIntegrationPlugin::QPlatformIntegrationPlugin(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QPlatformIntegrationPlugin::~QPlatformIntegrationPlugin()
+{
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.h b/src/gui/kernel/qplatformintegrationplugin_qpa.h
new file mode 100644
index 0000000..9c37cf7
--- /dev/null
+++ b/src/gui/kernel/qplatformintegrationplugin_qpa.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMINTEGRATIONPLUGIN_H
+#define QPLATFORMINTEGRATIONPLUGIN_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformIntegration;
+
+struct QPlatformIntegrationFactoryInterface : public QFactoryInterface
+{
+ virtual QPlatformIntegration *create(const QString &key, const QStringList &paramList) = 0;
+};
+
+#define QPlatformIntegrationFactoryInterface_iid "com.nokia.Qt.QPlatformIntegrationFactoryInterface"
+
+Q_DECLARE_INTERFACE(QPlatformIntegrationFactoryInterface, QPlatformIntegrationFactoryInterface_iid)
+
+class Q_GUI_EXPORT QPlatformIntegrationPlugin : public QObject, public QPlatformIntegrationFactoryInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(QPlatformIntegrationFactoryInterface:QFactoryInterface)
+public:
+ explicit QPlatformIntegrationPlugin(QObject *parent = 0);
+ ~QPlatformIntegrationPlugin();
+
+ virtual QStringList keys() const = 0;
+ virtual QPlatformIntegration *create(const QString &key, const QStringList &paramList) = 0;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMINTEGRATIONPLUGIN_H
diff --git a/src/gui/kernel/qplatformscreen_qpa.cpp b/src/gui/kernel/qplatformscreen_qpa.cpp
new file mode 100644
index 0000000..478d2d6
--- /dev/null
+++ b/src/gui/kernel/qplatformscreen_qpa.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformscreen_qpa.h"
+#include <QtGui/qapplication.h>
+#include <QtGui/qdesktopwidget.h>
+
+QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const
+{
+ QWidgetList list = QApplication::topLevelWidgets();
+ for (int i = list.size()-1; i >= 0; --i) {
+ QWidget *w = list[i];
+ //### mask is ignored
+ if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos))
+ return w;
+ }
+
+ return 0;
+}
+
+QSize QPlatformScreen::physicalSize() const
+{
+ static const int dpi = 100;
+ int width = geometry().width() / dpi * qreal(25.4) ;
+ int height = geometry().height() / dpi * qreal(25.4) ;
+ return QSize(width,height);
+}
+
diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h
new file mode 100644
index 0000000..1704f0f
--- /dev/null
+++ b/src/gui/kernel/qplatformscreen_qpa.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMSCREEN_H
+#define QPLATFORMSCREEN_H
+
+#include <QtCore/qmetatype.h>
+#include <QtCore/qnamespace.h>
+#include <QtCore/qcoreevent.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qobject.h>
+
+#include <QtGui/qcursor.h>
+#include <QtGui/qimage.h>
+#include <QtGui/qwidget.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class Q_GUI_EXPORT QPlatformScreen : public QObject
+{
+ Q_OBJECT
+public:
+ virtual ~QPlatformScreen() { }
+
+ virtual QRect geometry() const = 0;
+ virtual QRect availableGeometry() const {return geometry();}
+ virtual int depth() const = 0;
+ virtual QImage::Format format() const = 0;
+ virtual QSize physicalSize() const;
+ virtual void setDirty(const QRect &) {}
+ virtual QWidget *topLevelAt(const QPoint &point) const;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMSCREEN_H
diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp
new file mode 100644
index 0000000..9d722d8
--- /dev/null
+++ b/src/gui/kernel/qplatformwindow_qpa.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformwindow_qpa.h"
+
+#include <QtGui/qwidget.h>
+
+class QPlatformWindowPrivate
+{
+ QWidget *tlw;
+ QRect rect;
+ Qt::WindowFlags flags;
+ friend class QPlatformWindow;
+};
+
+QPlatformWindow::QPlatformWindow(QWidget *tlw)
+ : d_ptr(new QPlatformWindowPrivate)
+{
+ Q_D(QPlatformWindow);
+ d->tlw = tlw;
+ tlw->setPlatformWindow(this);
+}
+
+QPlatformWindow::~QPlatformWindow()
+{
+}
+
+QWidget *QPlatformWindow::widget() const
+{
+ Q_D(const QPlatformWindow);
+ return d->tlw;
+}
+
+void QPlatformWindow::setGeometry(const QRect &rect)
+{
+ Q_D(QPlatformWindow);
+ d->rect = rect;
+}
+
+QRect QPlatformWindow::geometry() const
+{
+ Q_D(const QPlatformWindow);
+ return d->rect;
+}
+
+/*!
+Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false.
+*/
+void QPlatformWindow::setVisible(bool visible)
+{
+ Q_UNUSED(visible);
+}
+/*!
+Requests setting the window flags of this surface to \a type. Returns the actual flags set.
+*/
+Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags)
+{
+ Q_D(QPlatformWindow);
+ d->flags = flags;
+ return flags;
+}
+
+/*!
+ Returns the effective window flags for this surface.
+*/
+Qt::WindowFlags QPlatformWindow::windowFlags() const
+{
+ Q_D(const QPlatformWindow);
+ return d->flags;
+}
+
+WId QPlatformWindow::winId() const { return WId(0); }
+
+void QPlatformWindow::setParent(const QPlatformWindow *) { qWarning("This plugin does not support setParent!"); }
+
+void QPlatformWindow::setWindowTitle(const QString &) {}
+
+void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); }
+
+void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); }
+
+void QPlatformWindow::setOpacity(qreal level)
+{
+ Q_UNUSED(level);
+ qWarning("This plugin does not support setting window opacity");
+}
+
+QPlatformGLContext *QPlatformWindow::glContext() const
+{
+ return 0;
+}
diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h
new file mode 100644
index 0000000..6dfba05
--- /dev/null
+++ b/src/gui/kernel/qplatformwindow_qpa.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QPLATFORMWINDOW_H
+#define QPLATFORMWINDOW_H
+
+
+#include <QtCore/qscopedpointer.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qstring.h>
+#include <QtGui/qwindowdefs.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformWindowPrivate;
+class QWidget;
+class QPlatformGLContext;
+
+class Q_GUI_EXPORT QPlatformWindow
+{
+ Q_DECLARE_PRIVATE(QPlatformWindow);
+public:
+ QPlatformWindow(QWidget *tlw);
+ virtual ~QPlatformWindow();
+
+ QWidget *widget() const;
+ virtual void setGeometry(const QRect &rect);
+ virtual QRect geometry() const;
+
+ virtual void setVisible(bool visible);
+ virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags);
+ virtual Qt::WindowFlags windowFlags() const;
+ virtual WId winId() const;
+ virtual void setParent(const QPlatformWindow *window);
+
+ virtual void setWindowTitle(const QString &);
+ virtual void raise();
+ virtual void lower();
+
+ virtual void setOpacity(qreal level);
+
+ virtual QPlatformGLContext *glContext() const;
+protected:
+ QScopedPointer<QPlatformWindowPrivate> d_ptr;
+private:
+ Q_DISABLE_COPY(QPlatformWindow);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+#endif //QPLATFORMWINDOW_H
diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp
new file mode 100644
index 0000000..d497e85
--- /dev/null
+++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp
@@ -0,0 +1,1012 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformwindowformat_qpa.h"
+
+#include <QtCore/QDebug>
+
+Q_GLOBAL_STATIC(QPlatformWindowFormat, q_platformwindow_default_format);
+
+class QPlatformWindowFormatPrivate
+{
+public:
+ QPlatformWindowFormatPrivate()
+ : ref(1)
+ , opts(QPlatformWindowFormat::DoubleBuffer | QPlatformWindowFormat::DepthBuffer
+ | QPlatformWindowFormat::Rgba | QPlatformWindowFormat::DirectRendering
+ | QPlatformWindowFormat::StencilBuffer | QPlatformWindowFormat::DeprecatedFunctions
+ | QPlatformWindowFormat::UseDefaultSharedContext)
+ , depthSize(-1)
+ , accumSize(-1)
+ , stencilSize(-1)
+ , redSize(-1)
+ , greenSize(-1)
+ , blueSize(-1)
+ , alphaSize(-1)
+ , numSamples(-1)
+ , swapInterval(-1)
+ , windowApi(QPlatformWindowFormat::Raster)
+ , sharedContext(0)
+ {
+ }
+
+ QPlatformWindowFormatPrivate(const QPlatformWindowFormatPrivate *other)
+ : ref(1),
+ opts(other->opts),
+ depthSize(other->depthSize),
+ accumSize(other->accumSize),
+ stencilSize(other->stencilSize),
+ redSize(other->redSize),
+ greenSize(other->greenSize),
+ blueSize(other->blueSize),
+ alphaSize(other->alphaSize),
+ numSamples(other->numSamples),
+ swapInterval(other->swapInterval),
+ windowApi(other->windowApi),
+ sharedContext(other->sharedContext)
+ {
+ }
+ QAtomicInt ref;
+ QPlatformWindowFormat::FormatOptions opts;
+ int depthSize;
+ int accumSize;
+ int stencilSize;
+ int redSize;
+ int greenSize;
+ int blueSize;
+ int alphaSize;
+ int numSamples;
+ int swapInterval;
+ QPlatformWindowFormat::WindowApi windowApi;
+ QPlatformGLContext *sharedContext;
+};
+
+/*!
+ \class QPlatformWindowFormat
+ \brief The QPlatformWindowFormat class specifies the display format of an OpenGL
+ rendering context.
+
+ \ingroup painting-3D
+
+ A display format has several characteristics:
+ \list
+ \i \link setDoubleBuffer() Double or single buffering.\endlink
+ \i \link setDepth() Depth buffer.\endlink
+ \i \link setRgba() RGBA or color index mode.\endlink
+ \i \link setAlpha() Alpha channel.\endlink
+ \i \link setAccum() Accumulation buffer.\endlink
+ \i \link setStencil() Stencil buffer.\endlink
+ \i \link setStereo() Stereo buffers.\endlink
+ \i \link setDirectRendering() Direct rendering.\endlink
+ \i \link setOverlay() Presence of an overlay.\endlink
+ \i \link setPlane() Plane of an overlay.\endlink
+ \i \link setSampleBuffers() Multisample buffers.\endlink
+ \endlist
+
+ You can also specify preferred bit depths for the color buffer,
+ depth buffer, alpha buffer, accumulation buffer and the stencil
+ buffer with the functions: setRedBufferSize(), setGreenBufferSize(),
+ setBlueBufferSize(), setDepthBufferSize(), setAlphaBufferSize(),
+ setAccumBufferSize() and setStencilBufferSize().
+
+ Note that even if you specify that you prefer a 32 bit depth
+ buffer (e.g. with setDepthBufferSize(32)), the format that is
+ chosen may not have a 32 bit depth buffer, even if there is a
+ format available with a 32 bit depth buffer. The main reason for
+ this is how the system dependant picking algorithms work on the
+ different platforms, and some format options may have higher
+ precedence than others.
+
+ You create and tell a QPlatformWindowFormat object what rendering options you
+ want from an OpenGL rendering context.
+
+ OpenGL drivers or accelerated hardware may or may not support
+ advanced features such as alpha channel or stereographic viewing.
+ If you request some features that the driver/hardware does not
+ provide when you create a QGLWidget, you will get a rendering
+ context with the nearest subset of features.
+
+ There are different ways to define the display characteristics of
+ a rendering context. One is to create a QPlatformWindowFormat and make it the
+ default for the entire application:
+ \snippet doc/src/snippets/code/src_opengl_qgl.cpp 0
+
+ Or you can specify the desired format when creating an object of
+ your QGLWidget subclass:
+ \snippet doc/src/snippets/code/src_opengl_qgl.cpp 1
+
+ After the widget has been created, you can find out which of the
+ requested features the system was able to provide:
+ \snippet doc/src/snippets/code/src_opengl_qgl.cpp 2
+
+ \legalese
+ OpenGL is a trademark of Silicon Graphics, Inc. in the
+ United States and other countries.
+ \endlegalese
+
+ \sa QGLContext, QGLWidget
+*/
+
+/*!
+ Constructs a QPlatformWindowFormat object with the following default settings:
+ \list
+ \i \link setDoubleBuffer() Double buffer:\endlink Enabled.
+ \i \link setDepth() Depth buffer:\endlink Enabled.
+ \i \link setRgba() RGBA:\endlink Enabled (i.e., color index disabled).
+ \i \link setAlpha() Alpha channel:\endlink Disabled.
+ \i \link setAccum() Accumulator buffer:\endlink Disabled.
+ \i \link setStencil() Stencil buffer:\endlink Enabled.
+ \i \link setStereo() Stereo:\endlink Disabled.
+ \i \link setDirectRendering() Direct rendering:\endlink Enabled.
+ \i \link setOverlay() Overlay:\endlink Disabled.
+ \i \link setPlane() Plane:\endlink 0 (i.e., normal plane).
+ \i \link setSampleBuffers() Multisample buffers:\endlink Disabled.
+ \endlist
+*/
+
+QPlatformWindowFormat::QPlatformWindowFormat()
+{
+ d = new QPlatformWindowFormatPrivate;
+}
+
+
+/*!
+ Creates a QPlatformWindowFormat object that is a copy of the current
+ defaultFormat().
+
+ If \a options is not 0, the default format is modified by the
+ specified format options. The \a options parameter should be
+ QGL::FormatOption values OR'ed together.
+
+ This constructor makes it easy to specify a certain desired format
+ in classes derived from QGLWidget, for example:
+ \snippet doc/src/snippets/code/src_opengl_qgl.cpp 3
+
+ Note that there are QGL::FormatOption values to turn format settings
+ both on and off, e.g. QGL::DepthBuffer and QGL::NoDepthBuffer,
+ QGL::DirectRendering and QGL::IndirectRendering, etc.
+
+ The \a plane parameter defaults to 0 and is the plane which this
+ format should be associated with. Not all OpenGL implementations
+ supports overlay/underlay rendering planes.
+
+ \sa defaultFormat(), setOption(), setPlane()
+*/
+
+QPlatformWindowFormat::QPlatformWindowFormat(QPlatformWindowFormat::FormatOptions options)
+{
+ d = new QPlatformWindowFormatPrivate;
+ QPlatformWindowFormat::FormatOptions newOpts = options;
+ d->opts = defaultFormat().d->opts;
+ d->opts |= (newOpts & 0xffff);
+ d->opts &= ~(newOpts >> 16);
+}
+
+/*!
+ \internal
+*/
+void QPlatformWindowFormat::detach()
+{
+ if (d->ref != 1) {
+ QPlatformWindowFormatPrivate *newd = new QPlatformWindowFormatPrivate(d);
+ if (!d->ref.deref())
+ delete d;
+ d = newd;
+ }
+}
+
+/*!
+ Constructs a copy of \a other.
+*/
+
+QPlatformWindowFormat::QPlatformWindowFormat(const QPlatformWindowFormat &other)
+{
+ d = other.d;
+ d->ref.ref();
+}
+
+/*!
+ Assigns \a other to this object.
+*/
+
+QPlatformWindowFormat &QPlatformWindowFormat::operator=(const QPlatformWindowFormat &other)
+{
+ if (d != other.d) {
+ other.d->ref.ref();
+ if (!d->ref.deref())
+ delete d;
+ d = other.d;
+ }
+ return *this;
+}
+
+/*!
+ Destroys the QPlatformWindowFormat.
+*/
+QPlatformWindowFormat::~QPlatformWindowFormat()
+{
+ if (!d->ref.deref())
+ delete d;
+}
+
+/*!
+ \fn bool QPlatformWindowFormat::doubleBuffer() const
+
+ Returns true if double buffering is enabled; otherwise returns
+ false. Double buffering is enabled by default.
+
+ \sa setDoubleBuffer()
+*/
+
+/*!
+ If \a enable is true sets double buffering; otherwise sets single
+ buffering.
+
+ Double buffering is enabled by default.
+
+ Double buffering is a technique where graphics are rendered on an
+ off-screen buffer and not directly to the screen. When the drawing
+ has been completed, the program calls a swapBuffers() function to
+ exchange the screen contents with the buffer. The result is
+ flicker-free drawing and often better performance.
+
+ \sa doubleBuffer(), QGLContext::swapBuffers(),
+ QGLWidget::swapBuffers()
+*/
+
+void QPlatformWindowFormat::setDoubleBuffer(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::DoubleBuffer : QPlatformWindowFormat::SingleBuffer);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::depth() const
+
+ Returns true if the depth buffer is enabled; otherwise returns
+ false. The depth buffer is enabled by default.
+
+ \sa setDepth(), setDepthBufferSize()
+*/
+
+/*!
+ If \a enable is true enables the depth buffer; otherwise disables
+ the depth buffer.
+
+ The depth buffer is enabled by default.
+
+ The purpose of a depth buffer (or Z-buffering) is to remove hidden
+ surfaces. Pixels are assigned Z values based on the distance to
+ the viewer. A pixel with a high Z value is closer to the viewer
+ than a pixel with a low Z value. This information is used to
+ decide whether to draw a pixel or not.
+
+ \sa depth(), setDepthBufferSize()
+*/
+
+void QPlatformWindowFormat::setDepth(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::DepthBuffer : QPlatformWindowFormat::NoDepthBuffer);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::rgba() const
+
+ Returns true if RGBA color mode is set. Returns false if color
+ index mode is set. The default color mode is RGBA.
+
+ \sa setRgba()
+*/
+
+/*!
+ If \a enable is true sets RGBA mode. If \a enable is false sets
+ color index mode.
+
+ The default color mode is RGBA.
+
+ RGBA is the preferred mode for most OpenGL applications. In RGBA
+ color mode you specify colors as red + green + blue + alpha
+ quadruplets.
+
+ In color index mode you specify an index into a color lookup
+ table.
+
+ \sa rgba()
+*/
+
+void QPlatformWindowFormat::setRgba(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::Rgba : QPlatformWindowFormat::ColorIndex);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::alpha() const
+
+ Returns true if the alpha buffer in the framebuffer is enabled;
+ otherwise returns false. The alpha buffer is disabled by default.
+
+ \sa setAlpha(), setAlphaBufferSize()
+*/
+
+/*!
+ If \a enable is true enables the alpha buffer; otherwise disables
+ the alpha buffer.
+
+ The alpha buffer is disabled by default.
+
+ The alpha buffer is typically used for implementing transparency
+ or translucency. The A in RGBA specifies the transparency of a
+ pixel.
+
+ \sa alpha(), setAlphaBufferSize()
+*/
+
+void QPlatformWindowFormat::setAlpha(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::AlphaChannel : QPlatformWindowFormat::NoAlphaChannel);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::accum() const
+
+ Returns true if the accumulation buffer is enabled; otherwise
+ returns false. The accumulation buffer is disabled by default.
+
+ \sa setAccum(), setAccumBufferSize()
+*/
+
+/*!
+ If \a enable is true enables the accumulation buffer; otherwise
+ disables the accumulation buffer.
+
+ The accumulation buffer is disabled by default.
+
+ The accumulation buffer is used to create blur effects and
+ multiple exposures.
+
+ \sa accum(), setAccumBufferSize()
+*/
+
+void QPlatformWindowFormat::setAccum(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::AccumBuffer : QPlatformWindowFormat::NoAccumBuffer);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::stencil() const
+
+ Returns true if the stencil buffer is enabled; otherwise returns
+ false. The stencil buffer is enabled by default.
+
+ \sa setStencil(), setStencilBufferSize()
+*/
+
+/*!
+ If \a enable is true enables the stencil buffer; otherwise
+ disables the stencil buffer.
+
+ The stencil buffer is enabled by default.
+
+ The stencil buffer masks certain parts of the drawing area so that
+ masked parts are not drawn on.
+
+ \sa stencil(), setStencilBufferSize()
+*/
+
+void QPlatformWindowFormat::setStencil(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::StencilBuffer: QPlatformWindowFormat::NoStencilBuffer);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::stereo() const
+
+ Returns true if stereo buffering is enabled; otherwise returns
+ false. Stereo buffering is disabled by default.
+
+ \sa setStereo()
+*/
+
+/*!
+ If \a enable is true enables stereo buffering; otherwise disables
+ stereo buffering.
+
+ Stereo buffering is disabled by default.
+
+ Stereo buffering provides extra color buffers to generate left-eye
+ and right-eye images.
+
+ \sa stereo()
+*/
+
+void QPlatformWindowFormat::setStereo(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::StereoBuffers : QPlatformWindowFormat::NoStereoBuffers);
+}
+
+
+/*!
+ \fn bool QPlatformWindowFormat::directRendering() const
+
+ Returns true if direct rendering is enabled; otherwise returns
+ false.
+
+ Direct rendering is enabled by default.
+
+ \sa setDirectRendering()
+*/
+
+/*!
+ If \a enable is true enables direct rendering; otherwise disables
+ direct rendering.
+
+ Direct rendering is enabled by default.
+
+ Enabling this option will make OpenGL bypass the underlying window
+ system and render directly from hardware to the screen, if this is
+ supported by the system.
+
+ \sa directRendering()
+*/
+
+void QPlatformWindowFormat::setDirectRendering(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::DirectRendering : QPlatformWindowFormat::IndirectRendering);
+}
+
+/*!
+ \fn bool QPlatformWindowFormat::sampleBuffers() const
+
+ Returns true if multisample buffer support is enabled; otherwise
+ returns false.
+
+ The multisample buffer is disabled by default.
+
+ \sa setSampleBuffers()
+*/
+
+/*!
+ If \a enable is true, a GL context with multisample buffer support
+ is picked; otherwise ignored.
+
+ \sa sampleBuffers(), setSamples(), samples()
+*/
+void QPlatformWindowFormat::setSampleBuffers(bool enable)
+{
+ setOption(enable ? QPlatformWindowFormat::SampleBuffers : QPlatformWindowFormat::NoSampleBuffers);
+}
+
+void QPlatformWindowFormat::setUseDefaultSharedContext(bool enable)
+{
+ if (enable) {
+ setOption(QPlatformWindowFormat::UseDefaultSharedContext);
+ d->sharedContext = 0;
+ } else {
+ setOption(QPlatformWindowFormat::NoDefaultSharedContext);
+ }
+}
+
+/*!
+ Returns the number of samples per pixel when multisampling is
+ enabled. By default, the highest number of samples that is
+ available is used.
+
+ \sa setSampleBuffers(), sampleBuffers(), setSamples()
+*/
+int QPlatformWindowFormat::samples() const
+{
+ return d->numSamples;
+}
+
+/*!
+ Set the preferred number of samples per pixel when multisampling
+ is enabled to \a numSamples. By default, the highest number of
+ samples available is used.
+
+ \sa setSampleBuffers(), sampleBuffers(), samples()
+*/
+void QPlatformWindowFormat::setSamples(int numSamples)
+{
+ detach();
+ if (numSamples < 0) {
+ qWarning("QPlatformWindowFormat::setSamples: Cannot have negative number of samples per pixel %d", numSamples);
+ return;
+ }
+ d->numSamples = numSamples;
+ setSampleBuffers(numSamples > 0);
+}
+
+/*!
+ \since 4.2
+
+ Set the preferred swap interval. This can be used to sync the GL
+ drawing into a system window to the vertical refresh of the screen.
+ Setting an \a interval value of 0 will turn the vertical refresh syncing
+ off, any value higher than 0 will turn the vertical syncing on.
+
+ Under Windows and under X11, where the \c{WGL_EXT_swap_control}
+ and \c{GLX_SGI_video_sync} extensions are used, the \a interval
+ parameter can be used to set the minimum number of video frames
+ that are displayed before a buffer swap will occur. In effect,
+ setting the \a interval to 10, means there will be 10 vertical
+ retraces between every buffer swap.
+
+ Under Windows the \c{WGL_EXT_swap_control} extension has to be present,
+ and under X11 the \c{GLX_SGI_video_sync} extension has to be present.
+*/
+void QPlatformWindowFormat::setSwapInterval(int interval)
+{
+ detach();
+ d->swapInterval = interval;
+}
+
+/*!
+ \since 4.2
+
+ Returns the currently set swap interval. -1 is returned if setting
+ the swap interval isn't supported in the system GL implementation.
+*/
+int QPlatformWindowFormat::swapInterval() const
+{
+ return d->swapInterval;
+}
+
+void QPlatformWindowFormat::setWindowApi(QPlatformWindowFormat::WindowApi api)
+{
+ detach();
+ d->windowApi = api;
+}
+
+QPlatformWindowFormat::WindowApi QPlatformWindowFormat::windowApi() const
+{
+ return d->windowApi;
+}
+
+void QPlatformWindowFormat::setSharedContext(QPlatformGLContext *context)
+{
+ setUseDefaultSharedContext(false);
+ d->sharedContext = context;
+}
+
+QPlatformGLContext *QPlatformWindowFormat::sharedGLContext() const
+{
+ return d->sharedContext;
+}
+
+///*!
+// \fn bool QPlatformWindowFormat::hasOverlay() const
+
+// Returns true if overlay plane is enabled; otherwise returns false.
+
+// Overlay is disabled by default.
+
+// \sa setOverlay()
+//*/
+
+///*!
+// If \a enable is true enables an overlay plane; otherwise disables
+// the overlay plane.
+
+// Enabling the overlay plane will cause QGLWidget to create an
+// additional context in an overlay plane. See the QGLWidget
+// documentation for further information.
+
+// \sa hasOverlay()
+//*/
+
+//void QPlatformWindowFormat::setOverlay(bool enable)
+//{
+// setOption(enable ? QPlatformWindowFormat::HasOverlay : QPlatformWindowFormat::NoOverlay);
+//}
+
+/*!
+ Sets the format option to \a opt.
+
+ \sa testOption()
+*/
+
+void QPlatformWindowFormat::setOption(QPlatformWindowFormat::FormatOptions opt)
+{
+ detach();
+ if (opt & 0xffff)
+ d->opts |= opt;
+ else
+ d->opts &= ~(opt >> 16);
+}
+
+
+
+/*!
+ Returns true if format option \a opt is set; otherwise returns false.
+
+ \sa setOption()
+*/
+
+bool QPlatformWindowFormat::testOption(QPlatformWindowFormat::FormatOptions opt) const
+{
+ if (opt & 0xffff)
+ return (d->opts & opt) != 0;
+ else
+ return (d->opts & (opt >> 16)) == 0;
+}
+
+/*!
+ Set the minimum depth buffer size to \a size.
+
+ \sa depthBufferSize(), setDepth(), depth()
+*/
+void QPlatformWindowFormat::setDepthBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setDepthBufferSize: Cannot set negative depth buffer size %d", size);
+ return;
+ }
+ d->depthSize = size;
+ setDepth(size > 0);
+}
+
+/*!
+ Returns the depth buffer size.
+
+ \sa depth(), setDepth(), setDepthBufferSize()
+*/
+int QPlatformWindowFormat::depthBufferSize() const
+{
+ return d->depthSize;
+}
+
+/*!
+ \since 4.2
+
+ Set the preferred red buffer size to \a size.
+
+ \sa setGreenBufferSize(), setBlueBufferSize(), setAlphaBufferSize()
+*/
+void QPlatformWindowFormat::setRedBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setRedBufferSize: Cannot set negative red buffer size %d", size);
+ return;
+ }
+ d->redSize = size;
+}
+
+/*!
+ \since 4.2
+
+ Returns the red buffer size.
+
+ \sa setRedBufferSize()
+*/
+int QPlatformWindowFormat::redBufferSize() const
+{
+ return d->redSize;
+}
+
+/*!
+ \since 4.2
+
+ Set the preferred green buffer size to \a size.
+
+ \sa setRedBufferSize(), setBlueBufferSize(), setAlphaBufferSize()
+*/
+void QPlatformWindowFormat::setGreenBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setGreenBufferSize: Cannot set negative green buffer size %d", size);
+ return;
+ }
+ d->greenSize = size;
+}
+
+/*!
+ \since 4.2
+
+ Returns the green buffer size.
+
+ \sa setGreenBufferSize()
+*/
+int QPlatformWindowFormat::greenBufferSize() const
+{
+ return d->greenSize;
+}
+
+/*!
+ \since 4.2
+
+ Set the preferred blue buffer size to \a size.
+
+ \sa setRedBufferSize(), setGreenBufferSize(), setAlphaBufferSize()
+*/
+void QPlatformWindowFormat::setBlueBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setBlueBufferSize: Cannot set negative blue buffer size %d", size);
+ return;
+ }
+ d->blueSize = size;
+}
+
+/*!
+ \since 4.2
+
+ Returns the blue buffer size.
+
+ \sa setBlueBufferSize()
+*/
+int QPlatformWindowFormat::blueBufferSize() const
+{
+ return d->blueSize;
+}
+
+/*!
+ Set the preferred alpha buffer size to \a size.
+ This function implicitly enables the alpha channel.
+
+ \sa setRedBufferSize(), setGreenBufferSize(), alphaBufferSize()
+*/
+void QPlatformWindowFormat::setAlphaBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setAlphaBufferSize: Cannot set negative alpha buffer size %d", size);
+ return;
+ }
+ d->alphaSize = size;
+ setAlpha(size > 0);
+}
+
+/*!
+ Returns the alpha buffer size.
+
+ \sa alpha(), setAlpha(), setAlphaBufferSize()
+*/
+int QPlatformWindowFormat::alphaBufferSize() const
+{
+ return d->alphaSize;
+}
+
+/*!
+ Set the preferred accumulation buffer size, where \a size is the
+ bit depth for each RGBA component.
+
+ \sa accum(), setAccum(), accumBufferSize()
+*/
+void QPlatformWindowFormat::setAccumBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setAccumBufferSize: Cannot set negative accumulate buffer size %d", size);
+ return;
+ }
+ d->accumSize = size;
+ setAccum(size > 0);
+}
+
+/*!
+ Returns the accumulation buffer size.
+
+ \sa setAccumBufferSize(), accum(), setAccum()
+*/
+int QPlatformWindowFormat::accumBufferSize() const
+{
+ return d->accumSize;
+}
+
+/*!
+ Set the preferred stencil buffer size to \a size.
+
+ \sa stencilBufferSize(), setStencil(), stencil()
+*/
+void QPlatformWindowFormat::setStencilBufferSize(int size)
+{
+ detach();
+ if (size < 0) {
+ qWarning("QPlatformWindowFormat::setStencilBufferSize: Cannot set negative stencil buffer size %d", size);
+ return;
+ }
+ d->stencilSize = size;
+ setStencil(size > 0);
+}
+
+/*!
+ Returns the stencil buffer size.
+
+ \sa stencil(), setStencil(), setStencilBufferSize()
+*/
+int QPlatformWindowFormat::stencilBufferSize() const
+{
+ return d->stencilSize;
+}
+
+/*!
+ Returns the default QPlatformWindowFormat for the application. All QGLWidget
+ objects that are created use this format unless another format is
+ specified, e.g. when they are constructed.
+
+ If no special default format has been set using
+ setDefaultFormat(), the default format is the same as that created
+ with QPlatformWindowFormat().
+
+ \sa setDefaultFormat()
+*/
+
+QPlatformWindowFormat QPlatformWindowFormat::defaultFormat()
+{
+ return *q_platformwindow_default_format();
+}
+
+/*!
+ Sets a new default QPlatformWindowFormat for the application to \a f. For
+ example, to set single buffering as the default instead of double
+ buffering, your main() might contain code like this:
+ \snippet doc/src/snippets/code/src_opengl_qgl.cpp 4
+
+ \sa defaultFormat()
+*/
+
+void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f)
+{
+ *q_platformwindow_default_format() = f;
+}
+
+
+/*!
+ Returns the default QPlatformWindowFormat for overlay contexts.
+
+ The default overlay format is:
+ \list
+ \i \link setDoubleBuffer() Double buffer:\endlink Disabled.
+ \i \link setDepth() Depth buffer:\endlink Disabled.
+ \i \link setRgba() RGBA:\endlink Disabled (i.e., color index enabled).
+ \i \link setAlpha() Alpha channel:\endlink Disabled.
+ \i \link setAccum() Accumulator buffer:\endlink Disabled.
+ \i \link setStencil() Stencil buffer:\endlink Disabled.
+ \i \link setStereo() Stereo:\endlink Disabled.
+ \i \link setDirectRendering() Direct rendering:\endlink Enabled.
+ \i \link setOverlay() Overlay:\endlink Disabled.
+ \i \link setSampleBuffers() Multisample buffers:\endlink Disabled.
+ \i \link setPlane() Plane:\endlink 1 (i.e., first overlay plane).
+ \endlist
+
+ \sa setDefaultFormat()
+*/
+
+//QPlatformWindowFormat QPlatformWindowFormat::defaultOverlayFormat()
+//{
+// return *defaultOverlayFormatInstance();
+//}
+
+///*!
+// Sets a new default QPlatformWindowFormat for overlay contexts to \a f. This
+// format is used whenever a QGLWidget is created with a format that
+// hasOverlay() enabled.
+
+// For example, to get a double buffered overlay context (if
+// available), use code like this:
+
+// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 5
+
+// As usual, you can find out after widget creation whether the
+// underlying OpenGL system was able to provide the requested
+// specification:
+
+// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 6
+
+// \sa defaultOverlayFormat()
+//*/
+
+//void QPlatformWindowFormat::setDefaultOverlayFormat(const QPlatformWindowFormat &f)
+//{
+// QPlatformWindowFormat *defaultFormat = defaultOverlayFormatInstance();
+// *defaultFormat = f;
+// // Make sure the user doesn't request that the overlays themselves
+// // have overlays, since it is unlikely that the system supports
+// // infinitely many planes...
+// defaultFormat->setOverlay(false);
+//}
+
+
+/*!
+ Returns true if all the options of the two QPlatformWindowFormat objects
+ \a a and \a b are equal; otherwise returns false.
+
+ \relates QPlatformWindowFormat
+*/
+
+bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b)
+{
+ return (a.d == b.d) || ((int) a.d->opts == (int) b.d->opts
+ && a.d->alphaSize == b.d->alphaSize
+ && a.d->accumSize == b.d->accumSize
+ && a.d->stencilSize == b.d->stencilSize
+ && a.d->depthSize == b.d->depthSize
+ && a.d->redSize == b.d->redSize
+ && a.d->greenSize == b.d->greenSize
+ && a.d->blueSize == b.d->blueSize
+ && a.d->numSamples == b.d->numSamples
+ && a.d->swapInterval == b.d->swapInterval
+ && a.d->windowApi == b.d->windowApi);
+}
+
+
+/*!
+ Returns false if all the options of the two QPlatformWindowFormat objects
+ \a a and \a b are equal; otherwise returns true.
+
+ \relates QPlatformWindowFormat
+*/
+
+bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b)
+{
+ return !(a == b);
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QPlatformWindowFormat &f)
+{
+ const QPlatformWindowFormatPrivate * const d = f.d;
+
+ dbg.nospace() << "QGLFormat("
+ << "options " << d->opts
+ << ", depthBufferSize " << d->depthSize
+ << ", accumBufferSize " << d->accumSize
+ << ", stencilBufferSize " << d->stencilSize
+ << ", redBufferSize " << d->redSize
+ << ", greenBufferSize " << d->greenSize
+ << ", blueBufferSize " << d->blueSize
+ << ", alphaBufferSize " << d->alphaSize
+ << ", samples " << d->numSamples
+ << ", swapInterval " << d->swapInterval
+ << ')';
+
+ return dbg.space();
+}
+#endif
diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h
new file mode 100644
index 0000000..63df76a
--- /dev/null
+++ b/src/gui/kernel/qplatformwindowformat_qpa.h
@@ -0,0 +1,241 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QPLATFORMWINDOWFORMAT_QPA_H
+#define QPLATFORMWINDOWFORMAT_QPA_H
+
+#include <QtGui/QPlatformWindow>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QPlatformWindowFormatPrivate;
+
+class Q_GUI_EXPORT QPlatformWindowFormat
+{
+public:
+ enum FormatOption {
+ DoubleBuffer = 0x0001,
+ DepthBuffer = 0x0002,
+ Rgba = 0x0004,
+ AlphaChannel = 0x0008,
+ AccumBuffer = 0x0010,
+ StencilBuffer = 0x0020,
+ StereoBuffers = 0x0040,
+ DirectRendering = 0x0080,
+ HasOverlay = 0x0100,
+ SampleBuffers = 0x0200,
+ DeprecatedFunctions = 0x0400,
+ UseDefaultSharedContext = 0x0800,
+ SingleBuffer = DoubleBuffer << 16,
+ NoDepthBuffer = DepthBuffer << 16,
+ ColorIndex = Rgba << 16,
+ NoAlphaChannel = AlphaChannel << 16,
+ NoAccumBuffer = AccumBuffer << 16,
+ NoStencilBuffer = StencilBuffer << 16,
+ NoStereoBuffers = StereoBuffers << 16,
+ IndirectRendering = DirectRendering << 16,
+ NoOverlay = HasOverlay << 16,
+ NoSampleBuffers = SampleBuffers << 16,
+ NoDeprecatedFunctions = DeprecatedFunctions << 16,
+ NoDefaultSharedContext = UseDefaultSharedContext << 16
+
+ };
+ Q_DECLARE_FLAGS(FormatOptions, FormatOption)
+
+ enum WindowApi {
+ Raster,
+ OpenGL,
+ OpenVG
+ };
+
+ QPlatformWindowFormat();
+ QPlatformWindowFormat(FormatOptions options);
+ QPlatformWindowFormat(const QPlatformWindowFormat &other);
+ QPlatformWindowFormat &operator=(const QPlatformWindowFormat &other);
+ ~QPlatformWindowFormat();
+
+ void setDepthBufferSize(int size);
+ int depthBufferSize() const;
+
+ void setAccumBufferSize(int size);
+ int accumBufferSize() const;
+
+ void setRedBufferSize(int size);
+ int redBufferSize() const;
+
+ void setGreenBufferSize(int size);
+ int greenBufferSize() const;
+
+ void setBlueBufferSize(int size);
+ int blueBufferSize() const;
+
+ void setAlphaBufferSize(int size);
+ int alphaBufferSize() const;
+
+ void setStencilBufferSize(int size);
+ int stencilBufferSize() const;
+
+ void setSampleBuffers(bool enable);
+ bool sampleBuffers() const;
+
+ void setSamples(int numSamples);
+ int samples() const;
+
+ void setSwapInterval(int interval);
+ int swapInterval() const;
+
+ void setWindowApi(QPlatformWindowFormat::WindowApi api);
+ WindowApi windowApi() const;
+
+ void setSharedContext(QPlatformGLContext *context);
+ QPlatformGLContext *sharedGLContext() const;
+
+ bool doubleBuffer() const;
+ void setDoubleBuffer(bool enable);
+ bool depth() const;
+ void setDepth(bool enable);
+ bool rgba() const;
+ void setRgba(bool enable);
+ bool alpha() const;
+ void setAlpha(bool enable);
+ bool accum() const;
+ void setAccum(bool enable);
+ bool stencil() const;
+ void setStencil(bool enable);
+ bool stereo() const;
+ void setStereo(bool enable);
+ bool directRendering() const;
+ void setDirectRendering(bool enable);
+ bool useDefaultSharedContext() const;
+ void setUseDefaultSharedContext(bool enable);
+// bool hasOverlay() const;
+// void setOverlay(bool enable);
+
+ void setOption(QPlatformWindowFormat::FormatOptions opt);
+ bool testOption(QPlatformWindowFormat::FormatOptions opt) const;
+
+ static QPlatformWindowFormat defaultFormat();
+ static void setDefaultFormat(const QPlatformWindowFormat& f);
+
+private:
+ QPlatformWindowFormatPrivate *d;
+
+ void detach();
+
+ friend Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&);
+ friend Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&);
+#ifndef QT_NO_DEBUG_STREAM
+ friend Q_GUI_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &);
+#endif
+};
+
+Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&);
+Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&);
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &);
+#endif
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::FormatOptions)
+
+inline bool QPlatformWindowFormat::doubleBuffer() const
+{
+ return testOption(QPlatformWindowFormat::DoubleBuffer);
+}
+
+inline bool QPlatformWindowFormat::depth() const
+{
+ return testOption(QPlatformWindowFormat::DepthBuffer);
+}
+
+inline bool QPlatformWindowFormat::rgba() const
+{
+ return testOption(QPlatformWindowFormat::Rgba);
+}
+
+inline bool QPlatformWindowFormat::alpha() const
+{
+ return testOption(QPlatformWindowFormat::AlphaChannel);
+}
+
+inline bool QPlatformWindowFormat::accum() const
+{
+ return testOption(QPlatformWindowFormat::AccumBuffer);
+}
+
+inline bool QPlatformWindowFormat::stencil() const
+{
+ return testOption(QPlatformWindowFormat::StencilBuffer);
+}
+
+inline bool QPlatformWindowFormat::stereo() const
+{
+ return testOption(QPlatformWindowFormat::StereoBuffers);
+}
+
+inline bool QPlatformWindowFormat::directRendering() const
+{
+ return testOption(QPlatformWindowFormat::DirectRendering);
+}
+
+//inline bool QPlatformWindowFormat::hasOverlay() const
+//{
+// return testOption(QPlatformWindowFormat::HasOverlay);
+//}
+
+inline bool QPlatformWindowFormat::sampleBuffers() const
+{
+ return testOption(QPlatformWindowFormat::SampleBuffers);
+}
+
+inline bool QPlatformWindowFormat::useDefaultSharedContext() const
+{
+ return testOption(QPlatformWindowFormat::UseDefaultSharedContext);
+}
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif //QPLATFORMWINDOWFORMAT_QPA_H
diff --git a/src/gui/kernel/qsizepolicy.qdoc b/src/gui/kernel/qsizepolicy.qdoc
index f6a350c..504821e 100644
--- a/src/gui/kernel/qsizepolicy.qdoc
+++ b/src/gui/kernel/qsizepolicy.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp
index fee1580..c81d75f 100644
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp
@@ -265,7 +265,7 @@ bool QSoftKeyManagerPrivateS60::setSoftkeyImage(CEikButtonGroupContainer *cba,
CFbsBitmap* nMask = softkeyAlpha.toSymbianCFbsBitmap();
CEikImage* myimage = new (ELeave) CEikImage;
- myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transfered
+ myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transferred
EikSoftkeyImage::SetImage(cba, *myimage, left); // Takes myimage ownership
cbaHasImage[position] = true;
diff --git a/src/gui/kernel/qstandardgestures.cpp b/src/gui/kernel/qstandardgestures.cpp
index 893ba2b..48b7ac1 100644
--- a/src/gui/kernel/qstandardgestures.cpp
+++ b/src/gui/kernel/qstandardgestures.cpp
@@ -194,29 +194,28 @@ QGestureRecognizer::Result QPinchGestureRecognizer::recognize(QGesture *state,
d->hotSpot = p1.screenPos();
d->isHotSpotSet = true;
+ QPointF centerPoint = (p1.screenPos() + p2.screenPos()) / 2.0;
if (d->isNewSequence) {
d->startPosition[0] = p1.screenPos();
d->startPosition[1] = p2.screenPos();
+ d->lastCenterPoint = centerPoint;
+ } else {
+ d->lastCenterPoint = d->centerPoint;
}
- QLineF line(p1.screenPos(), p2.screenPos());
- QLineF lastLine(p1.lastScreenPos(), p2.lastScreenPos());
- QLineF tmp(line);
- tmp.setLength(line.length() / 2.);
- QPointF centerPoint = tmp.p2();
-
- d->lastCenterPoint = d->centerPoint;
d->centerPoint = centerPoint;
- d->changeFlags |= QPinchGesture::CenterPointChanged;
- const qreal scaleFactor = line.length() / lastLine.length();
+ d->changeFlags |= QPinchGesture::CenterPointChanged;
if (d->isNewSequence) {
- d->lastScaleFactor = scaleFactor;
+ d->scaleFactor = 1.0;
+ d->lastScaleFactor = 1.0;
} else {
d->lastScaleFactor = d->scaleFactor;
+ QLineF line(p1.screenPos(), p2.screenPos());
+ QLineF lastLine(p1.lastScreenPos(), p2.lastScreenPos());
+ d->scaleFactor = line.length() / lastLine.length();
}
- d->scaleFactor = scaleFactor;
- d->totalScaleFactor = d->totalScaleFactor * scaleFactor;
+ d->totalScaleFactor = d->totalScaleFactor * d->scaleFactor;
d->changeFlags |= QPinchGesture::ScaleFactorChanged;
qreal angle = QLineF(p1.screenPos(), p2.screenPos()).angle();
@@ -227,7 +226,7 @@ QGestureRecognizer::Result QPinchGestureRecognizer::recognize(QGesture *state,
startAngle -= 360;
const qreal rotationAngle = startAngle - angle;
if (d->isNewSequence)
- d->lastRotationAngle = rotationAngle;
+ d->lastRotationAngle = 0.0;
else
d->lastRotationAngle = d->rotationAngle;
d->rotationAngle = rotationAngle;
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index 2dd3791..48d21e9 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -79,6 +79,7 @@
#include <qdesktopwidget.h>
#include <qevent.h>
#include <qpixmapcache.h>
+#include <qvarlengtharray.h>
#include <private/qevent_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
#include <private/qt_mac_p.h>
@@ -616,6 +617,27 @@ Qt::KeyboardModifiers qt_cocoaModifiers2QtModifiers(ulong modifierFlags)
return qtMods;
}
+NSString *qt_mac_removePrivateUnicode(NSString* string)
+{
+ int len = [string length];
+ if (len) {
+ QVarLengthArray <unichar, 10> characters(len);
+ bool changed = false;
+ for (int i = 0; i<len; i++) {
+ characters[i] = [string characterAtIndex:i];
+ // check if they belong to key codes in private unicode range
+ // currently we need to handle only the NSDeleteFunctionKey
+ if (characters[i] == NSDeleteFunctionKey) {
+ characters[i] = NSDeleteCharacter;
+ changed = true;
+ }
+ }
+ if (changed)
+ return [NSString stringWithCharacters:characters.data() length:len];
+ }
+ return string;
+}
+
Qt::KeyboardModifiers qt_cocoaDragOperation2QtModifiers(uint dragOperations)
{
Qt::KeyboardModifiers qtMods =Qt::NoModifier;
@@ -1365,11 +1387,11 @@ QString qt_mac_get_pasteboardString(OSPasteboardRef paste)
QMacCocoaAutoReleasePool pool;
NSPasteboard *pb = nil;
CFStringRef pbname;
- if (PasteboardCopyName (paste, &pbname)) {
- pb = [NSPasteboard generalPasteboard];
+ if (PasteboardCopyName(paste, &pbname) == noErr) {
+ pb = [NSPasteboard pasteboardWithName:const_cast<NSString *>(reinterpret_cast<const NSString *>(pbname))];
+ CFRelease(pbname);
} else {
- pb = [NSPasteboard pasteboardWithName:reinterpret_cast<const NSString *>(pbname)];
- CFRelease (pbname);
+ pb = [NSPasteboard generalPasteboard];
}
if (pb) {
NSString *text = [pb stringForType:NSStringPboardType];
@@ -1561,6 +1583,13 @@ void qt_cocoaStackChildWindowOnTopOfOtherChildren(QWidget *childWidget)
}
}
+void qt_mac_display(QWidget *widget)
+{
+ NSView *theNSView = qt_mac_nativeview_for(widget);
+ [theNSView display];
+ return;
+}
+
#endif // QT_MAC_USE_COCOA
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
index 5c23392..04c2d06 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h
+++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
@@ -227,6 +227,8 @@ void qt_cocoaPostMessage(id target, SEL selector, int argCount=0, id arg1=0, id
void qt_mac_post_retranslateAppMenu();
+void qt_mac_display(QWidget *widget);
+
QT_END_NAMESPACE
#endif // QT_COCOA_HELPERS_MAC_P_H
diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h
index d62d9c3..56c8094 100644
--- a/src/gui/kernel/qt_x11_p.h
+++ b/src/gui/kernel/qt_x11_p.h
@@ -338,6 +338,7 @@ enum DesktopEnvironment {
DE_KDE,
DE_GNOME,
DE_CDE,
+ DE_MEEGO_COMPOSITOR,
DE_4DWM
};
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index cffad1d..cd1c9f0 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -68,6 +68,7 @@
# include "qt_cocoa_helpers_mac_p.h"
# include "qmainwindow.h"
# include "qtoolbar.h"
+# include <private/qmainwindowlayout_p.h>
#endif
#if defined(Q_WS_QWS)
# include "qwsdisplay_qws.h"
@@ -75,6 +76,9 @@
# include "qpaintengine.h" // for PorterDuff
# include "private/qwindowsurface_qws_p.h"
#endif
+#if defined(Q_WS_QPA)
+#include "qplatformwindow_qpa.h"
+#endif
#include "qpainter.h"
#include "qtooltip.h"
#include "qwhatsthis.h"
@@ -235,6 +239,17 @@ void QWidgetBackingStoreTracker::unregisterWidget(QWidget *w)
}
}
+/*!
+ \internal
+ Recursively remove widget and all of its descendents.
+ */
+void QWidgetBackingStoreTracker::unregisterWidgetSubtree(QWidget *widget)
+{
+ unregisterWidget(widget);
+ foreach (QObject *child, widget->children())
+ if (QWidget *childWidget = qobject_cast<QWidget *>(child))
+ unregisterWidgetSubtree(childWidget);
+}
QWidgetPrivate::QWidgetPrivate(int version)
: QObjectPrivate(version)
@@ -273,6 +288,9 @@ QWidgetPrivate::QWidgetPrivate(int version)
, isMoved(0)
, isGLWidget(0)
, usesDoubleBufferedGLContext(0)
+#ifndef QT_NO_IM
+ , inheritsInputMethodHints(0)
+#endif
#if defined(Q_WS_X11)
, picture(0)
#elif defined(Q_WS_WIN)
@@ -285,6 +303,8 @@ QWidgetPrivate::QWidgetPrivate(int version)
, hasAlienChildren(0)
, window_event(0)
, qd_hd(0)
+#elif defined (Q_WS_QPA)
+ , screenNumber(0)
#endif
{
if (!qApp) {
@@ -301,6 +321,9 @@ QWidgetPrivate::QWidgetPrivate(int version)
drawRectOriginalAdded = false;
originalDrawMethod = true;
changeMethods = false;
+ hasOwnContext = false;
+ isInUnifiedToolbar = false;
+ unifiedSurface = 0;
#endif // QT_MAC_USE_COCOA
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
@@ -322,15 +345,27 @@ QWidgetPrivate::~QWidgetPrivate()
#endif //QT_NO_GRAPHICSEFFECT
}
+class QDummyWindowSurface : public QWindowSurface
+{
+public:
+ QDummyWindowSurface(QWidget *window) : QWindowSurface(window) {}
+ QPaintDevice *paintDevice() { return window(); }
+ void flush(QWidget *, const QRegion &, const QPoint &) {}
+};
+
QWindowSurface *QWidgetPrivate::createDefaultWindowSurface()
{
Q_Q(QWidget);
QWindowSurface *surface;
- if (QApplicationPrivate::graphicsSystem())
- surface = QApplicationPrivate::graphicsSystem()->createWindowSurface(q);
- else
- surface = createDefaultWindowSurface_sys();
+ if (q->property("_q_DummyWindowSurface").toBool()) {
+ surface = new QDummyWindowSurface(q);
+ } else {
+ if (QApplicationPrivate::graphicsSystem())
+ surface = QApplicationPrivate::graphicsSystem()->createWindowSurface(q);
+ else
+ surface = createDefaultWindowSurface_sys();
+ }
return surface;
}
@@ -728,9 +763,9 @@ void QWidget::setAutoFillBackground(bool enabled)
\list
\i mouseMoveEvent() is called whenever the mouse moves while a mouse
button is held down. This can be useful during drag and drop
- operations. If you call setMouseTracking(true), you get mouse move
- events even when no buttons are held down. (See also the \l{Drag
- and Drop} guide.)
+ operations. If you call \l{setMouseTracking()}{setMouseTracking}(true),
+ you get mouse move events even when no buttons are held down.
+ (See also the \l{Drag and Drop} guide.)
\i keyReleaseEvent() is called whenever a key is released and while it
is held down (if the key is auto-repeating). In that case, the
widget will receive a pair of key release and key press event for
@@ -1240,6 +1275,12 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
// programmer specified desktop widget
xinfo = desktopWidget->d_func()->xinfo;
}
+#elif defined(Q_WS_QPA)
+ if (desktopWidget) {
+ int screen = desktopWidget->d_func()->screenNumber;
+ QPlatformIntegration *platform = QApplicationPrivate::platformIntegration();
+ platform->moveToScreen(q, screen);
+ }
#else
Q_UNUSED(desktopWidget);
#endif
@@ -1371,6 +1412,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow)
flags |= Qt::Window;
}
+#ifndef Q_WS_QPA
if (QWidget *parent = parentWidget()) {
#ifdef Q_WS_MAC
if (testAttribute(Qt::WA_NativeWindow) == false)
@@ -1391,6 +1433,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow)
return;
}
}
+#endif //Q_WS_QPA
#ifdef QT3_SUPPORT
if (flags & Qt::WStaticContents)
@@ -1549,13 +1592,13 @@ QWidget::~QWidget()
}
}
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11)|| defined(Q_WS_MAC)
else if (!internalWinId() && isVisible()) {
qApp->d_func()->sendSyntheticEnterLeave(this);
-#ifdef Q_WS_QWS
- } else if (isVisible()) {
+ }
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
+ else if (isVisible()) {
qApp->d_func()->sendSyntheticEnterLeave(this);
-#endif
}
#endif
@@ -1688,6 +1731,10 @@ void QWidgetPrivate::createTLExtra()
static int count = 0;
qDebug() << "tlextra" << ++count;
#endif
+#if defined(Q_WS_QPA)
+ x->platformWindow = 0;
+ x->platformWindowFormat = QPlatformWindowFormat::defaultFormat();
+#endif
}
}
@@ -2422,7 +2469,9 @@ WId QWidget::winId() const
qDebug() << "QWidget::winId: creating native window for" << this;
#endif
QWidget *that = const_cast<QWidget*>(this);
+#ifndef Q_WS_QPA
that->setAttribute(Qt::WA_NativeWindow);
+#endif
that->d_func()->createWinId();
return that->data->winid;
}
@@ -2439,6 +2488,7 @@ void QWidgetPrivate::createWinId(WId winid)
#endif
const bool forceNativeWindow = q->testAttribute(Qt::WA_NativeWindow);
if (!q->testAttribute(Qt::WA_WState_Created) || (forceNativeWindow && !q->internalWinId())) {
+#ifndef Q_WS_QPA
if (!q->isWindow()) {
QWidget *parent = q->parentWidget();
QWidgetPrivate *pd = parent->d_func();
@@ -2466,6 +2516,11 @@ void QWidgetPrivate::createWinId(WId winid)
} else {
q->create();
}
+#else
+ Q_UNUSED(winid);
+ q->create();
+#endif //Q_WS_QPA
+
}
}
@@ -2988,6 +3043,15 @@ bool QWidget::isFullScreen() const
*/
void QWidget::showFullScreen()
{
+#ifdef Q_WS_MAC
+ // If the unified toolbar is enabled, we have to disable it before going fullscreen.
+ QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
+ if (mainWindow && mainWindow->unifiedTitleAndToolBarOnMac()) {
+ mainWindow->setUnifiedTitleAndToolBarOnMac(false);
+ QMainWindowLayout *mainLayout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ mainLayout->activateUnifiedToolbarAfterFullScreen = true;
+ }
+#endif // Q_WS_MAC
ensurePolished();
#ifdef QT3_SUPPORT
if (parent())
@@ -3020,6 +3084,18 @@ void QWidget::showMaximized()
setWindowState((windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen))
| Qt::WindowMaximized);
+#ifdef Q_WS_MAC
+ // If the unified toolbar was enabled before going fullscreen, we have to enable it back.
+ QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
+ if (mainWindow)
+ {
+ QMainWindowLayout *mainLayout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ if (mainLayout->activateUnifiedToolbarAfterFullScreen) {
+ mainWindow->setUnifiedTitleAndToolBarOnMac(true);
+ mainLayout->activateUnifiedToolbarAfterFullScreen = false;
+ }
+ }
+#endif // Q_WS_MAC
show();
}
@@ -3041,6 +3117,18 @@ void QWidget::showNormal()
setWindowState(windowState() & ~(Qt::WindowMinimized
| Qt::WindowMaximized
| Qt::WindowFullScreen));
+#ifdef Q_WS_MAC
+ // If the unified toolbar was enabled before going fullscreen, we have to enable it back.
+ QMainWindow *mainWindow = qobject_cast<QMainWindow*>(this);
+ if (mainWindow)
+ {
+ QMainWindowLayout *mainLayout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ if (mainLayout->activateUnifiedToolbarAfterFullScreen) {
+ mainWindow->setUnifiedTitleAndToolBarOnMac(true);
+ mainLayout->activateUnifiedToolbarAfterFullScreen = false;
+ }
+ }
+#endif // Q_WS_MAC
show();
}
@@ -5316,6 +5404,14 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
if (rgn.isEmpty())
return;
+#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
+ // We disable the rendering of QToolBar in the backingStore if
+ // it's supposed to be in the unified toolbar on Mac OS X.
+ if (backingStore && isInUnifiedToolbar)
+ return;
+#endif // Q_WS_MAC && QT_MAC_USE_COCOA
+
+
Q_Q(QWidget);
#ifndef QT_NO_GRAPHICSEFFECT
if (graphicsEffect && graphicsEffect->isEnabled()) {
@@ -5378,6 +5474,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
QPaintEngine *paintEngine = pdev->paintEngine();
if (paintEngine) {
setRedirected(pdev, -offset);
+
#ifdef Q_WS_MAC
// (Alien support) Special case for Mac when redirecting: If the paint device
// is of the Widget type we need to set WA_WState_InPaintEvent since painting
@@ -5420,7 +5517,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
//actually send the paint event
QPaintEvent e(toBePainted);
QCoreApplication::sendSpontaneousEvent(q, &e);
-#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS)
+#if !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow()))
backingStore->markDirtyOnScreen(toBePainted, q, offset);
#endif
@@ -6956,7 +7053,11 @@ bool QWidget::restoreGeometry(const QByteArray &geometry)
if (maximized || fullScreen) {
// set geomerty before setting the window state to make
// sure the window is maximized to the right screen.
+ // Skip on windows: the window is restored into a broken
+ // half-maximized state.
+#ifndef Q_WS_WIN
setGeometry(restoredNormalGeometry);
+#endif
Qt::WindowStates ws = windowState();
if (maximized)
ws |= Qt::WindowMaximized;
@@ -7458,7 +7559,7 @@ void QWidgetPrivate::hide_helper()
// next bit tries to move the focus if the focus widget is now
// hidden.
if (wasVisible) {
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
qApp->d_func()->sendSyntheticEnterLeave(q);
#endif
@@ -7590,7 +7691,7 @@ void QWidget::setVisible(bool visible)
d->show_helper();
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
qApp->d_func()->sendSyntheticEnterLeave(this);
#endif
}
@@ -7722,7 +7823,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous)
widget->d_func()->hide_sys();
}
}
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
qApp->d_func()->sendSyntheticEnterLeave(widget);
#endif
#ifndef QT_NO_ACCESSIBILITY
@@ -8653,8 +8754,8 @@ bool QWidget::event(QEvent *event)
/*!
This event handler can be reimplemented to handle state changes.
- The state being changed in this event can be retrieved through event \a
- event.
+ The state being changed in this event can be retrieved through the \a event
+ supplied.
Change events include: QEvent::ToolBarChange,
QEvent::ActivationChange, QEvent::EnabledChange, QEvent::FontChange,
@@ -9217,9 +9318,13 @@ QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const
*/
Qt::InputMethodHints QWidget::inputMethodHints() const
{
- Q_D(const QWidget);
#ifndef QT_NO_IM
- return d->imHints;
+ const QWidgetPrivate *priv = d_func();
+ while (priv->inheritsInputMethodHints) {
+ priv = priv->q_func()->parentWidget()->d_func();
+ Q_ASSERT(priv);
+ }
+ return priv->imHints;
#else //QT_NO_IM
return 0;
#endif //QT_NO_IM
@@ -9996,7 +10101,16 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
if (newParent && isAncestorOf(focusWidget()))
focusWidget()->clearFocus();
+ QTLWExtra *oldTopExtra = window()->d_func()->maybeTopData();
+ QWidgetBackingStoreTracker *oldBsTracker = oldTopExtra ? &oldTopExtra->backingStore : 0;
+
d->setParent_sys(parent, f);
+
+ QTLWExtra *topExtra = window()->d_func()->maybeTopData();
+ QWidgetBackingStoreTracker *bsTracker = topExtra ? &topExtra->backingStore : 0;
+ if (oldBsTracker && oldBsTracker != bsTracker)
+ oldBsTracker->unregisterWidgetSubtree(this);
+
if (desktopWidget)
parent = 0;
@@ -10487,7 +10601,6 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8),
"QWidget::setAttribute(WidgetAttribute, bool)",
"QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute");
-
#ifdef Q_WS_WIN
// ### Don't use PaintOnScreen+paintEngine() to do native painting in 5.0
if (attribute == Qt::WA_PaintOnScreen && on && !inherits("QGLWidget")) {
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index 980f40f..eea7cca 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -56,6 +56,10 @@
#include <QtGui/qcursor.h>
#include <QtGui/qkeysequence.h>
+#ifdef Q_WS_QPA //should this go somewhere else?
+#include <QtGui/qplatformwindowformat_qpa.h>
+#endif
+
#ifdef QT_INCLUDE_COMPAT
#include <QtGui/qevent.h>
#endif
@@ -94,9 +98,12 @@ class QHideEvent;
class QInputContext;
class QIcon;
class QWindowSurface;
+class QPlatformWindow;
class QLocale;
class QGraphicsProxyWidget;
class QGraphicsEffect;
+class QRasterWindowSurface;
+class QUnifiedToolbarSurface;
#if defined(Q_WS_X11)
class QX11Info;
#endif
@@ -627,6 +634,16 @@ public:
void setWindowSurface(QWindowSurface *surface);
QWindowSurface *windowSurface() const;
+#if defined(Q_WS_QPA)
+ void setPlatformWindow(QPlatformWindow *window);
+ QPlatformWindow *platformWindow() const;
+
+ void setPlatformWindowFormat(const QPlatformWindowFormat &format);
+ QPlatformWindowFormat platformWindowFormat() const;
+
+ friend class QDesktopScreenWidget;
+#endif
+
Q_SIGNALS:
void customContextMenuRequested(const QPoint &pos);
@@ -758,6 +775,8 @@ private:
friend OSViewRef qt_mac_nativeview_for(const QWidget *w);
friend void qt_event_request_window_change(QWidget *widget);
friend bool qt_mac_sendMacEventToWidget(QWidget *widget, EventRef ref);
+ friend class QRasterWindowSurface;
+ friend class QUnifiedToolbarSurface;
#endif
#ifdef Q_WS_QWS
friend class QWSBackingStore;
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 5e41efa..fc94616 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -2794,19 +2794,38 @@ void QWidgetPrivate::transferChildren()
#ifdef QT_MAC_USE_COCOA
void QWidgetPrivate::setSubWindowStacking(bool set)
{
+ // This will set/remove a visual relationship between parent and child on screen.
+ // The reason for doing this is to ensure that a child always stacks infront of
+ // its parent. Unfortunatly is turns out that [NSWindow addChildWindow] has
+ // several unwanted side-effects, one of them being the moving of a child when
+ // moving the parent, which we choose to accept. A way tougher side-effect is
+ // that Cocoa will hide the parent if you hide the child. And in the case of
+ // a tool window, since it will normally hide when you deactivate the
+ // application, Cocoa will hide the parent upon deactivate as well. The result often
+ // being no more visible windows on screen. So, to make a long story short, we only
+ // allow parent-child relationships between windows that both are either a plain window
+ // or a dialog.
+
Q_Q(QWidget);
- if (!q->isWindow() || !q->testAttribute(Qt::WA_WState_Created))
+ if (!q->isWindow())
+ return;
+ NSWindow *qwin = [qt_mac_nativeview_for(q) window];
+ if (!qwin)
+ return;
+ Qt::WindowType qtype = q->windowType();
+ if (set && !(qtype == Qt::Window || qtype == Qt::Dialog))
+ return;
+ if (set && ![qwin isVisible])
return;
if (QWidget *parent = q->parentWidget()) {
- if (parent->testAttribute(Qt::WA_WState_Created)) {
+ if (NSWindow *pwin = [qt_mac_nativeview_for(parent) window]) {
if (set) {
- if (parent->isVisible()) {
- NSWindow *childwin = qt_mac_window_for(q);
- [qt_mac_window_for(parent) addChildWindow:childwin ordered:NSWindowAbove];
- }
+ Qt::WindowType ptype = parent->window()->windowType();
+ if ([pwin isVisible] && (ptype == Qt::Window || ptype == Qt::Dialog) && ![qwin parentWindow])
+ [pwin addChildWindow:qwin ordered:NSWindowAbove];
} else {
- [qt_mac_window_for(parent) removeChildWindow:qt_mac_window_for(q)];
+ [pwin removeChildWindow:qwin];
}
}
}
@@ -2814,12 +2833,15 @@ void QWidgetPrivate::setSubWindowStacking(bool set)
QList<QWidget *> widgets = q->findChildren<QWidget *>();
for (int i=0; i<widgets.size(); ++i) {
QWidget *child = widgets.at(i);
- if (child->isWindow() && child->testAttribute(Qt::WA_WState_Created) && child->isVisibleTo(q)) {
- if (set) {
- NSWindow *childwin = qt_mac_window_for(child);
- [qt_mac_window_for(q) addChildWindow:childwin ordered:NSWindowAbove];
- } else {
- [qt_mac_window_for(q) removeChildWindow:qt_mac_window_for(child)];
+ if (child && child->isWindow()) {
+ if (NSWindow *cwin = [qt_mac_nativeview_for(child) window]) {
+ if (set) {
+ Qt::WindowType ctype = child->window()->windowType();
+ if ([cwin isVisible] && (ctype == Qt::Window || ctype == Qt::Dialog) && ![cwin parentWindow])
+ [qwin addChildWindow:cwin ordered:NSWindowAbove];
+ } else {
+ [qwin removeChildWindow:qt_mac_window_for(child)];
+ }
}
}
}
@@ -3176,7 +3198,7 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset)
if (iconButton == nil) {
QCFString string(q->windowTitle());
const NSString *tmpString = reinterpret_cast<const NSString *>((CFStringRef)string);
- [qt_mac_window_for(q) setRepresentedURL:[NSURL fileURLWithPath:tmpString]];
+ [qt_mac_window_for(q) setRepresentedURL:[NSURL fileURLWithPath:const_cast<NSString *>(tmpString)]];
iconButton = [qt_mac_window_for(q) standardWindowButton:NSWindowDocumentIconButton];
}
if (icon.isNull()) {
@@ -3442,7 +3464,6 @@ void QWidgetPrivate::show_sys()
#else
// sync the opacity value back (in case of a fade).
[window setAlphaValue:q->windowOpacity()];
- setSubWindowStacking(true);
QWidget *top = 0;
if (QApplicationPrivate::tryModalHelper(q, &top)) {
@@ -3461,6 +3482,7 @@ void QWidgetPrivate::show_sys()
[modalWin orderFront:window];
}
}
+ setSubWindowStacking(true);
#endif
if (q->windowType() == Qt::Popup) {
if (q->focusWidget())
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index c943bd8..4b35238 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -102,6 +102,9 @@ class QWSManager;
#if defined(Q_WS_MAC)
class QCoreGraphicsPaintEnginePrivate;
#endif
+#if defined(Q_WS_QPA)
+class QPlatformWindow;
+#endif
class QPaintEngine;
class QPixmap;
class QWidgetBackingStore;
@@ -122,6 +125,7 @@ public:
void registerWidget(QWidget *w);
void unregisterWidget(QWidget *w);
+ void unregisterWidgetSubtree(QWidget *w);
inline QWidgetBackingStore* data()
{
@@ -225,6 +229,9 @@ struct QTLWExtra {
#endif
#elif defined(Q_OS_SYMBIAN)
uint inExpose : 1; // Prevents drawing recursion
+#elif defined(Q_WS_QPA)
+ QPlatformWindow *platformWindow;
+ QPlatformWindowFormat platformWindowFormat;
#endif
};
@@ -749,6 +756,9 @@ public:
uint isMoved : 1;
uint isGLWidget : 1;
uint usesDoubleBufferedGLContext : 1;
+#ifndef QT_NO_IM
+ uint inheritsInputMethodHints : 1;
+#endif
// *************************** Platform specific ************************************
#if defined(Q_WS_X11) // <----------------------------------------------------------- X11
@@ -840,6 +850,13 @@ public:
bool originalDrawMethod;
// Do we need to change the methods?
bool changeMethods;
+ bool hasOwnContext;
+ CGContextRef cgContext;
+ QRegion ut_rg;
+ QPoint ut_pt;
+ bool isInUnifiedToolbar;
+ QWindowSurface *unifiedSurface;
+ QPoint toolbar_offset;
#endif
void determineWindowClass();
void transferChildren();
@@ -867,6 +884,14 @@ public:
void updateCursor() const;
#endif
QScreen* getScreen() const;
+#elif defined(Q_WS_QPA)
+ void setMaxWindowState_helper();
+ void setFullScreenSize_helper();
+
+ int screenNumber; // screen the widget should be displayed on
+#ifndef QT_NO_CURSOR
+ void updateCursor() const;
+#endif
#elif defined(Q_OS_SYMBIAN) // <--------------------------------------------------------- SYMBIAN
static QWidget *mouseGrabber;
static QWidget *keyboardGrabber;
diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp
new file mode 100644
index 0000000..ac8b37d
--- /dev/null
+++ b/src/gui/kernel/qwidget_qpa.cpp
@@ -0,0 +1,895 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "QtGui/qwidget.h"
+#include "QtGui/qevent.h"
+#include "QtGui/qapplication.h"
+#include "QtGui/private/qbackingstore_p.h"
+#include "QtGui/private/qwidget_p.h"
+#include "QtGui/private/qgraphicssystem_p.h"
+#include "QtGui/private/qapplication_p.h"
+#include "QtGui/qdesktopwidget.h"
+#include "QtGui/qplatformwindow_qpa.h"
+
+#include <QtGui/QPlatformCursor>
+
+QT_BEGIN_NAMESPACE
+static QPlatformScreen *qt_screenForWidget(const QWidget *w);
+
+void q_createNativeChildrenAndSetParent(QPlatformWindow *parentWindow, const QWidget *parentWidget)
+{
+ QObjectList children = parentWidget->children();
+ for (int i = 0; i < children.size(); i++) {
+ if (children.at(i)->isWidgetType()) {
+ const QWidget *childWidget = qobject_cast<const QWidget *>(children.at(i));
+ if (childWidget) { // should not be necessary
+ if (childWidget->testAttribute(Qt::WA_NativeWindow)) {
+ if (!childWidget->platformWindow())
+ childWidget->winId();
+ }
+ if (childWidget->platformWindow()) {
+ childWidget->platformWindow()->setParent(parentWindow);
+ } else {
+ q_createNativeChildrenAndSetParent(parentWindow,childWidget);
+ }
+ }
+ }
+ }
+
+}
+
+void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow)
+{
+ Q_Q(QWidget);
+
+ Q_UNUSED(window);
+ Q_UNUSED(initializeWindow);
+ Q_UNUSED(destroyOldWindow);
+
+ Qt::WindowFlags flags = data.window_flags;
+
+ if ((!q->testAttribute(Qt::WA_NativeWindow) && !q->isWindow()) || q->windowType() == Qt::Desktop )
+ return; // we only care about real toplevels
+
+ QWindowSurface *surface = q->windowSurface();
+ QPlatformWindow *platformWindow = q->platformWindow();
+
+ if (!platformWindow) {
+ platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q);
+ }
+ Q_ASSERT(platformWindow);
+
+ if (!surface) {
+ surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId());
+ }
+
+ data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags);
+
+ setWinId(q->platformWindow()->winId());
+
+ //first check children. and create them if necessary
+ q_createNativeChildrenAndSetParent(q->platformWindow(),q);
+
+ //if we we have a parent, then set correct parent;
+ if (!q->isWindow()) {
+ if (QWidget *nativeParent = q->nativeParentWidget()) {
+ if (nativeParent->platformWindow()) {
+ platformWindow->setParent(nativeParent->platformWindow());
+ }
+ }
+ }
+
+ QApplicationPrivate::platformIntegration()->moveToScreen(q, screenNumber);
+// qDebug() << "create_sys" << q << q->internalWinId();
+}
+
+void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
+{
+ Q_D(QWidget);
+
+ if ((windowType() == Qt::Popup))
+ qApp->d_func()->closePopup(this);
+
+ //### we don't have proper focus event handling yet
+ if (this == QApplicationPrivate::active_window)
+ QApplication::setActiveWindow(0);
+
+ if (windowType() != Qt::Desktop) {
+ if (destroySubWindows) {
+ QObjectList childList(children());
+ for (int i = 0; i < childList.size(); i++) {
+ QWidget *widget = qobject_cast<QWidget *>(childList.at(i));
+ if (widget && widget->testAttribute(Qt::WA_NativeWindow)) {
+ if (widget->platformWindow()) {
+ widget->destroy();
+ }
+ }
+ }
+ }
+ if (destroyWindow) {
+ d->deleteTLSysExtra();
+ } else {
+ if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) {
+ d->hide_sys();
+ }
+ }
+ }
+}
+
+void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f)
+{
+ Q_Q(QWidget);
+
+ // QWidget *oldParent = q->parentWidget();
+ Qt::WindowFlags oldFlags = data.window_flags;
+
+ int targetScreen = -1;
+ // Handle a request to move the widget to a particular screen
+ if (newparent && newparent->windowType() == Qt::Desktop) {
+ // make sure the widget is created on the same screen as the
+ // programmer specified desktop widget
+
+ // get the desktop's screen number
+ targetScreen = newparent->d_func()->screenNumber;
+ newparent = 0;
+ }
+
+ if (parent != newparent) {
+ QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function???
+ if (q->platformWindow() && newparent) {
+ QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget();
+ if (parentWithWindow && parentWithWindow->platformWindow()) {
+ q->platformWindow()->setParent(parentWithWindow->platformWindow());
+ }
+ }
+
+ }
+
+ if (!newparent) {
+ f |= Qt::Window;
+ if (targetScreen == -1) {
+ if (parent)
+ targetScreen = qobject_cast<QWidget *>(parent)->d_func()->screenNumber;
+ }
+ }
+
+ bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide);
+
+ // Reparenting toplevel to child
+ if (!(f&Qt::Window) && (oldFlags&Qt::Window) && !q->testAttribute(Qt::WA_NativeWindow)) {
+ //qDebug() << "setParent_sys() change from toplevel";
+ q->destroy();
+ }
+
+ data.window_flags = f;
+ q->setAttribute(Qt::WA_WState_Created, false);
+ q->setAttribute(Qt::WA_WState_Visible, false);
+ q->setAttribute(Qt::WA_WState_Hidden, false);
+
+ if (f & Qt::Window) {
+ //qDebug() << "setParent_sys" << q << newparent << hex << f;
+ if (QPlatformWindow *window = q->platformWindow())
+ data.window_flags = window->setWindowFlags(data.window_flags);
+ }
+
+ // Reparenting child to toplevel
+ if ((f&Qt::Window) && !(oldFlags&Qt::Window)) {
+ //qDebug() << "setParent_sys() change to toplevel";
+ q->create(); //### too early: this ought to happen at show() time
+ }
+
+
+ if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden)
+ q->setAttribute(Qt::WA_WState_Hidden);
+ q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden);
+
+ // move the window to the selected screen
+ if (!newparent && targetScreen != -1) {
+ screenNumber = targetScreen;
+ // only if it is already created
+ if (q->testAttribute(Qt::WA_WState_Created)) {
+ QPlatformIntegration *platform = QApplicationPrivate::platformIntegration();
+ platform->moveToScreen(q, targetScreen);
+ }
+ }
+}
+
+QPoint QWidget::mapToGlobal(const QPoint &pos) const
+{
+ int x=pos.x(), y=pos.y();
+ const QWidget* w = this;
+ while (w) {
+ x += w->data->crect.x();
+ y += w->data->crect.y();
+ w = w->isWindow() ? 0 : w->parentWidget();
+ }
+ return QPoint(x, y);
+}
+
+QPoint QWidget::mapFromGlobal(const QPoint &pos) const
+{
+ int x=pos.x(), y=pos.y();
+ const QWidget* w = this;
+ while (w) {
+ x -= w->data->crect.x();
+ y -= w->data->crect.y();
+ w = w->isWindow() ? 0 : w->parentWidget();
+ }
+ return QPoint(x, y);
+}
+
+void QWidgetPrivate::updateSystemBackground() {}
+
+#ifndef QT_NO_CURSOR
+void QWidgetPrivate::setCursor_sys(const QCursor &cursor)
+{
+ Q_UNUSED(cursor);
+ Q_Q(QWidget);
+ if (q->isVisible())
+ qt_qpa_set_cursor(q, false);
+}
+
+void QWidgetPrivate::unsetCursor_sys()
+{
+ Q_Q(QWidget);
+ if (q->isVisible())
+ qt_qpa_set_cursor(q, false);
+}
+
+void QWidgetPrivate::updateCursor() const
+{
+ // XXX
+}
+
+#endif //QT_NO_CURSOR
+
+void QWidgetPrivate::setWindowTitle_sys(const QString &caption)
+{
+ Q_Q(QWidget);
+ if (!q->isWindow())
+ return;
+
+ if (QPlatformWindow *window = q->platformWindow())
+ window->setWindowTitle(caption);
+
+}
+
+void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/)
+{
+}
+
+void QWidgetPrivate::setWindowIconText_sys(const QString &iconText)
+{
+ Q_UNUSED(iconText);
+}
+
+QWidget *qt_pressGrab = 0;
+QWidget *qt_mouseGrb = 0;
+static QWidget *keyboardGrb = 0;
+
+void QWidget::grabMouse()
+{
+ if (qt_mouseGrb)
+ qt_mouseGrb->releaseMouse();
+
+ // XXX
+ //qwsDisplay()->grabMouse(this,true);
+
+ qt_mouseGrb = this;
+ qt_pressGrab = 0;
+}
+
+#ifndef QT_NO_CURSOR
+void QWidget::grabMouse(const QCursor &cursor)
+{
+ Q_UNUSED(cursor);
+
+ if (qt_mouseGrb)
+ qt_mouseGrb->releaseMouse();
+
+ // XXX
+ //qwsDisplay()->grabMouse(this,true);
+ //qwsDisplay()->selectCursor(this, cursor.handle());
+ qt_mouseGrb = this;
+ qt_pressGrab = 0;
+}
+#endif
+
+void QWidget::releaseMouse()
+{
+ if (qt_mouseGrb == this) {
+ // XXX
+ //qwsDisplay()->grabMouse(this,false);
+ qt_mouseGrb = 0;
+ }
+}
+
+void QWidget::grabKeyboard()
+{
+ if (keyboardGrb)
+ keyboardGrb->releaseKeyboard();
+ // XXX
+ //qwsDisplay()->grabKeyboard(this, true);
+ keyboardGrb = this;
+}
+
+void QWidget::releaseKeyboard()
+{
+ if (keyboardGrb == this) {
+ // XXX
+ //qwsDisplay()->grabKeyboard(this, false);
+ keyboardGrb = 0;
+ }
+}
+
+QWidget *QWidget::mouseGrabber()
+{
+ if (qt_mouseGrb)
+ return qt_mouseGrb;
+ return qt_pressGrab;
+}
+
+QWidget *QWidget::keyboardGrabber()
+{
+ return keyboardGrb;
+}
+
+void QWidget::activateWindow()
+{
+ // XXX
+// qDebug() << "QWidget::activateWindow" << this;
+ QApplication::setActiveWindow(this); //#####
+}
+
+void QWidgetPrivate::show_sys()
+{
+ Q_Q(QWidget);
+ q->setAttribute(Qt::WA_Mapped);
+ if (q->testAttribute(Qt::WA_DontShowOnScreen)) {
+ invalidateBuffer(q->rect());
+ return;
+ }
+
+ QApplication::postEvent(q, new QUpdateLaterEvent(q->rect()));
+
+ QPlatformWindow *window = q->platformWindow();
+ if (window) {
+ const QRect geomRect = q->geometry();
+ const QRect windowRect = window->geometry();
+ if (windowRect != geomRect) {
+ window->setGeometry(geomRect);
+ }
+ if (q->isWindow()) {
+ if (QWindowSurface *surface = q->windowSurface()) {
+ if (windowRect.size() != geomRect.size()) {
+ surface->resize(geomRect.size());
+ }
+ }
+
+ if (window)
+ window->setVisible(true);
+
+ if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint))
+ q->activateWindow(); //###
+ }
+ }
+}
+
+
+void QWidgetPrivate::hide_sys()
+{
+ Q_Q(QWidget);
+ q->setAttribute(Qt::WA_Mapped, false);
+ if (!q->isWindow()) {
+ QWidget *p = q->parentWidget();
+ if (p &&p->isVisible()) {
+ invalidateBuffer(q->rect());
+ }
+ return;
+ }
+ if (QPlatformWindow *window = q->platformWindow()) {
+ window->setVisible(false);
+ }
+
+ //### we don't yet have proper focus event handling
+ if (q == QApplicationPrivate::active_window)
+ QApplication::setActiveWindow(0);
+
+}
+
+void QWidgetPrivate::setMaxWindowState_helper()
+{
+ setFullScreenSize_helper(); //### decoration size
+}
+
+void QWidgetPrivate::setFullScreenSize_helper()
+{
+ Q_Q(QWidget);
+
+ const uint old_state = data.in_set_window_state;
+ data.in_set_window_state = 1;
+
+ const QRect screen = qApp->desktop()->screenGeometry(qApp->desktop()->screenNumber(q));
+ q->move(screen.topLeft());
+ q->resize(screen.size());
+
+ data.in_set_window_state = old_state;
+}
+
+static Qt::WindowStates effectiveState(Qt::WindowStates state)
+ {
+ if (state & Qt::WindowMinimized)
+ return Qt::WindowMinimized;
+ else if (state & Qt::WindowFullScreen)
+ return Qt::WindowFullScreen;
+ else if (state & Qt::WindowMaximized)
+ return Qt::WindowMaximized;
+ return Qt::WindowNoState;
+ }
+
+void QWidget::setWindowState(Qt::WindowStates newstate)
+{
+ Q_D(QWidget);
+ Qt::WindowStates oldstate = windowState();
+ if (oldstate == newstate)
+ return;
+ if (isWindow() && !testAttribute(Qt::WA_WState_Created))
+ create();
+
+ data->window_state = newstate;
+ data->in_set_window_state = 1;
+ bool needShow = false;
+ Qt::WindowStates newEffectiveState = effectiveState(newstate);
+ Qt::WindowStates oldEffectiveState = effectiveState(oldstate);
+ if (isWindow() && newEffectiveState != oldEffectiveState) {
+ d->createTLExtra();
+ if (oldEffectiveState == Qt::WindowNoState) { //normal
+ d->topData()->normalGeometry = geometry();
+ } else if (oldEffectiveState == Qt::WindowFullScreen) {
+ setParent(0, d->topData()->savedFlags);
+ needShow = true;
+ } else if (oldEffectiveState == Qt::WindowMinimized) {
+ needShow = true;
+ }
+
+ if (newEffectiveState == Qt::WindowMinimized) {
+ //### not ideal...
+ hide();
+ needShow = false;
+ } else if (newEffectiveState == Qt::WindowFullScreen) {
+ d->topData()->savedFlags = windowFlags();
+ setParent(0, Qt::FramelessWindowHint | (windowFlags() & Qt::WindowStaysOnTopHint));
+ d->setFullScreenSize_helper();
+ raise();
+ needShow = true;
+ } else if (newEffectiveState == Qt::WindowMaximized) {
+ createWinId();
+ d->setMaxWindowState_helper();
+ } else { //normal
+ QRect r = d->topData()->normalGeometry;
+ if (r.width() >= 0) {
+ d->topData()->normalGeometry = QRect(0,0,-1,-1);
+ setGeometry(r);
+ }
+ }
+ }
+ data->in_set_window_state = 0;
+
+ if (needShow)
+ show();
+
+ if (newstate & Qt::WindowActive)
+ activateWindow();
+
+ QWindowStateChangeEvent e(oldstate);
+ QApplication::sendEvent(this, &e);
+}
+
+void QWidgetPrivate::setFocus_sys()
+{
+
+}
+
+void QWidgetPrivate::raise_sys()
+{
+ Q_Q(QWidget);
+ if (q->isWindow()) {
+ q->platformWindow()->raise();
+ }
+}
+
+void QWidgetPrivate::lower_sys()
+{
+ Q_Q(QWidget);
+ if (q->isWindow()) {
+ Q_ASSERT(q->testAttribute(Qt::WA_WState_Created));
+ q->platformWindow()->lower();
+ } else if (QWidget *p = q->parentWidget()) {
+ setDirtyOpaqueRegion();
+ p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry()));
+ }
+}
+
+void QWidgetPrivate::stackUnder_sys(QWidget*)
+{
+ Q_Q(QWidget);
+ if (QWidget *p = q->parentWidget()) {
+ setDirtyOpaqueRegion();
+ p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry()));
+ }
+}
+
+void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove)
+{
+ Q_Q(QWidget);
+ if (extra) { // any size restrictions?
+ w = qMin(w,extra->maxw);
+ h = qMin(h,extra->maxh);
+ w = qMax(w,extra->minw);
+ h = qMax(h,extra->minh);
+ }
+
+ QPoint oldp = q->geometry().topLeft();
+ QSize olds = q->size();
+ QRect r(x, y, w, h);
+
+ bool isResize = olds != r.size();
+ isMove = oldp != r.topLeft(); //### why do we have isMove as a parameter?
+
+
+ // We only care about stuff that changes the geometry, or may
+ // cause the window manager to change its state
+ if (r.size() == olds && oldp == r.topLeft())
+ return;
+
+ if (!data.in_set_window_state) {
+ q->data->window_state &= ~Qt::WindowMaximized;
+ q->data->window_state &= ~Qt::WindowFullScreen;
+ if (q->isWindow())
+ topData()->normalGeometry = QRect(0, 0, -1, -1);
+ }
+
+ QPoint oldPos = q->pos();
+ data.crect = r;
+
+ if (q->isVisible()) {
+ if (q->platformWindow()) {
+ if (q->isWindow()) {
+ q->platformWindow()->setGeometry(q->frameGeometry());
+ } else {
+ QPoint posInNativeParent = q->mapTo(q->nativeParentWidget(),QPoint());
+ q->platformWindow()->setGeometry(QRect(posInNativeParent,r.size()));
+ }
+ const QWidgetBackingStore *bs = maybeBackingStore();
+ if (bs->windowSurface) {
+ if (isResize)
+ bs->windowSurface->resize(r.size());
+ }
+ } else {
+ if (isMove && !isResize)
+ moveRect(QRect(oldPos, olds), x - oldPos.x(), y - oldPos.y());
+ else
+ invalidateBuffer_resizeHelper(oldPos, olds);
+ }
+
+ if (isMove) {
+ QMoveEvent e(q->pos(), oldPos);
+ QApplication::sendEvent(q, &e);
+ }
+ if (isResize) {
+ QResizeEvent e(r.size(), olds);
+ QApplication::sendEvent(q, &e);
+ if (q->platformWindow())
+ q->update();
+ }
+ } else { // not visible
+ if (isMove && q->pos() != oldPos)
+ q->setAttribute(Qt::WA_PendingMoveEvent, true);
+ if (isResize)
+ q->setAttribute(Qt::WA_PendingResizeEvent, true);
+ }
+
+}
+
+void QWidgetPrivate::setConstraints_sys()
+{
+}
+
+void QWidgetPrivate::scroll_sys(int dx, int dy)
+{
+ Q_Q(QWidget);
+ scrollChildren(dx, dy);
+ scrollRect(q->rect(), dx, dy);
+}
+
+void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r)
+{
+ scrollRect(r, dx, dy);
+}
+
+static QPlatformScreen *qt_screenForWidget(const QWidget *w)
+{
+ if (!w)
+ return 0;
+ QRect frame = w->frameGeometry();
+ if (!w->isWindow())
+ frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
+ const QPoint p = (frame.topLeft() + frame.bottomRight()) / 2;
+
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ QList<QPlatformScreen *> screens = pi->screens();
+
+ for (int i = 0; i < screens.size(); ++i) {
+ if (screens[i]->geometry().contains(p))
+ return screens[i];
+ }
+
+ // Assume screen zero if we have it.
+ if (!screens.isEmpty())
+ return screens[0];
+ else
+ qWarning("qt_screenForWidget: no screens");
+
+ return 0;
+}
+
+int QWidget::metric(PaintDeviceMetric m) const
+{
+ Q_D(const QWidget);
+
+ QPlatformScreen *screen = qt_screenForWidget(this);
+ if (!screen) {
+ if (m == PdmDpiX || m == PdmDpiY)
+ return 72;
+ return QPaintDevice::metric(m);
+ }
+ int val;
+ if (m == PdmWidth) {
+ val = data->crect.width();
+ } else if (m == PdmWidthMM) {
+ val = data->crect.width() * screen->physicalSize().width() / screen->geometry().width();
+ } else if (m == PdmHeight) {
+ val = data->crect.height();
+ } else if (m == PdmHeightMM) {
+ val = data->crect.height() * screen->physicalSize().height() / screen->geometry().height();
+ } else if (m == PdmDepth) {
+ return screen->depth();
+ } else if (m == PdmDpiX || m == PdmPhysicalDpiX) {
+ if (d->extra && d->extra->customDpiX)
+ return d->extra->customDpiX;
+ else if (d->parent)
+ return static_cast<QWidget *>(d->parent)->metric(m);
+ return qRound(screen->geometry().width() / double(screen->physicalSize().width() / 25.4));
+ } else if (m == PdmDpiY || m == PdmPhysicalDpiY) {
+ if (d->extra && d->extra->customDpiY)
+ return d->extra->customDpiY;
+ else if (d->parent)
+ return static_cast<QWidget *>(d->parent)->metric(m);
+ return qRound(screen->geometry().height() / double(screen->physicalSize().height() / 25.4));
+ } else {
+ val = QPaintDevice::metric(m);// XXX
+ }
+ return val;
+}
+
+/*!
+ \preliminary
+
+ Sets the window to be the \a window specified.
+ The QWidget takes ownership of the \a surface.
+*/
+void QWidget::setPlatformWindow(QPlatformWindow *window)
+{
+ Q_D(QWidget);
+
+ QTLWExtra *topData = d->topData();
+ if (topData->platformWindow == window)
+ return;
+
+ delete topData->platformWindow;
+ topData->platformWindow = window;
+}
+
+/*!
+ \preliminary
+
+ Returns the QPlatformWindow this widget will be drawn into.
+*/
+QPlatformWindow *QWidget::platformWindow() const
+{
+ Q_D(const QWidget);
+ QTLWExtra *extra = d->maybeTopData();
+ if (extra && extra->platformWindow)
+ return extra->platformWindow;
+
+ return 0;
+}
+
+void QWidget::setPlatformWindowFormat(const QPlatformWindowFormat &format)
+{
+ if (isWindow() || testAttribute(Qt::WA_NativeWindow)) {
+ Q_D(QWidget);
+ QTLWExtra *topData = d->topData();
+ topData->platformWindowFormat = format;
+ if (testAttribute(Qt::WA_WState_Created)) {
+ bool wasVisible = testAttribute(Qt::WA_WState_Visible);
+ destroy();
+ d->create_sys(0,true,true);
+ if (wasVisible)
+ topData->platformWindow->setVisible(true);
+ }
+ }
+}
+
+QPlatformWindowFormat QWidget::platformWindowFormat() const
+{
+ Q_D(const QWidget);
+
+ QTLWExtra *extra = d->maybeTopData();
+ if (extra){
+ return extra->platformWindowFormat;
+ } else {
+ return QPlatformWindowFormat::defaultFormat();
+ }
+}
+
+void QWidgetPrivate::createSysExtra()
+{
+}
+
+void QWidgetPrivate::deleteSysExtra()
+{
+
+}
+
+void QWidgetPrivate::createTLSysExtra()
+{
+}
+
+void QWidgetPrivate::deleteTLSysExtra()
+{
+ if (extra && extra->topextra) {
+ delete extra->topextra->platformWindow;
+ extra->topextra->platformWindow = 0;
+ extra->topextra->backingStore.destroy();
+ }
+}
+
+void QWidgetPrivate::registerDropSite(bool on)
+{
+ Q_UNUSED(on);
+}
+
+void QWidgetPrivate::setMask_sys(const QRegion &region)
+{
+ Q_UNUSED(region);
+ // XXX
+}
+
+void QWidgetPrivate::updateFrameStrut()
+{
+ // XXX
+}
+
+void QWidgetPrivate::setWindowOpacity_sys(qreal level)
+{
+ Q_Q(QWidget);
+ q->platformWindow()->setOpacity(level);
+}
+
+void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect)
+{
+ Q_UNUSED(dontShow);
+ Q_UNUSED(oldRect);
+ // XXX
+}
+
+QPaintEngine *QWidget::paintEngine() const
+{
+ qWarning("QWidget::paintEngine: Should no longer be called");
+ return 0; //##### @@@
+}
+
+QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys()
+{
+ Q_Q(QWidget);
+ return QApplicationPrivate::platformIntegration()->createWindowSurface(q,0);
+}
+
+void QWidgetPrivate::setModal_sys()
+{
+}
+
+#ifndef QT_NO_CURSOR
+void qt_qpa_set_cursor(QWidget * w, bool force)
+{
+ static QCursor arrowCursor(Qt::ArrowCursor);
+ static QPointer<QWidget> lastUnderMouse = 0;
+
+ QCursor * override = QApplication::overrideCursor();
+
+ if (override && w != 0)
+ return;
+
+ QWidget *cursorWidget;
+ QCursor cursorCursor;
+
+ do {
+ if (w == 0) {
+ if (override) {
+ cursorCursor = *override;
+ cursorWidget = QApplication::topLevelAt(QCursor::pos());
+ break;
+ }
+ w = QApplication::widgetAt(QCursor::pos());
+ if (w == 0) // clear the override cursor while over empty space
+ w = QApplication::desktop();
+ } else if (force) {
+ lastUnderMouse = w;
+ } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse
+ && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) {
+ w = lastUnderMouse;
+ }
+ if (w == QApplication::desktop() && !override) {
+ cursorCursor = arrowCursor;
+ cursorWidget = w;
+ break;
+ }
+
+ QWidget * curWin = QApplication::activeWindow();
+ if (!curWin && w && w->internalWinId())
+ return;
+ QWidget* cW = w && !w->internalWinId() ? w : curWin;
+
+ if (!cW || cW->window() != w->window() ||
+ !cW->isVisible() || !cW->underMouse() || override)
+ return;
+
+ cursorCursor = w->cursor();
+ cursorWidget = w;
+ } while (0);
+ foreach (QWeakPointer<QPlatformCursor> cursor, QPlatformCursorPrivate::getInstances())
+ if (cursor)
+ cursor.data()->changeCursor(&cursorCursor, cursorWidget);
+}
+#endif //QT_NO_CURSOR
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qwidget_qws.cpp b/src/gui/kernel/qwidget_qws.cpp
index 3145136..c6cbbd0 100644
--- a/src/gui/kernel/qwidget_qws.cpp
+++ b/src/gui/kernel/qwidget_qws.cpp
@@ -1017,6 +1017,30 @@ int QWidget::metric(PaintDeviceMetric m) const
return static_cast<QWidget *>(d->parent)->metric(m);
const QScreen *screen = d->getScreen();
return qRound(screen->height() / double(screen->physicalHeight() / 25.4));
+ } else if (m == PdmNumColors) {
+ QScreen *screen = d->getScreen();
+ int ret = screen->colorCount();
+ if (!ret) {
+ const int depth = qwsDisplay()->depth();
+ switch (depth) {
+ case 1:
+ ret = 2;
+ break;
+ case 8:
+ ret = 256;
+ break;
+ case 16:
+ ret = 65536;
+ break;
+ case 24:
+ ret = 16777216;
+ break;
+ case 32:
+ ret = 2147483647;
+ break;
+ }
+ }
+ return ret;
} else {
val = QPaintDevice::metric(m);// XXX
}
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 41ce11e..636b306 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -548,7 +548,7 @@ void QWidgetPrivate::show_sys()
id->MakeVisible(true);
- if(q->isWindow())
+ if(q->isWindow()&&!q->testAttribute(Qt::WA_ShowWithoutActivating))
id->setFocusSafely(true);
}
@@ -581,7 +581,7 @@ void QWidgetPrivate::hide_sys()
QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId());
if (id) {
- //Incorrect optimisation - for popup windows, Qt's focus is moved before
+ //Incorrect optimization - for popup windows, Qt's focus is moved before
//hide_sys is called, resulting in the popup window keeping its elevated
//position in the CONE control stack.
//This can result in keyboard focus being in an invisible widget in some
@@ -713,7 +713,8 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
// old_winid may not have received a 'not visible' visibility
// changed event before being destroyed; make sure that it is
// removed from the backing store's list of visible windows.
- S60->controlVisibilityChanged(old_winid, false);
+ if (old_winid)
+ S60->controlVisibilityChanged(old_winid, false);
setWinId(0);
diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp
index 39ed750..c358b9b 100644
--- a/src/gui/kernel/qwidget_win.cpp
+++ b/src/gui/kernel/qwidget_win.cpp
@@ -329,18 +329,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
if (topLevel) {
if ((type == Qt::Window || dialog || tool)) {
if (!(flags & Qt::FramelessWindowHint)) {
- if (!(flags & Qt::MSWindowsFixedSizeDialogHint)) {
+ style |= WS_POPUP;
+ if (!(flags & Qt::MSWindowsFixedSizeDialogHint))
style |= WS_THICKFRAME;
- if(!(flags &
- ( Qt::WindowSystemMenuHint
- | Qt::WindowTitleHint
- | Qt::WindowMinMaxButtonsHint
- | Qt::WindowCloseButtonHint
- | Qt::WindowContextHelpButtonHint)))
- style |= WS_POPUP;
- } else {
- style |= WS_POPUP | WS_DLGFRAME;
- }
+ else
+ style |= WS_DLGFRAME;
}
if (flags & Qt::WindowTitleHint)
style |= WS_CAPTION;
@@ -424,6 +417,14 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
if (!q->testAttribute(Qt::WA_Resized)) {
w = sw/2;
h = 4*sh/10;
+ if (extra) {
+ int dx = rect.right - rect.left;
+ int dy = rect.bottom - rect.top;
+ w = qMin(w, extra->maxw + dx);
+ h = qMin(h, extra->maxh + dy);
+ w = qMax(w, extra->minw + dx);
+ h = qMax(h, extra->minh + dy);
+ }
}
if (!wasMoved) {
x = sw/2 - w/2;
diff --git a/src/gui/kernel/qwindowdefs.h b/src/gui/kernel/qwindowdefs.h
index a721c7d..1dc7203 100644
--- a/src/gui/kernel/qwindowdefs.h
+++ b/src/gui/kernel/qwindowdefs.h
@@ -131,6 +131,12 @@ QT_END_HEADER
#endif // Q_WS_QWS
+#if defined(Q_WS_QPA)
+
+typedef unsigned long WId;
+
+#endif // Q_WS_QPA
+
#if defined(Q_OS_SYMBIAN)
class CCoeControl;
typedef CCoeControl * WId;
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp
new file mode 100644
index 0000000..bb29cbf
--- /dev/null
+++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qwindowsysteminterface_qpa.h"
+#include "qwindowsysteminterface_qpa_p.h"
+#include "qapplication_p.h"
+#include <QAbstractEventDispatcher>
+
+QT_BEGIN_NAMESPACE
+
+
+QTime QWindowSystemInterfacePrivate::eventTime;
+
+//------------------------------------------------------------
+//
+// Callback functions for plugins:
+//
+
+QList<QWindowSystemInterfacePrivate::WindowSystemEvent *> QWindowSystemInterfacePrivate::windowSystemEventQueue;
+QMutex QWindowSystemInterfacePrivate::queueMutex;
+
+extern QPointer<QWidget> qt_last_mouse_receiver;
+
+
+void QWindowSystemInterface::handleEnterEvent(QWidget *tlw)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ return;
+
+ QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+ }
+}
+
+void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ return;
+ }
+ QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ return;
+ }
+ QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+
+void QWindowSystemInterface::handleCloseEvent(QWidget *tlw)
+{
+ if (tlw) {
+ QWindowSystemInterfacePrivate::CloseEvent *e =
+ new QWindowSystemInterfacePrivate::CloseEvent(tlw);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+ }
+}
+
+/*!
+
+\a tlw == 0 means that \a ev is in global coords only
+
+
+*/
+void QWindowSystemInterface::handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) {
+ unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleMouseEvent(w, time, local, global, b);
+}
+
+void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ tlw = 0;
+ }
+ QWindowSystemInterfacePrivate::MouseEvent * e =
+ new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) {
+ unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleKeyEvent(w, time, t, k, mods, text, autorep, count);
+}
+
+void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ tlw = 0;
+ }
+
+ QWindowSystemInterfacePrivate::KeyEvent * e =
+ new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) {
+ unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleWheelEvent(w, time, local, global, d, o);
+}
+
+void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
+{
+ if (tlw) {
+ QWidgetData *data = qt_qwidget_data(tlw);
+ if (data->in_destructor)
+ tlw = 0;
+ }
+
+ QWindowSystemInterfacePrivate::WheelEvent *e =
+ new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+int QWindowSystemInterfacePrivate::windowSystemEventsQueued()
+{
+ queueMutex.lock();
+ int ret = windowSystemEventQueue.count();
+ queueMutex.unlock();
+ return ret;
+}
+
+QWindowSystemInterfacePrivate::WindowSystemEvent * QWindowSystemInterfacePrivate::getWindowSystemEvent()
+{
+ queueMutex.lock();
+ QWindowSystemInterfacePrivate::WindowSystemEvent *ret;
+ if (windowSystemEventQueue.isEmpty())
+ ret = 0;
+ else
+ ret = windowSystemEventQueue.takeFirst();
+ queueMutex.unlock();
+ return ret;
+}
+
+void QWindowSystemInterfacePrivate::queueWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *ev)
+{
+ queueMutex.lock();
+ windowSystemEventQueue.append(ev);
+ queueMutex.unlock();
+
+ QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_qpa_core_dispatcher();
+ if (dispatcher)
+ dispatcher->wakeUp();
+}
+
+void QWindowSystemInterface::handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points) {
+ unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleTouchEvent(w, time, type, devType, points);
+}
+
+void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points)
+{
+ if (!points.size()) // Touch events must have at least one point
+ return;
+
+ QList<QTouchEvent::TouchPoint> touchPoints;
+ Qt::TouchPointStates states;
+ QTouchEvent::TouchPoint p;
+
+ QList<struct TouchPoint>::const_iterator point = points.constBegin();
+ QList<struct TouchPoint>::const_iterator end = points.constEnd();
+ while (point != end) {
+ p.setId(point->id);
+ p.setPressure(point->pressure);
+ states |= point->state;
+ Qt::TouchPointStates state = point->state;
+ if (point->isPrimary) {
+ state |= Qt::TouchPointPrimary;
+ }
+ p.setState(state);
+ p.setRect(point->area);
+ p.setScreenPos(point->area.center());
+ p.setNormalizedPos(point->normalPosition);
+
+ touchPoints.append(p);
+ ++point;
+ }
+
+ QWindowSystemInterfacePrivate::TouchEvent *e =
+ new QWindowSystemInterfacePrivate::TouchEvent(tlw, timestamp, type, devType, touchPoints);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleScreenGeometryChange(int screenIndex)
+{
+ QWindowSystemInterfacePrivate::ScreenGeometryEvent *e =
+ new QWindowSystemInterfacePrivate::ScreenGeometryEvent(screenIndex);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleScreenAvailableGeometryChange(int screenIndex)
+{
+ QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e =
+ new QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent(screenIndex);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+void QWindowSystemInterface::handleScreenCountChange(int count)
+{
+ QWindowSystemInterfacePrivate::ScreenCountEvent *e =
+ new QWindowSystemInterfacePrivate::ScreenCountEvent(count);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h
new file mode 100644
index 0000000..1c79f2a
--- /dev/null
+++ b/src/gui/kernel/qwindowsysteminterface_qpa.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QWINDOWSYSTEMINTERFACE_H
+#define QWINDOWSYSTEMINTERFACE_H
+
+#include <QtCore/QTime>
+#include <QtGui/qwindowdefs.h>
+#include <QtCore/QEvent>
+#include <QtGui/QWidget>
+#include <QtCore/QWeakPointer>
+#include <QtCore/QMutex>
+#include <QtGui/QTouchEvent>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class Q_GUI_EXPORT QWindowSystemInterface
+{
+public:
+ static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
+ static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b);
+
+ static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
+ static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
+
+ static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
+ static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o);
+
+ struct TouchPoint {
+ int id; // for application use
+ bool isPrimary; // for application use
+ QPointF normalPosition; // touch device coordinates, (0 to 1, 0 to 1)
+ QRectF area; // the touched area, centered at position in screen coordinates
+ qreal pressure; // 0 to 1
+ Qt::TouchPointState state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released}
+ };
+
+ static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
+ static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList<struct TouchPoint> &points);
+
+ static void handleGeometryChange(QWidget *w, const QRect &newRect);
+ static void handleCloseEvent(QWidget *w);
+ static void handleEnterEvent(QWidget *w);
+ static void handleLeaveEvent(QWidget *w);
+
+ // Changes to the screen
+ static void handleScreenGeometryChange(int screenIndex);
+ static void handleScreenAvailableGeometryChange(int screenIndex);
+ static void handleScreenCountChange(int count);
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+#endif // QWINDOWSYSTEMINTERFACE_H
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
new file mode 100644
index 0000000..78e1f33
--- /dev/null
+++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
@@ -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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QWINDOWSYSTEMINTERFACE_QPA_P_H
+#define QWINDOWSYSTEMINTERFACE_QPA_P_H
+
+#include "qwindowsysteminterface_qpa.h"
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QWindowSystemInterfacePrivate {
+public:
+ enum EventType {
+ Close,
+ GeometryChange,
+ Enter,
+ Leave,
+ Mouse,
+ Wheel,
+ Key,
+ Touch,
+ ScreenGeometry,
+ ScreenAvailableGeometry,
+ ScreenCountChange
+ };
+
+ class WindowSystemEvent {
+ public:
+ WindowSystemEvent(EventType t)
+ : type(t) { }
+ EventType type;
+ };
+
+ class CloseEvent : public WindowSystemEvent {
+ public:
+ CloseEvent(QWidget *tlw)
+ : WindowSystemEvent(Close), topLevel(tlw) { }
+ QWeakPointer<QWidget> topLevel;
+ };
+
+ class GeometryChangeEvent : public WindowSystemEvent {
+ public:
+ GeometryChangeEvent(QWidget *tlw, const QRect &newGeometry)
+ : WindowSystemEvent(GeometryChange), tlw(tlw), newGeometry(newGeometry)
+ { }
+ QWeakPointer<QWidget> tlw;
+ QRect newGeometry;
+ };
+
+ class EnterEvent : public WindowSystemEvent {
+ public:
+ EnterEvent(QWidget *enter)
+ : WindowSystemEvent(Enter), enter(enter)
+ { }
+ QWeakPointer<QWidget> enter;
+ };
+
+ class LeaveEvent : public WindowSystemEvent {
+ public:
+ LeaveEvent(QWidget *leave)
+ : WindowSystemEvent(Leave), leave(leave)
+ { }
+ QWeakPointer<QWidget> leave;
+ };
+
+ class UserEvent : public WindowSystemEvent {
+ public:
+ UserEvent(QWidget * w, ulong time, EventType t)
+ : WindowSystemEvent(t), widget(w), timestamp(time) { }
+ QWeakPointer<QWidget> widget;
+ unsigned long timestamp;
+ };
+
+ class MouseEvent : public UserEvent {
+ public:
+ MouseEvent(QWidget * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b)
+ : UserEvent(w, time, Mouse), localPos(local), globalPos(global), buttons(b) { }
+ QPoint localPos;
+ QPoint globalPos;
+ Qt::MouseButtons buttons;
+ };
+
+ class WheelEvent : public UserEvent {
+ public:
+ WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o)
+ : UserEvent(w, time, Wheel), delta(d), localPos(local), globalPos(global), orient(o) { }
+ int delta;
+ QPoint localPos;
+ QPoint globalPos;
+ Qt::Orientation orient;
+ };
+
+ class KeyEvent : public UserEvent {
+ public:
+ KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1)
+ :UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep),
+ repeatCount(count), modifiers(mods), keyType(t) { }
+ int key;
+ QString unicode;
+ bool repeat;
+ ushort repeatCount;
+ Qt::KeyboardModifiers modifiers;
+ QEvent::Type keyType;
+ };
+
+ class TouchEvent : public UserEvent {
+ public:
+ TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList<QTouchEvent::TouchPoint> &p)
+ :UserEvent(w, time, Touch), devType(d), points(p), touchType(t) { }
+ QTouchEvent::DeviceType devType;
+ QList<QTouchEvent::TouchPoint> points;
+ QEvent::Type touchType;
+
+ };
+
+ class ScreenCountEvent : public WindowSystemEvent {
+ public:
+ ScreenCountEvent (int count)
+ : WindowSystemEvent(ScreenCountChange) , count(count) { }
+ int count;
+ };
+
+ class ScreenGeometryEvent : public WindowSystemEvent {
+ public:
+ ScreenGeometryEvent(int index)
+ : WindowSystemEvent(ScreenGeometry), index(index) { }
+ int index;
+ };
+
+ class ScreenAvailableGeometryEvent : public WindowSystemEvent {
+ public:
+ ScreenAvailableGeometryEvent(int index)
+ : WindowSystemEvent(ScreenAvailableGeometry), index(index) { }
+ int index;
+ };
+
+ static QList<WindowSystemEvent *> windowSystemEventQueue;
+ static QMutex queueMutex;
+
+ static int windowSystemEventsQueued();
+ static WindowSystemEvent * getWindowSystemEvent();
+ static void queueWindowSystemEvent(WindowSystemEvent *ev);
+
+ static QTime eventTime;
+};
+
+QT_END_HEADER
+QT_END_NAMESPACE
+
+#endif // QWINDOWSYSTEMINTERFACE_QPA_P_H
diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri
index 793d380..099619c 100644
--- a/src/gui/painting/painting.pri
+++ b/src/gui/painting/painting.pri
@@ -87,14 +87,18 @@ SOURCES += \
painting/qpaintengine_raster.cpp \
painting/qdrawhelper.cpp \
painting/qimagescale.cpp \
- painting/qgrayraster.c
+ painting/qgrayraster.c \
+ painting/qpaintengine_blitter.cpp \
+ painting/qblittable.cpp \
HEADERS += \
painting/qpaintengine_raster_p.h \
painting/qdrawhelper_p.h \
painting/qblendfunctions_p.h \
painting/qrasterdefs_p.h \
- painting/qgrayraster_p.h
+ painting/qgrayraster_p.h \
+ painting/qpaintengine_blitter_p.h \
+ painting/qblittable_p.h \
win32 {
HEADERS += painting/qprintengine_win_p.h
@@ -115,20 +119,20 @@ embedded {
SOURCES += \
painting/qgraphicssystem_qws.cpp \
-} else {
+} else: if(!qpa) {
HEADERS += \
painting/qgraphicssystem_raster_p.h \
painting/qgraphicssystem_runtime_p.h \
painting/qgraphicssystemfactory_p.h \
painting/qgraphicssystemplugin_p.h \
- painting/qwindowsurface_raster_p.h \
+ painting/qwindowsurface_raster_p.h
SOURCES += \
painting/qgraphicssystem_raster.cpp \
painting/qgraphicssystem_runtime.cpp \
painting/qgraphicssystemfactory.cpp \
painting/qgraphicssystemplugin.cpp \
- painting/qwindowsurface_raster.cpp \
+ painting/qwindowsurface_raster.cpp
}
unix:x11 {
@@ -141,7 +145,7 @@ unix:x11 {
painting/qpaintengine_x11.cpp
}
-!embedded:!x11:mac {
+!embedded:!qpa:!x11:mac {
HEADERS += \
painting/qpaintengine_mac_p.h \
painting/qgraphicssystem_mac_p.h \
@@ -157,14 +161,14 @@ unix:x11 {
painting/qprintengine_mac.mm \
}
-unix:!mac:!symbian {
+unix:!mac:!symbian|qpa {
HEADERS += \
painting/qprinterinfo_unix_p.h
SOURCES += \
painting/qprinterinfo_unix.cpp
}
-win32|x11|mac|embedded|symbian {
+win32|x11|mac|embedded|qpa|symbian {
SOURCES += painting/qbackingstore.cpp
HEADERS += painting/qbackingstore_p.h
}
@@ -181,6 +185,12 @@ embedded {
painting/qpaintdevice_qws.cpp
}
+qpa {
+ SOURCES += \
+ painting/qcolormap_qpa.cpp \
+ painting/qpaintdevice_qpa.cpp
+}
+
symbian {
SOURCES += \
painting/qpaintengine_s60.cpp \
@@ -191,7 +201,7 @@ symbian {
painting/qpaintengine_s60_p.h
}
-x11|embedded {
+x11|embedded|qpa {
contains(QT_CONFIG,qtopia) {
DEFINES += QT_NO_CUPS QT_NO_LPR
} else {
@@ -221,7 +231,7 @@ x11 {
SOURCES += painting/qwindowsurface_x11.cpp
}
-mac {
+!embedded:!qpa:mac {
HEADERS += painting/qwindowsurface_mac_p.h
SOURCES += painting/qwindowsurface_mac.cpp
}
@@ -234,19 +244,26 @@ embedded {
symbian {
- HEADERS += painting/qwindowsurface_s60_p.h
+ HEADERS += painting/qwindowsurface_s60_p.h \
+ painting/qdrawhelper_arm_simd_p.h
SOURCES += painting/qwindowsurface_s60.cpp
armccIfdefBlock = \
"$${LITERAL_HASH}if defined(ARMV6)" \
+ "MACRO QT_HAVE_ARM_SIMD" \
"SOURCEPATH painting" \
- "SOURCE qblendfunctions_armv6_rvct.s" \
- "SOURCE qdrawhelper_armv6_rvct.s" \
+ "SOURCE qdrawhelper_arm_simd.cpp" \
"$${LITERAL_HASH}endif"
MMP_RULES += armccIfdefBlock
QMAKE_CXXFLAGS.ARMCC *= -O3
}
+mac {
+ HEADERS += painting/qunifiedtoolbarsurface_mac_p.h
+ SOURCES += painting/qunifiedtoolbarsurface_mac.cpp
+}
+
+
NEON_SOURCES += painting/qdrawhelper_neon.cpp
NEON_HEADERS += painting/qdrawhelper_neon_p.h
NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S
diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp
index ac9b994..df1210f 100644
--- a/src/gui/painting/qbackingstore.cpp
+++ b/src/gui/painting/qbackingstore.cpp
@@ -98,6 +98,21 @@ static inline void qt_flush(QWidget *widget, const QRegion &region, QWindowSurfa
QWidgetBackingStore::showYellowThing(widget, region, flushUpdate * 10, false);
#endif
+ //The performance hit by doing this should be negligible. However, be aware that
+ //using this FPS when you have > 1 windowsurface can give you inaccurate FPS
+ static bool fpsDebug = qgetenv("QT_DEBUG_FPS").toInt();
+ if (fpsDebug) {
+ static QTime time = QTime::currentTime();
+ static int frames = 0;
+
+ frames++;
+
+ if(time.elapsed() > 5000) {
+ double fps = double(frames * 1000) /time.restart();
+ fprintf(stderr,"FPS: %.1f\n",fps);
+ frames = 0;
+ }
+ }
if (widget != tlw)
windowSurface->flush(widget, region, tlwOffset + widget->mapTo(tlw, QPoint()));
else
@@ -271,7 +286,11 @@ bool QWidgetBackingStore::bltRect(const QRect &rect, int dx, int dy, QWidget *wi
void QWidgetBackingStore::releaseBuffer()
{
if (windowSurface)
+#if defined(Q_WS_QPA)
+ windowSurface->resize(QSize());
+#else
windowSurface->setGeometry(QRect());
+#endif
#ifdef Q_BACKINGSTORE_SUBSURFACES
for (int i = 0; i < subSurfaces.size(); ++i)
subSurfaces.at(i)->setGeometry(QRect());
@@ -401,7 +420,11 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const
{
const bool widgetDirty = widget && widget != tlw;
const QRect tlwRect(topLevelRect());
+#if defined(Q_WS_QPA)
+ const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size());
+#else
const QRect surfaceGeometry(windowSurface->geometry());
+#endif
if (fullUpdatePending || (surfaceGeometry != tlwRect && surfaceGeometry.size() != tlwRect.size())) {
if (widgetDirty) {
const QRect dirtyTlwRect = QRect(QPoint(), tlwRect.size());
@@ -446,13 +469,17 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const
/*!
Returns the static content inside the \a parent if non-zero; otherwise the static content
- for the entire backing store is returned. The content will be clipped to \a withingClipRect
+ for the entire backing store is returned. The content will be clipped to \a withinClipRect
if non-empty.
*/
QRegion QWidgetBackingStore::staticContents(QWidget *parent, const QRect &withinClipRect) const
{
if (!parent && tlw->testAttribute(Qt::WA_StaticContents)) {
+#if defined(Q_WS_QPA)
+ const QSize surfaceGeometry(windowSurface->size());
+#else
const QRect surfaceGeometry(windowSurface->geometry());
+#endif
QRect surfaceRect(0, 0, surfaceGeometry.width(), surfaceGeometry.height());
if (!withinClipRect.isEmpty())
surfaceRect &= withinClipRect;
@@ -720,9 +747,8 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion &region, QWidget *widg
}
// Alien widgets.
- if (!widget->internalWinId()) {
- QWidget *nativeParent = widget->nativeParentWidget();
- // Alien widgets with the top-level as the native parent (common case).
+ if (!widget->internalWinId() && !widget->isWindow()) {
+ QWidget *nativeParent = widget->nativeParentWidget(); // Alien widgets with the top-level as the native parent (common case).
if (nativeParent == tlw) {
if (!widget->testAttribute(Qt::WA_WState_InPaintEvent))
dirtyOnScreen += region.translated(topLevelOffset);
@@ -1152,12 +1178,16 @@ void QWidgetBackingStore::sync()
return;
}
- const bool inTopLevelResize = tlwExtra->inTopLevelResize;
const bool updatesDisabled = !tlw->updatesEnabled();
- const QRect tlwRect(topLevelRect());
- const QRect surfaceGeometry(windowSurface->geometry());
bool repaintAllWidgets = false;
+ const bool inTopLevelResize = tlwExtra->inTopLevelResize;
+ const QRect tlwRect(topLevelRect());
+#ifdef Q_WS_QPA
+ const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size());
+#else
+ const QRect surfaceGeometry(windowSurface->geometry());
+#endif
if ((fullUpdatePending || inTopLevelResize || surfaceGeometry.size() != tlwRect.size()) && !updatesDisabled) {
if (hasStaticContents()) {
// Repaint existing dirty area and newly visible area.
@@ -1177,8 +1207,13 @@ void QWidgetBackingStore::sync()
}
}
+#ifdef Q_WS_QPA
+ if (inTopLevelResize || surfaceGeometry.size() != tlwRect.size())
+ windowSurface->resize(tlwRect.size());
+#else
if (inTopLevelResize || surfaceGeometry != tlwRect)
windowSurface->setGeometry(tlwRect);
+#endif
if (updatesDisabled)
return;
diff --git a/src/gui/painting/qblendfunctions_armv6_rvct.s b/src/gui/painting/qblendfunctions_armv6_rvct.s
deleted file mode 100644
index 1e3faa9..0000000
--- a/src/gui/painting/qblendfunctions_armv6_rvct.s
+++ /dev/null
@@ -1,222 +0,0 @@
-;****************************************************************************
-;**
-;** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-;** All rights reserved.
-;** Contact: Nokia Corporation (qt-info@nokia.com)
-;**
-;** This file is part of the QtGui module of the Qt Toolkit.
-;**
-;** $QT_BEGIN_LICENSE:LGPL$
-;** No Commercial Usage
-;** This file contains pre-release code and may not be distributed.
-;** You may use this file in accordance with the terms and conditions
-;** contained in the Technology Preview License Agreement accompanying
-;** this package.
-;**
-;** GNU Lesser General Public License Usage
-;** Alternatively, this file may be used under the terms of the GNU Lesser
-;** General Public License version 2.1 as published by the Free Software
-;** Foundation and appearing in the file LICENSE.LGPL included in the
-;** packaging of this file. Please review the following information to
-;** ensure the GNU Lesser General Public License version 2.1 requirements
-;** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-;**
-;** In addition, as a special exception, Nokia gives you certain additional
-;** rights. These rights are described in the Nokia Qt LGPL Exception
-;** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-;**
-;** If you have questions regarding the use of this file, please contact
-;** Nokia at qt-info@nokia.com.
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;** $QT_END_LICENSE$
-;**
-;****************************************************************************
-
-;
-; W A R N I N G
-; -------------
-;
-; This file is not part of the Qt API. It exists purely as an
-; implementation detail. This header file may change from version to
-; version without notice, or even be removed.
-;
-; We mean it.
-;
-
-
- ARM
- PRESERVE8
-
- INCLUDE qdrawhelper_armv6_rvct.inc
-
-
-;-----------------------------------------------------------------------------
-; qt_blend_rgb32_on_rgb32_arm
-;
-; @brief
-;
-; @param dest Destination pixels (r0)
-; @param dbpl Destination bytes per line (r1)
-; @param src Source pixels (r2)
-; @param sbpl Source bytes per line (r3)
-; @param w Width (s0 -> r4)
-; @param h Height (s1 -> r5)
-; @param const_alpha Constant alpha (s2 -> r6)
-;
-;---------------------------------------------------------------------------
-qt_blend_rgb32_on_rgb32_armv6 Function
- stmfd sp!, {r4-r12, r14}
-
- ; read arguments off the stack
- add r8, sp, #10 * 4
- ldmia r8, {r9-r11}
-
- ; Reorganize registers
-
- mov r4, r10
- mov r5, r1
- mov r6, r3
-
- mov r1, r2
- mov r2, r9
- mov r3, r11
-
- ; Now we have registers
- ; @param dest Destination pixels (r0)
- ; @param src Source pixels (r1)
- ; @param w Width (r2)
- ; @param const_alpha Constant alpha (r3)
- ; @param h Height (r4)
- ; @param dbpl Destination bytes per line (r5)
- ; @param sbpl Source bytes per line (r6)
-
- cmp r3, #256 ; test if we have fully opaque constant alpha value
- bne rgb32_blend_const_alpha ; branch if not
-
-rgb32_blend_loop
-
- subs r4, r4, #1
- bmi rgb32_blend_exit ; while(h--)
-
-rgb321 PixCpySafe r0, r1, r2
-
- add r0, r0, r5 ; dest = dest + dbpl
- add r1, r1, r6 ; src = src + sbpl
-
- b rgb32_blend_loop
-
-
-rgb32_blend_const_alpha
-
- ;ldr r14, =ComponentHalf ; load 0x800080 to r14
- mov r14, #0x800000
- add r14, r14, #0x80
-
- sub r3, r3, #1 ; const_alpha -= 1;
-
-rgb32_blend_loop_const_alpha
-
- subs r4, r4, #1
- bmi rgb32_blend_exit ; while(h--)
-
-rgb322 BlendRowSafe PixelSourceOverConstAlpha
-
- add r0, r0, r5 ; dest = dest + dbpl
- add r1, r1, r6 ; src = src + sbpl
-
- b rgb32_blend_loop_const_alpha
-
-rgb32_blend_exit
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-
-
-;-----------------------------------------------------------------------------
-; qt_blend_argb32_on_argb32_arm
-;
-; @brief
-;
-; @param dest Destination pixels (r0)
-; @param dbpl Destination bytes per line (r1)
-; @param src Source pixels (r2)
-; @param sbpl Source bytes per line (r3)
-; @param w Width (s0 -> r4)
-; @param h Height (s1 -> r5)
-; @param const_alpha Constant alpha (s2 -> r6)
-;
-;---------------------------------------------------------------------------
-qt_blend_argb32_on_argb32_armv6 Function
- stmfd sp!, {r4-r12, r14}
-
- ; read arguments off the stack
- add r8, sp, #10 * 4
- ldmia r8, {r9-r11}
-
- ; Reorganize registers
-
- mov r4, r10
- mov r5, r1
- mov r6, r3
-
- mov r1, r2
- mov r2, r9
- mov r3, r11
-
- ; Now we have registers
- ; @param dest Destination pixels (r0)
- ; @param src Source pixels (r1)
- ; @param w Width (r2)
- ; @param const_alpha Constant alpha (r3)
- ; @param h Height (r4)
- ; @param dbpl Destination bytes per line (r5)
- ; @param sbpl Source bytes per line (r6)
-
- ;ldr r14, =ComponentHalf ; load 0x800080 to r14
- mov r14, #0x800000
- add r14, r14, #0x80
-
- cmp r3, #256 ; test if we have fully opaque constant alpha value
- bne argb32_blend_const_alpha ; branch if not
-
-argb32_blend_loop
-
- subs r4, r4, #1
- bmi argb32_blend_exit ; while(h--)
-
-argb321 BlendRowSafe PixelSourceOver
-
- add r0, r0, r5 ; dest = dest + dbpl
- add r1, r1, r6 ; src = src + sbpl
-
- b argb32_blend_loop
-
-argb32_blend_const_alpha
-
- sub r3, r3, #1 ; const_alpha -= 1;
-
-argb32_blend_loop_const_alpha
-
- subs r4, r4, #1
- bmi argb32_blend_exit ; while(h--)
-
-argb322 BlendRowSafe PixelSourceOverConstAlpha
-
- add r0, r0, r5 ; dest = dest + dbpl
- add r1, r1, r6 ; src = src + sbpl
-
- b argb32_blend_loop_const_alpha
-
-argb32_blend_exit
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-
- END ; File end
diff --git a/src/gui/painting/qblittable.cpp b/src/gui/painting/qblittable.cpp
new file mode 100644
index 0000000..f4b84a9
--- /dev/null
+++ b/src/gui/painting/qblittable.cpp
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qblittable_p.h"
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+class QBlittablePrivate
+{
+public:
+ QBlittablePrivate(const QSize &size, QBlittable::Capabilities caps)
+ : caps(caps), m_size(size), locked(false), cachedImg(0)
+ {}
+ QBlittable::Capabilities caps;
+ QSize m_size;
+ bool locked;
+ QImage *cachedImg;
+};
+
+
+QBlittable::QBlittable(const QSize &size, Capabilities caps)
+ : d_ptr(new QBlittablePrivate(size,caps))
+{
+}
+
+QBlittable::~QBlittable()
+{
+ delete d_ptr;
+}
+
+
+QBlittable::Capabilities QBlittable::capabilities() const
+{
+ Q_D(const QBlittable);
+ return d->caps;
+}
+
+QSize QBlittable::size() const
+{
+ Q_D(const QBlittable);
+ return d->m_size;
+}
+
+QImage *QBlittable::lock()
+{
+ Q_D(QBlittable);
+ if (!d->locked) {
+ d->cachedImg = doLock();
+ d->locked = true;
+ }
+
+ return d->cachedImg;
+}
+
+void QBlittable::unlock()
+{
+ Q_D(QBlittable);
+ if (d->locked) {
+ doUnlock();
+ d->locked = false;
+ }
+}
+
+QT_END_NAMESPACE
+#endif //QT_NO_BLITTABLE
+
diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h
new file mode 100644
index 0000000..cb56cb2
--- /dev/null
+++ b/src/gui/painting/qblittable_p.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBLITTABLE_P_H
+#define QBLITTABLE_P_H
+
+#include <QtCore/qsize.h>
+#include <QtGui/private/qpixmap_blitter_p.h>
+
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+class QImage;
+class QBlittablePrivate;
+
+class Q_GUI_EXPORT QBlittable
+{
+ Q_DECLARE_PRIVATE(QBlittable);
+public:
+ enum Capability {
+
+ SolidRectCapability = 0x0001,
+ SourcePixmapCapability = 0x0002,
+ SourceOverPixmapCapability = 0x0004,
+ SourceOverScaledPixmapCapability = 0x0008,
+
+ // Internal ones
+ OutlineCapability = 0x0001000,
+ };
+ Q_DECLARE_FLAGS (Capabilities, Capability);
+
+ QBlittable(const QSize &size, Capabilities caps);
+ virtual ~QBlittable();
+
+ Capabilities capabilities() const;
+ QSize size() const;
+
+ virtual void fillRect(const QRectF &rect, const QColor &color) = 0;
+ virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0;
+
+ QImage *lock();
+ void unlock();
+
+protected:
+ virtual QImage *doLock() = 0;
+ virtual void doUnlock() = 0;
+ QBlittablePrivate *d_ptr;
+};
+
+QT_END_NAMESPACE
+#endif //QT_NO_BLITTABLE
+#endif //QBLITTABLE_P_H
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp
index d0788c7..5b35fc5 100644
--- a/src/gui/painting/qbrush.cpp
+++ b/src/gui/painting/qbrush.cpp
@@ -635,6 +635,15 @@ QBrush &QBrush::operator=(const QBrush &b)
return *this;
}
+
+/*!
+ \fn void QBrush::swap(QBrush &other)
+ \since 4.8
+
+ Swaps brush \a other with this brush. This operation is very
+ fast and never fails.
+*/
+
/*!
Returns the brush as a QVariant
*/
diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h
index efc720b..f9acded 100644
--- a/src/gui/painting/qbrush.h
+++ b/src/gui/painting/qbrush.h
@@ -96,6 +96,8 @@ public:
inline QBrush &operator=(QBrush &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QBrush &other) { qSwap(d, other.d); }
+
operator QVariant() const;
inline Qt::BrushStyle style() const;
diff --git a/src/gui/painting/qcolormap.qdoc b/src/gui/painting/qcolormap.qdoc
index ec3d2ba..96fd6a0 100644
--- a/src/gui/painting/qcolormap.qdoc
+++ b/src/gui/painting/qcolormap.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/painting/qcolormap_qpa.cpp b/src/gui/painting/qcolormap_qpa.cpp
new file mode 100644
index 0000000..1f4fea8
--- /dev/null
+++ b/src/gui/painting/qcolormap_qpa.cpp
@@ -0,0 +1,231 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qcolormap.h"
+#include "qcolor.h"
+#include "qpaintdevice.h"
+#include "private/qapplication_p.h"
+#include "private/qgraphicssystem_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QColormapPrivate
+{
+public:
+ inline QColormapPrivate()
+ : ref(1), mode(QColormap::Direct), depth(0), numcolors(0)
+ { }
+
+ QAtomicInt ref;
+
+ QColormap::Mode mode;
+ int depth;
+ int numcolors;
+};
+
+static QColormapPrivate *screenMap = 0;
+
+void QColormap::initialize()
+{
+ screenMap = new QColormapPrivate;
+
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ QList<QPlatformScreen*> screens = pi->screens();
+
+ screenMap->depth = screens[0]->depth();
+ if (screenMap->depth < 8) {
+ screenMap->mode = QColormap::Indexed;
+ screenMap->numcolors = 256;
+ } else {
+ screenMap->mode = QColormap::Direct;
+ screenMap->numcolors = -1;
+ }
+}
+
+void QColormap::cleanup()
+{
+ delete screenMap;
+ screenMap = 0;
+}
+
+QColormap QColormap::instance(int /*screen*/)
+{
+ return QColormap();
+}
+
+QColormap::QColormap()
+ : d(screenMap)
+{ d->ref.ref(); }
+
+QColormap::QColormap(const QColormap &colormap)
+ :d (colormap.d)
+{ d->ref.ref(); }
+
+QColormap::~QColormap()
+{
+ if (!d->ref.deref())
+ delete d;
+}
+
+QColormap::Mode QColormap::mode() const
+{ return d->mode; }
+
+
+int QColormap::depth() const
+{ return d->depth; }
+
+
+int QColormap::size() const
+{
+ return d->numcolors;
+}
+
+#ifndef QT_QWS_DEPTH16_RGB
+#define QT_QWS_DEPTH16_RGB 565
+#endif
+static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100);
+static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10);
+static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10);
+static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits);
+static const int qt_green_shift = qt_bbits-(8-qt_gbits);
+static const int qt_neg_blue_shift = 8-qt_bbits;
+static const int qt_blue_mask = (1<<qt_bbits)-1;
+static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits);
+static const int qt_red_mask = (1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits));
+
+static const int qt_red_rounding_shift = qt_red_shift + qt_rbits;
+static const int qt_green_rounding_shift = qt_green_shift + qt_gbits;
+static const int qt_blue_rounding_shift = qt_bbits - qt_neg_blue_shift;
+
+inline ushort qt_convRgbTo16(QRgb c)
+{
+ const int tr = qRed(c) << qt_red_shift;
+ const int tg = qGreen(c) << qt_green_shift;
+ const int tb = qBlue(c) >> qt_neg_blue_shift;
+
+ return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask);
+}
+
+inline QRgb qt_conv16ToRgb(ushort c)
+{
+ const int r=(c & qt_red_mask);
+ const int g=(c & qt_green_mask);
+ const int b=(c & qt_blue_mask);
+ const int tr = r >> qt_red_shift | r >> qt_red_rounding_shift;
+ const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift;
+ const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift;
+
+ return qRgb(tr,tg,tb);
+}
+
+uint QColormap::pixel(const QColor &color) const
+{
+ QRgb rgb = color.rgba();
+ if (d->mode == QColormap::Direct) {
+ switch(d->depth) {
+ case 16:
+ return qt_convRgbTo16(rgb);
+ case 24:
+ case 32:
+ {
+ const int r = qRed(rgb);
+ const int g = qGreen(rgb);
+ const int b = qBlue(rgb);
+ const int red_shift = 16;
+ const int green_shift = 8;
+ const int red_mask = 0xff0000;
+ const int green_mask = 0x00ff00;
+ const int blue_mask = 0x0000ff;
+ const int tg = g << green_shift;
+#ifdef QT_QWS_DEPTH_32_BGR
+ if (qt_screen->pixelType() == QScreen::BGRPixel) {
+ const int tb = b << red_shift;
+ return 0xff000000 | (r & blue_mask) | (tg & green_mask) | (tb & red_mask);
+ }
+#endif
+ const int tr = r << red_shift;
+ return 0xff000000 | (b & blue_mask) | (tg & green_mask) | (tr & red_mask);
+ }
+ }
+ }
+ //XXX
+ //return qt_screen->alloc(qRed(rgb), qGreen(rgb), qBlue(rgb));
+ return 0;
+}
+
+const QColor QColormap::colorAt(uint pixel) const
+{
+ if (d->mode == Direct) {
+ if (d->depth == 16) {
+ pixel = qt_conv16ToRgb(pixel);
+ }
+ const int red_shift = 16;
+ const int green_shift = 8;
+ const int red_mask = 0xff0000;
+ const int green_mask = 0x00ff00;
+ const int blue_mask = 0x0000ff;
+#ifdef QT_QWS_DEPTH_32_BGR
+ if (qt_screen->pixelType() == QScreen::BGRPixel) {
+ return QColor((pixel & blue_mask),
+ (pixel & green_mask) >> green_shift,
+ (pixel & red_mask) >> red_shift);
+ }
+#endif
+ return QColor((pixel & red_mask) >> red_shift,
+ (pixel & green_mask) >> green_shift,
+ (pixel & blue_mask));
+ }
+#if 0 // XXX
+ Q_ASSERT_X(int(pixel) < qt_screen->numCols(), "QColormap::colorAt", "pixel out of bounds of palette");
+ return QColor(qt_screen->clut()[pixel]);
+#endif
+ return QColor();
+}
+
+const QVector<QColor> QColormap::colormap() const
+{
+ return QVector<QColor>();
+}
+
+QColormap &QColormap::operator=(const QColormap &colormap)
+{ qAtomicAssign(d, colormap.d); return *this; }
+
+QT_END_NAMESPACE
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 5f190ba..a4ab278 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -43,7 +43,7 @@
#include <private/qpaintengine_raster_p.h>
#include <private/qpainter_p.h>
#include <private/qdrawhelper_x86_p.h>
-#include <private/qdrawhelper_armv6_p.h>
+#include <private/qdrawhelper_arm_simd_p.h>
#include <private/qdrawhelper_neon_p.h>
#include <private/qmath_p.h>
#include <qmath.h>
@@ -7678,96 +7678,6 @@ static void qt_memfill16_setup(quint16 *dest, quint16 value, int count);
qt_memfill32_func qt_memfill32 = qt_memfill32_setup;
qt_memfill16_func qt_memfill16 = qt_memfill16_setup;
-#if defined(Q_CC_RVCT) && defined(QT_HAVE_ARMV6)
-// Move these to qdrawhelper_arm.c when all
-// functions are implemented using arm assembly.
-static CompositionFunctionSolid qt_functionForModeSolid_ARMv6[numCompositionFunctions] = {
- comp_func_solid_SourceOver,
- comp_func_solid_DestinationOver,
- comp_func_solid_Clear,
- comp_func_solid_Source,
- comp_func_solid_Destination,
- comp_func_solid_SourceIn,
- comp_func_solid_DestinationIn,
- comp_func_solid_SourceOut,
- comp_func_solid_DestinationOut,
- comp_func_solid_SourceAtop,
- comp_func_solid_DestinationAtop,
- comp_func_solid_XOR,
- comp_func_solid_Plus,
- comp_func_solid_Multiply,
- comp_func_solid_Screen,
- comp_func_solid_Overlay,
- comp_func_solid_Darken,
- comp_func_solid_Lighten,
- comp_func_solid_ColorDodge,
- comp_func_solid_ColorBurn,
- comp_func_solid_HardLight,
- comp_func_solid_SoftLight,
- comp_func_solid_Difference,
- comp_func_solid_Exclusion,
- rasterop_solid_SourceOrDestination,
- rasterop_solid_SourceAndDestination,
- rasterop_solid_SourceXorDestination,
- rasterop_solid_NotSourceAndNotDestination,
- rasterop_solid_NotSourceOrNotDestination,
- rasterop_solid_NotSourceXorDestination,
- rasterop_solid_NotSource,
- rasterop_solid_NotSourceAndDestination,
- rasterop_solid_SourceAndNotDestination
-};
-
-static CompositionFunction qt_functionForMode_ARMv6[numCompositionFunctions] = {
- comp_func_SourceOver_armv6,
- comp_func_DestinationOver,
- comp_func_Clear,
- comp_func_Source_armv6,
- comp_func_Destination,
- comp_func_SourceIn,
- comp_func_DestinationIn,
- comp_func_SourceOut,
- comp_func_DestinationOut,
- comp_func_SourceAtop,
- comp_func_DestinationAtop,
- comp_func_XOR,
- comp_func_Plus,
- comp_func_Multiply,
- comp_func_Screen,
- comp_func_Overlay,
- comp_func_Darken,
- comp_func_Lighten,
- comp_func_ColorDodge,
- comp_func_ColorBurn,
- comp_func_HardLight,
- comp_func_SoftLight,
- comp_func_Difference,
- comp_func_Exclusion,
- rasterop_SourceOrDestination,
- rasterop_SourceAndDestination,
- rasterop_SourceXorDestination,
- rasterop_NotSourceAndNotDestination,
- rasterop_NotSourceOrNotDestination,
- rasterop_NotSourceXorDestination,
- rasterop_NotSource,
- rasterop_NotSourceAndDestination,
- rasterop_SourceAndNotDestination
-};
-
-static void qt_blend_color_argb_armv6(int count, const QSpan *spans, void *userData)
-{
- QSpanData *data = reinterpret_cast<QSpanData *>(userData);
-
- CompositionFunctionSolid func = qt_functionForModeSolid_ARMv6[data->rasterBuffer->compositionMode];
- while (count--) {
- uint *target = ((uint *)data->rasterBuffer->scanLine(spans->y)) + spans->x;
- func(target, spans->len, data->solid.color, spans->coverage);
- ++spans;
- }
-}
-
-#endif // Q_CC_RVCT && QT_HAVE_ARMV6
-
-
void qInitDrawhelperAsm()
{
@@ -7938,46 +7848,39 @@ void qInitDrawhelperAsm()
}
#endif // IWMMXT
-#if defined(Q_CC_RVCT) && defined(QT_HAVE_ARMV6)
- functionForModeAsm = qt_functionForMode_ARMv6;
- functionForModeSolidAsm = qt_functionForModeSolid_ARMv6;
+#if defined(QT_HAVE_ARM_SIMD)
+ qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_arm_simd;
+ qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_arm_simd;
+ qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_arm_simd;
+ qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_arm_simd;
+#elif defined(QT_HAVE_NEON)
+ if (features & NEON) {
+ qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
+ qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
+ qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_neon;
+ qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_neon;
+ qBlendFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_rgb16_neon;
+ qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB16] = qt_blend_rgb16_on_argb32_neon;
+ qBlendFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_blend_rgb16_on_rgb16_neon;
+
+ qScaleFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_scale_image_argb32_on_rgb16_neon;
+ qScaleFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_scale_image_rgb16_on_rgb16_neon;
- qt_memfill32 = qt_memfill32_armv6;
+ qTransformFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_transform_image_argb32_on_rgb16_neon;
+ qTransformFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_transform_image_rgb16_on_rgb16_neon;
- qDrawHelper[QImage::Format_ARGB32_Premultiplied].blendColor = qt_blend_color_argb_armv6;
+ qDrawHelper[QImage::Format_RGB16].alphamapBlit = qt_alphamapblit_quint16_neon;
- qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_armv6;
- qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_armv6;
- qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_armv6;
- qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_armv6;
-#elif defined(QT_HAVE_NEON)
- if (features & NEON) {
- qBlendFunctions[QImage::Format_RGB32][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
- qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB32] = qt_blend_rgb32_on_rgb32_neon;
- qBlendFunctions[QImage::Format_RGB32][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_neon;
- qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_argb32_neon;
- qBlendFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_blend_argb32_on_rgb16_neon;
- qBlendFunctions[QImage::Format_ARGB32_Premultiplied][QImage::Format_RGB16] = qt_blend_rgb16_on_argb32_neon;
- qBlendFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_blend_rgb16_on_rgb16_neon;
-
- qScaleFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_scale_image_argb32_on_rgb16_neon;
- qScaleFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_scale_image_rgb16_on_rgb16_neon;
-
- qTransformFunctions[QImage::Format_RGB16][QImage::Format_ARGB32_Premultiplied] = qt_transform_image_argb32_on_rgb16_neon;
- qTransformFunctions[QImage::Format_RGB16][QImage::Format_RGB16] = qt_transform_image_rgb16_on_rgb16_neon;
-
- qDrawHelper[QImage::Format_RGB16].alphamapBlit = qt_alphamapblit_quint16_neon;
-
- functionForMode_C[QPainter::CompositionMode_SourceOver] = qt_blend_argb32_on_argb32_scanline_neon;
- functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_neon;
- functionForMode_C[QPainter::CompositionMode_Plus] = comp_func_Plus_neon;
- destFetchProc[QImage::Format_RGB16] = qt_destFetchRGB16_neon;
- destStoreProc[QImage::Format_RGB16] = qt_destStoreRGB16_neon;
-
- qMemRotateFunctions[QImage::Format_RGB16][0] = qt_memrotate90_16_neon;
- qMemRotateFunctions[QImage::Format_RGB16][2] = qt_memrotate270_16_neon;
- qt_memfill32 = qt_memfill32_neon;
- }
+ functionForMode_C[QPainter::CompositionMode_SourceOver] = qt_blend_argb32_on_argb32_scanline_neon;
+ functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_neon;
+ functionForMode_C[QPainter::CompositionMode_Plus] = comp_func_Plus_neon;
+ destFetchProc[QImage::Format_RGB16] = qt_destFetchRGB16_neon;
+ destStoreProc[QImage::Format_RGB16] = qt_destStoreRGB16_neon;
+
+ qMemRotateFunctions[QImage::Format_RGB16][0] = qt_memrotate90_16_neon;
+ qMemRotateFunctions[QImage::Format_RGB16][2] = qt_memrotate270_16_neon;
+ qt_memfill32 = qt_memfill32_neon;
+ }
#endif
if (functionForModeSolidAsm) {
diff --git a/src/gui/painting/qdrawhelper_arm_simd.cpp b/src/gui/painting/qdrawhelper_arm_simd.cpp
new file mode 100644
index 0000000..2a5f5e4
--- /dev/null
+++ b/src/gui/painting/qdrawhelper_arm_simd.cpp
@@ -0,0 +1,332 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdrawhelper_arm_simd_p.h"
+
+#include <private/qpaintengine_raster_p.h>
+#include <private/qblendfunctions_p.h>
+
+#ifdef QT_HAVE_ARM_SIMD
+
+#if defined(Q_OS_SYMBIAN)
+#if !defined(__SWITCH_TO_ARM)
+#ifdef __MARM_THUMB__
+#ifndef __ARMCC__
+#define __SWITCH_TO_ARM asm("push {r0} ");\
+ asm("add r0, pc, #4 ");\
+ asm("bx r0 ");\
+ asm("nop ");\
+ asm(".align 2 ");\
+ asm(".code 32 ");\
+ asm("ldr r0, [sp], #4 ")
+#define __END_ARM asm(".code 16 ")
+#else
+#define __SWITCH_TO_ARM asm(".code 32 ");
+#define __END_ARM
+#endif // __ARMCC__
+#else
+#define __SWITCH_TO_ARM
+#define __END_ARM
+#endif //__MARM_THUMB__
+#endif
+#endif
+
+#if defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)
+__asm void qt_blend_argb32_on_argb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha)
+{
+#ifndef __ARMCC__
+ __SWITCH_TO_ARM;
+#else
+ CODE32
+#endif // __ARMCC__
+
+ stmfd sp!, {r4-r12, r14}
+
+ // read arguments off the stack
+ add r8, sp, #10 * 4
+ ldmia r8, {r4-r6}
+
+ // adjust dbpl and sbpl
+ mov r14, #4
+ mul r14, r4, r14
+ sub r1, r1, r14
+ sub r3, r3, r14
+
+ // load 0xFF00FF00 to r12
+ mov r12, #0xFF000000
+ add r12, r12, #0xFF00
+
+ // load 0x800080 to r14
+ mov r14, #0x800000
+ add r14, r14, #0x80
+
+ /*
+ Registers:
+ r0 dst
+ r1 dbpl
+ r2 src
+ r3 sbpl
+ r4 w
+ r5 h
+ r6 const_alpha
+ r12 0xFF0000
+ r14 0x800080
+ */
+
+ cmp r6, #256 //test if we have fully opaque constant alpha value
+ bne argb32constalpha // branch if not
+
+argb32_next_row
+
+ mov r7, r4
+
+argb32_next_pixel
+
+ ldr r8, [r2], #4 // load src pixel
+
+ // Negate r8 and extract src alpha
+ mvn r11, r8 // bitwise not
+ uxtb r11, r11, ror #24
+
+ cmp r11, #0 // test for full src opacity (negated)
+ beq argb32_no_blend
+
+ cmp r11, #255 // test for full src transparency (negated)
+ addeq r0, #4
+ beq argb32_nop
+
+ ldr r9, [r0] // load dst pixel
+
+ // blend
+ uxtb16 r10, r9
+ uxtb16 r6, r9, ror #8
+ mla r10, r11, r10, r14
+ mla r9, r6, r11, r14
+ uxtab16 r10, r10, r10, ror #8
+ uxtab16 r9, r9, r9, ror #8
+ and r9, r9, r12
+ uxtab16 r10, r9, r10, ror #8
+
+ uqadd8 r8, r10, r8
+
+argb32_no_blend
+
+ str r8, [r0], #4
+
+argb32_nop
+
+ subs r7, r7, #1
+ bgt argb32_next_pixel
+
+ add r0, r0, r1 // dest = dest + dbpl
+ add r2, r2, r3 // src = src + sbpl
+
+ subs r5, r5, #1
+ bgt argb32_next_row
+
+ b argb32_blend_exit
+
+argb32constalpha
+
+ cmp r6, #0
+ beq argb32_blend_exit
+
+ ; const_alpha = (const_alpha * 255) >> 8;
+ mov r11, #255
+ mul r6, r6, r11
+ mov r11, r6, lsr #8
+
+argb32constalpha_next_row
+
+ mov r7, r4
+
+argb32constalpha_next_pixel
+
+ ldr r9, [r2], #4 // load src pixel
+
+ // blend
+ uxtb16 r10, r9
+ uxtb16 r6, r9, ror #8
+ mla r10, r11, r10, r14
+ mla r9, r6, r11, r14
+ uxtab16 r10, r10, r10, ror #8
+ uxtab16 r9, r9, r9, ror #8
+ and r9, r9, r12
+ uxtab16 r8, r9, r10, ror #8
+
+ ldr r9, [r0] // load dst pixel
+
+ // blend
+ uxtb16 r10, r9
+ uxtb16 r6, r9, ror #8
+
+ // Negate r11 and extract src alpha
+ mvn r9, r11 // bitwise not
+ uxtb r9, r9, ror #24
+
+ mla r10, r9, r10, r14
+ mla r9, r6, r9, r14
+ uxtab16 r10, r10, r10, ror #8
+ uxtab16 r9, r9, r9, ror #8
+ and r9, r9, r12
+ uxtab16 r10, r9, r10, ror #8
+
+ uqadd8 r8, r10, r8
+
+ str r8, [r0], #4
+
+ subs r7, r7, #1
+ bgt argb32constalpha_next_pixel
+
+ add r0, r0, r1 // dest = dest + dbpl
+ add r2, r2, r3 // src = src + sbpl
+
+ subs r5, r5, #1
+ bgt argb32constalpha_next_row
+
+argb32_blend_exit
+
+ // Restore registers
+ ldmfd sp!, {r4-r12, lr}
+ bx lr
+
+ __END_ARM
+}
+
+void qt_blend_rgb32_on_rgb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha)
+{
+ if (const_alpha != 256) {
+ qt_blend_argb32_on_argb32_arm_simd(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
+ return;
+ }
+
+ const uint *src = (const uint *) srcPixels;
+ uint *dst = (uint *) destPixels;
+ if (w <= 64) {
+ for (int y=0; y<h; ++y) {
+ qt_memconvert(dst, src, w);
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ } else {
+ int len = w * 4;
+ for (int y=0; y<h; ++y) {
+ memcpy(dst, src, len);
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ }
+}
+
+#else // defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)
+
+// TODO: add GNU assembler instructions and support for other platforms.
+// Default to C code for now
+
+void qt_blend_argb32_on_argb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha)
+{
+ const uint *src = (const uint *) srcPixels;
+ uint *dst = (uint *) destPixels;
+ if (const_alpha == 256) {
+ for (int y=0; y<h; ++y) {
+ for (int x=0; x<w; ++x) {
+ uint s = src[x];
+ if (s >= 0xff000000)
+ dst[x] = s;
+ else if (s != 0)
+ dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
+ }
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ } else if (const_alpha != 0) {
+ const_alpha = (const_alpha * 255) >> 8;
+ for (int y=0; y<h; ++y) {
+ for (int x=0; x<w; ++x) {
+ uint s = BYTE_MUL(src[x], const_alpha);
+ dst[x] = s + BYTE_MUL(dst[x], qAlpha(~s));
+ }
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ }
+}
+
+void qt_blend_rgb32_on_rgb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha)
+{
+ if (const_alpha != 256) {
+ qt_blend_argb32_on_argb32_arm_simd(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha);
+ return;
+ }
+
+ const uint *src = (const uint *) srcPixels;
+ uint *dst = (uint *) destPixels;
+ if (w <= 64) {
+ for (int y=0; y<h; ++y) {
+ qt_memconvert(dst, src, w);
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ } else {
+ int len = w * 4;
+ for (int y=0; y<h; ++y) {
+ memcpy(dst, src, len);
+ dst = (quint32 *)(((uchar *) dst) + dbpl);
+ src = (const quint32 *)(((const uchar *) src) + sbpl);
+ }
+ }
+}
+
+#endif
+
+#endif // QT_HAVE_ARMV_SIMD
diff --git a/src/gui/painting/qdrawhelper_arm_simd_p.h b/src/gui/painting/qdrawhelper_arm_simd_p.h
new file mode 100644
index 0000000..6c96a84
--- /dev/null
+++ b/src/gui/painting/qdrawhelper_arm_simd_p.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDRAWHELPER_ARM_SIMD_P_H
+#define QDRAWHELPER_ARM_SIMD_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <private/qdrawhelper_p.h>
+
+QT_BEGIN_NAMESPACE
+
+#if defined(QT_HAVE_ARM_SIMD)
+
+void qt_blend_argb32_on_argb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha);
+
+void qt_blend_rgb32_on_rgb32_arm_simd(uchar *destPixels, int dbpl,
+ const uchar *srcPixels, int sbpl,
+ int w, int h,
+ int const_alpha);
+
+#endif // QT_HAVE_ARM_SIMD
+
+QT_END_NAMESPACE
+
+#endif // QDRAWHELPER_ARM_SIMD_P_H
diff --git a/src/gui/painting/qdrawhelper_armv6_p.h b/src/gui/painting/qdrawhelper_armv6_p.h
deleted file mode 100644
index e58f8bb..0000000
--- a/src/gui/painting/qdrawhelper_armv6_p.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtGui module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDRAWHELPER_ARMV6_P_H
-#define QDRAWHELPER_ARMV6_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <private/qdrawhelper_p.h>
-
-QT_BEGIN_NAMESPACE
-
-#if defined(Q_CC_RVCT) && defined(QT_HAVE_ARMV6)
-
-extern "C" void qt_blend_rgb32_on_rgb32_armv6(uchar *destPixels, int dbpl,
- const uchar *srcPixels, int sbpl,
- int w, int h,
- int const_alpha);
-
-extern "C" void qt_blend_argb32_on_argb32_armv6(uchar *destPixels, int dbpl,
- const uchar *srcPixels, int sbpl,
- int w, int h,
- int const_alpha);
-
-extern "C" void qt_memfill32_armv6(quint32 *dest, quint32 value, int count);
-
-extern "C" void comp_func_Source_armv6(uint *dest, const uint *src, int length, uint const_alpha);
-extern "C" void comp_func_SourceOver_armv6(uint *dest, const uint *src, int length, uint const_alpha);
-
-#endif // QT_HAVE_ARMV6
-
-QT_END_NAMESPACE
-
-#endif // QDRAWHELPER_ARMV6_P_H
diff --git a/src/gui/painting/qdrawhelper_armv6_rvct.inc b/src/gui/painting/qdrawhelper_armv6_rvct.inc
deleted file mode 100644
index 8c6d803..0000000
--- a/src/gui/painting/qdrawhelper_armv6_rvct.inc
+++ /dev/null
@@ -1,496 +0,0 @@
-;****************************************************************************
-;**
-;** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-;** All rights reserved.
-;** Contact: Nokia Corporation (qt-info@nokia.com)
-;**
-;** This file is part of the QtGui module of the Qt Toolkit.
-;**
-;** $QT_BEGIN_LICENSE:LGPL$
-;** No Commercial Usage
-;** This file contains pre-release code and may not be distributed.
-;** You may use this file in accordance with the terms and conditions
-;** contained in the Technology Preview License Agreement accompanying
-;** this package.
-;**
-;** GNU Lesser General Public License Usage
-;** Alternatively, this file may be used under the terms of the GNU Lesser
-;** General Public License version 2.1 as published by the Free Software
-;** Foundation and appearing in the file LICENSE.LGPL included in the
-;** packaging of this file. Please review the following information to
-;** ensure the GNU Lesser General Public License version 2.1 requirements
-;** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-;**
-;** In addition, as a special exception, Nokia gives you certain additional
-;** rights. These rights are described in the Nokia Qt LGPL Exception
-;** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-;**
-;** If you have questions regarding the use of this file, please contact
-;** Nokia at qt-info@nokia.com.
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;** $QT_END_LICENSE$
-;**
-;****************************************************************************
-
-;
-; W A R N I N G
-; -------------
-;
-; This file is not part of the Qt API. It exists purely as an
-; implementation detail. This header file may change from version to
-; version without notice, or even be removed.
-;
-; We mean it.
-;
-
-;-----------------------------------------------------------------------------
-; Globals.
-; Earch marcro expects that caller has loaded 0x800080 to r14.
-;-----------------------------------------------------------------------------
-
-ComponentHalf EQU 0x800080
-
-;-----------------------------------------------------------------------------
-; ARM assembly implementations of accelerated graphics operations.
-;
-; Conventions:
-;
-; - r0 = Target buffer pointer
-; - r1 = Source buffer pointer
-; - r2 = Length of the buffer to blend
-; - r3 = Constant alpha for source buffer
-;
-;-----------------------------------------------------------------------------
-
-; A macro for transparently defining ARM functions
- MACRO
-$func Function
- AREA Function_$func, CODE
- GLOBAL $func
- ALIGN 4
- CODE32
-$func
- MEND
-
-
-;-----------------------------------------------------------------------------
-; Armv6 boosted implementation of BYTE_MUL(...) function found in qdrawhelper_p.h.
-;
-; @param dst Destination register where to store the result
-; @param x Value to multiply
-; @param a Multiplicator byte
-; @param r14 Component half 0x800080
-;
-; @note Trashes x, r8
-;-----------------------------------------------------------------------------
- MACRO
- ByteMul $dst, $x, $a
-
- ; static inline uint BYTE_MUL(uint x, uint a)
-
- ; uint r8 = (x & 0xff00ff) * a + 0x800080
- uxtb16 r8, $x ; r8 = r8 & 0x00FF00FF
- mla r8, r8, $a, r14
-
- ; x = ((r >> 8) & 0xff00ff) * a + 0x800080
- uxtb16 $x, $x, ror #8
- mla $x, $x, $a, r14
-
-
- ; r8 = (r8 + ((r8 >> 8) & 0xff00ff) ) >> 8
- ; r8 &= 0xff00ff
- uxtab16 r8, r8, r8, ror #8
- uxtb16 r8, r8, ror #8
-
- ; x = x + ((x >>8) & 0xff00ff)
- uxtab16 $x, $x, $x, ror #8
-
- ; x &= 0xff00ff00
- ; x |= r8
- uxtb16 $x, $x, ror #8
- orr $dst, r8, $x, lsl #8
-
- MEND
-
-;-----------------------------------------------------------------------------
-; Armv6 boosted implementation of INTERPOLATE_PIXEL_255(...) function found in
-; qdrawhelper_p.h.
-;
-; @param dst Destination register where to store the result
-; @param x First value to multiply
-; @param a Multiplicator byte for first value
-; @param y Second value to multiply
-; @param b Multiplicator byte for second value
-; @param r14 Component half 0x800080
-;
-;
-; @note Trashes x, r8, r14
-;-----------------------------------------------------------------------------
- MACRO
- InterpolatePixel255 $dst, $x, $a, $y, $b
-
- ; static inline uint INTERPOLATE_PIXEL_255(uint x, uint a, uint y, uint b)
-
- ; First calculate the parts where we need 0x800080
-
- ; uint r8 = (((x & 0xff00ff) * a) + 0x800080)
- uxtb16 r8, $x ; r8 = r8 & 0x00FF00FF
- mla r8, r8, $a, r14
-
- ; x = ((((x >> 8) & 0xff00ff) * a) + 0x800080)
- uxtb16 $x, $x, ror #8
- mla $x, $x, $a, r14
-
- ; Now we are trashing r14 to free it for other purposes
-
- ; uint r14 = (y & 0xff00ff) * b
- uxtb16 r14, $y ; r14 = y & 0x00FF00FF
- mul r14, r14, $b
-
- ; r8 = r8 + r14
- add r8, r8, r14
-
- ; r8 = (r8 + ((r8 >> 8) & 0xff00ff) ) >> 8
- ; r8 &= 0xff00ff
- uxtab16 r8, r8, r8, ror #8
- uxtb16 r8, r8, ror #8
-
- ; r14 = ((y >> 8) & 0xff00ff) * b
- uxtb16 r14, $y, ror #8 ; r14 = ((y >> 8) & 0xFF00FF)
- mul r14, r14, $b
-
- ; x = x + r14
- add $x, $x, r14
-
- ; x = x + ((x >>8) & 0xff00ff)
- uxtab16 $x, $x, $x, ror #8
-
- ; x &= 0xff00ff00
- ; x |= r8
- uxtb16 $x, $x, ror #8
- orr $dst, r8, $x, lsl #8
-
- MEND
-
-;-----------------------------------------------------------------------------
-;
-;-----------------------------------------------------------------------------
- MACRO
-$label Blend4Pixels $BlendPixel
-
- ; Blend first 4 pixels
-
- ldmia r1!, {r4-r7}
- ldm r0, {r9-r12}
-
-b4p1_$label $BlendPixel r9, r4, r3
-b4p2_$label $BlendPixel r10, r5, r3
-b4p3_$label $BlendPixel r11, r6, r3
-b4p4_$label $BlendPixel r12, r7, r3
-
- stmia r0!, {r9-r12}
-
- MEND
-
-;-----------------------------------------------------------------------------
-;
-;-----------------------------------------------------------------------------
- MACRO
-$label Blend8Pixels $BlendPixel
-
-b8p1_$label Blend4Pixels $BlendPixel
-b8p2_$label Blend4Pixels $BlendPixel
-
- MEND
-
-;-----------------------------------------------------------------------------
-;
-;-----------------------------------------------------------------------------
- MACRO
-$label Blend16Pixels $BlendPixel
-
-b16p1_$label Blend8Pixels $BlendPixel
-b16p2_$label Blend8Pixels $BlendPixel
-
- MEND
-
-;-----------------------------------------------------------------------------
-;
-;-----------------------------------------------------------------------------
- MACRO
-$label Blend32Pixels $BlendPixel
-
-b32p1_$label Blend16Pixels $BlendPixel
-b32p2_$label Blend16Pixels $BlendPixel
-
- MEND
-
-;-----------------------------------------------------------------------------
-; A macro for source over compositing one row of pixels and saving the results
-; to destination buffer.
-;
-; @param dest Destination buffer (r0)
-; @param src Source buffer (r1)
-; @param length Length (r2)
-; @param const_alpha Constant alpha (r3)
-; @param r14 Component Half (0x800080) (r14)
-;
-; @note Advances r0, r1
-; @note Trashes r2, r4-r12
-;-----------------------------------------------------------------------------
- MACRO
-$label BlendRow $BlendPixel
-
- pld [r1]
-
-bloop_$label
- ; Blend 32 pixels per loop iteration
- subs r2, r2, #32
- bmi b_remaining_$label
-
-brp1_$label Blend32Pixels $BlendPixel
-
- b bloop_$label
-
-b_remaining_$label
-
- ; Remaining 31 pixels
-
- addmi r2, r2, #32
-
- ; Blend 16 pixels
- tst r2, #16
- beq b_remaining8_$label
-
-brp2_$label Blend16Pixels $BlendPixel
-
-b_remaining8_$label
-
- ; Blend 8 pixels
- tst r2, #8
- beq b_remaining4_$label
-
-brp3_$label Blend8Pixels $BlendPixel
-
-b_remaining4_$label
-
- ; Blend 4 pixels
- tst r2, #4
- beq b_remaining3_$label
-
-brp4_$label Blend4Pixels $BlendPixel
-
-b_remaining3_$label
-
- ; Remaining 3 pixels
-
- tst r2, #2
- beq b_last_$label
-
- ldmia r1!, {r4-r5}
- ldm r0, {r9-r10}
-
-brp5_$label $BlendPixel r9, r4, r3
-brp6_$label $BlendPixel r10, r5, r3
-
- stmia r0!, {r9-r10}
-
-b_last_$label
-
- tst r2, #1
- beq bexit_$label
-
- ldr r4, [r1]
- ldr r9, [r0]
-
-bpl_$label $BlendPixel r9, r4, r3
-
- str r9, [r0]
-
-bexit_$label
-
- MEND
-
-;-----------------------------------------------------------------------------
-; A macro for source over compositing one row of pixels and saving the results
-; to destination buffer. Restores all registers.
-;
-; @param dest Destination buffer (r0)
-; @param src Source buffer (r1)
-; @param length Length (r2)
-; @param const_alpha Constant alpha (r3)
-; @param r14 Component Half (0x800080) (r14)
-;
-; @note Advances r0, r1
-; @note Trashes r2, r4-r12
-;-----------------------------------------------------------------------------
- MACRO
-$label BlendRowSafe $BlendPixel
-
- stmfd sp!, {r0-r6} ; Preserves registers only up to r6
-
-brs_$label BlendRow $BlendPixel
-
- ldmfd sp!, {r0-r6}
-
- MEND
-
-
-;-----------------------------------------------------------------------------
-; Pix Copy.
-; NOTE! Cache line size of ARM1136JF-S and ARM1136J-S is 32 bytes (8 pixels).
-;
-; @param dst Destination pixels (r0)
-; @param src Source pixels (r1)
-; @param len Length (r2)
-;
-; @note Trashes r3-r10
-;-----------------------------------------------------------------------------
- MACRO
-$label PixCpy $dst, $src, $len
-
- pld [$src]
-
-pcpy_loop_$label
- ; Copy 8 pixels per loop iteration
- pld [$src, #96]
- subs $len, $len, #8
- ldmgeia $src!, {r3-r10}
- stmgeia $dst!, {r3-r10}
- bgt pcpy_loop_$label
-
-pcpy_remaining_$label
-
- ; Copy up to 7 remaining pixels
-
- ; Copy 4 pixels
- tst $len, #4
- ldmneia $src!, {r3-r6}
- stmneia $dst!, {r3-r6}
-
- tst $len, #2
- ldmneia $src!, {r3-r4}
- stmneia $dst!, {r3-r4}
-
- tst $len, #1
- ldrne r3, [$src]
- strne r3, [$dst]
-
- MEND
-
-;-----------------------------------------------------------------------------
-; General Pix Copy. Maximum 8 pixels at time. Restores all registers.
-;
-; @param dst Destination pixels (r0)
-; @param src Source pixels (r1)
-; @param len Length (r2)
-;
-; @note Trashes r3-r10
-;-----------------------------------------------------------------------------
- MACRO
-$label PixCpySafe $dst, $src, $len
-
- stmfd sp!, {r0-r6} ; Preserves registers only up to r6
-
-pcs_$label PixCpy $dst, $src, $len
-
- ldmfd sp!, {r0-r6} ; pop
-
- MEND
-
-
-;-----------------------------------------------------------------------------
-; A macro for source over compositing one pixel and saving the result to
-; dst register.
-;
-; @param dst Destination register, must contain destination pixel upon entry
-; @param src Source register, must contain source pixel upon entry
-; @param const_alpha Constant source alpha
-; @param r14 Component half 0x800080
-;
-; @note Trashes const_alpha, r8
-;-----------------------------------------------------------------------------
- MACRO
-$label PixelSourceOver $dst, $src, $const_alpha
-
- ; Negate src and extract alpha
- mvn $const_alpha, $src ; bitwise not
- uxtb $const_alpha, $const_alpha, ror #24 ; r3 = ((r3 & 0xFF000000) >> 24);
-
- ;cmp $const_alpha, #255 ; test for full transparency ( negated )
- ;beq exit_$label
- cmp $const_alpha, #0 ; test for full opacity ( negated )
- moveq $dst, $src
- beq exit_$label
-
- ByteMul $dst, $dst, $const_alpha
- add $dst, $src, $dst
-
-exit_$label
- MEND
-
-;-----------------------------------------------------------------------------
-; A macro for source over compositing one pixel and saving the result to
-; dst register.
-;
-; @param dst Destination register, must contain destination pixel upon entry
-; @param src Source register, must contain source pixel upon entry
-; @param const_alpha Constant source alpha
-; @param r14 Component half 0x800080
-;
-; @note Trashes src, const_alpha, r8
-;-----------------------------------------------------------------------------
- MACRO
-$label PixelSourceOverConstAlpha $dst, $src, $const_alpha
-
- ; store alpha because we are going to trash it
- stmfd sp!, {$const_alpha}
-
- ByteMul $src, $src, $const_alpha
-
- ; Negate src and extract alpha
- mvn $const_alpha, $src ; bitwise not
- uxtb $const_alpha, $const_alpha, ror #24 ; r3 = ((r3 & 0xFF000000) >> 24);
-
- ByteMul $dst, $dst, $const_alpha
-
- add $dst, $src, $dst
-
- ; recover alpha
- ldmfd sp!, {$const_alpha}
-
- MEND
-
-;-----------------------------------------------------------------------------
-; A macro for source over compositing one pixel and saving the result to
-; a register.
-;
-; @param dst Destination register, must contain destination pixel upon entry
-; @param src Source register, must contain source pixel upon entry
-; @param const_alpha Constant source alpha
-; @param r14 Component half 0x800080
-;
-; @note Trashes src, r8
-;-----------------------------------------------------------------------------
- MACRO
-$label PixelSourceConstAlpha $dst, $src, $const_alpha
-
- ; store r2 and r14 because we are going to trash them
- stmfd sp!, {r2, r14}
-
- rsb r2, $const_alpha, #255
- InterpolatePixel255 $dst, $src, $const_alpha, $dst, r2
-
- ; recover r2 and r14
- ldmfd sp!, {r2, r14}
-
- MEND
-
- END ; File end
diff --git a/src/gui/painting/qdrawhelper_armv6_rvct.s b/src/gui/painting/qdrawhelper_armv6_rvct.s
deleted file mode 100644
index 180980a..0000000
--- a/src/gui/painting/qdrawhelper_armv6_rvct.s
+++ /dev/null
@@ -1,177 +0,0 @@
-;****************************************************************************
-;**
-;** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-;** All rights reserved.
-;** Contact: Nokia Corporation (qt-info@nokia.com)
-;**
-;** This file is part of the QtGui module of the Qt Toolkit.
-;**
-;** $QT_BEGIN_LICENSE:LGPL$
-;** No Commercial Usage
-;** This file contains pre-release code and may not be distributed.
-;** You may use this file in accordance with the terms and conditions
-;** contained in the Technology Preview License Agreement accompanying
-;** this package.
-;**
-;** GNU Lesser General Public License Usage
-;** Alternatively, this file may be used under the terms of the GNU Lesser
-;** General Public License version 2.1 as published by the Free Software
-;** Foundation and appearing in the file LICENSE.LGPL included in the
-;** packaging of this file. Please review the following information to
-;** ensure the GNU Lesser General Public License version 2.1 requirements
-;** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-;**
-;** In addition, as a special exception, Nokia gives you certain additional
-;** rights. These rights are described in the Nokia Qt LGPL Exception
-;** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-;**
-;** If you have questions regarding the use of this file, please contact
-;** Nokia at qt-info@nokia.com.
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;**
-;** $QT_END_LICENSE$
-;**
-;****************************************************************************
-
-;
-; W A R N I N G
-; -------------
-;
-; This file is not part of the Qt API. It exists purely as an
-; implementation detail. This header file may change from version to
-; version without notice, or even be removed.
-;
-; We mean it.
-;
-
- ARM
- PRESERVE8
-
- INCLUDE qdrawhelper_armv6_rvct.inc
-
-;-----------------------------------------------------------------------------
-; qt_memfill32_armv6
-;
-; @brief Not yet in use!
-;
-; @param dest Destination buffer (r0)
-; @param value Value (r1)
-; @param count Count (r2)
-;
-;---------------------------------------------------------------------------
-qt_memfill32_armv6 Function
- stmfd sp!, {r4-r12, r14}
-
- mov r3, r1
- mov r4, r1
- mov r5, r1
- mov r6, r1
- mov r7, r1
- mov r8, r1
- mov r9, r1
-
-mfill_loop
- ; Fill 32 pixels per loop iteration
- subs r2, r2, #32
- stmgeia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
- stmgeia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
- stmgeia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
- stmgeia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
- bgt mfill_loop
-
-mfill_remaining
-
- ; Fill up to 31 remaining pixels
-
- ; Fill 16 pixels
- tst r2, #16
- stmneia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
- stmneia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
-
- ; Fill 8 pixels
- tst r2, #8
- stmneia r0!, {r1, r3, r4, r5, r6, r7, r8, r9}
-
- ; Fill 4 pixels
- tst r2, #4
- stmneia r0!, {r1, r3, r4, r5}
-
- ; Fill 2 pixels
- tst r2, #2
- stmneia r0!, {r1, r3}
-
- ; Fill last one
- tst r2, #1
- strne r1, [r0]
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-;-----------------------------------------------------------------------------
-; comp_func_Source_arm
-;
-; @brief
-;
-; @param dest Destination buffer (r0)
-; @param src Source buffer (r1)
-; @param length Length (r2)
-; @param const_alpha Constant alpha (r3)
-;
-;---------------------------------------------------------------------------
-comp_func_Source_armv6 Function
- stmfd sp!, {r4-r12, r14}
-
- cmp r3, #255 ; if(r3 == 255)
- bne src2 ; branch if not
-
-src1 PixCpy r0, r1, r2
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-src2
- ;ldr r14, =ComponentHalf ; load 0x800080 to r14
- mov r14, #0x800000
- add r14, r14, #0x80
-
-src22 BlendRow PixelSourceConstAlpha
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-;-----------------------------------------------------------------------------
-; comp_func_SourceOver_arm
-;
-; @brief
-;
-; @param dest Destination buffer (r0)
-; @param src Source buffer (r1)
-; @param length Length (r2)
-; @param const_alpha Constant alpha (r3)
-;
-;---------------------------------------------------------------------------
-comp_func_SourceOver_armv6 Function
- stmfd sp!, {r4-r12, r14}
-
- ;ldr r14, =ComponentHalf ; load 0x800080 to r14
- mov r14, #0x800000
- add r14, r14, #0x80
-
- cmp r3, #255 ; if(r3 == 255)
- bne srcovr2 ; branch if not
-
-srcovr1 BlendRow PixelSourceOver
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-srcovr2
-
-srcovr22 BlendRow PixelSourceOverConstAlpha
-
- ldmfd sp!, {r4-r12, pc} ; pop and return
-
-
- END ; File end
diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp
index f06e309..f594136 100644
--- a/src/gui/painting/qgraphicssystem.cpp
+++ b/src/gui/painting/qgraphicssystem.cpp
@@ -50,6 +50,9 @@
#ifdef Q_WS_MAC
# include <private/qpixmap_mac_p.h>
#endif
+#ifdef Q_WS_QPA
+# include <QtGui/private/qapplication_p.h>
+#endif
#ifdef Q_OS_SYMBIAN
# include <private/qpixmap_s60_p.h>
#endif
@@ -71,8 +74,10 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ
return new QRasterPixmapData(type);
#elif defined(Q_WS_MAC)
return new QMacPixmapData(type);
+#elif defined(Q_WS_QPA)
+ return QApplicationPrivate::platformIntegration()->createPixmapData(type);
#elif defined(Q_OS_SYMBIAN)
- return new QS60PixmapData(type);
+ return new QS60PixmapData(type);
#elif !defined(Q_WS_QWS)
#error QGraphicsSystem::createDefaultPixmapData() not implemented
#endif
diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h
index 1211505..a75ea61 100644
--- a/src/gui/painting/qgraphicssystem_p.h
+++ b/src/gui/painting/qgraphicssystem_p.h
@@ -55,10 +55,14 @@
#include "private/qpixmapdata_p.h"
#include "private/qwindowsurface_p.h"
+#include "private/qpaintengine_blitter_p.h"
+
+#include <qdebug.h>
QT_BEGIN_NAMESPACE
class QPixmapFilter;
+class QBlittable;
class Q_GUI_EXPORT QGraphicsSystem
{
@@ -67,7 +71,7 @@ public:
virtual QPixmapData *createPixmapData(QPixmapData *origin);
virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0;
- virtual ~QGraphicsSystem() = 0;
+ virtual ~QGraphicsSystem();
//### Remove this & change qpixmap.cpp & qbitmap.cpp once every platform is gaurenteed
// to have a graphics system.
diff --git a/src/gui/painting/qgraphicssystem_qws.cpp b/src/gui/painting/qgraphicssystem_qws.cpp
index f5dab4b..03a0d11 100644
--- a/src/gui/painting/qgraphicssystem_qws.cpp
+++ b/src/gui/painting/qgraphicssystem_qws.cpp
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
QPixmapData *QWSGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
{
if (screen->pixmapDataFactory())
- return screen->pixmapDataFactory()->create(type); //### For 4.4 compatability
+ return screen->pixmapDataFactory()->create(type); //### For 4.4 compatibility
else
return new QRasterPixmapData(type);
}
diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.c
index ec9ebeb..536f265 100644
--- a/src/gui/painting/qgrayraster.c
+++ b/src/gui/painting/qgrayraster.c
@@ -408,25 +408,31 @@
/* */
/* Record the current cell in the table. */
/* */
- static PCell
- gray_find_cell( RAS_ARG )
+ static void
+ gray_record_cell( RAS_ARG )
{
PCell *pcell, cell;
int x = ras.ex;
+ if ( ras.invalid || !( ras.area | ras.cover ) )
+ return;
if ( x > ras.max_ex )
x = ras.max_ex;
pcell = &ras.ycells[ras.ey];
+
for (;;)
{
cell = *pcell;
if ( cell == NULL || cell->x > x )
break;
- if ( cell->x == x )
- goto Exit;
+ if ( cell->x == x ) {
+ cell->area += ras.area;
+ cell->cover += ras.cover;
+ return;
+ }
pcell = &cell->next;
}
@@ -436,28 +442,11 @@
cell = ras.cells + ras.num_cells++;
cell->x = x;
- cell->area = 0;
- cell->cover = 0;
+ cell->area = ras.area;
+ cell->cover = ras.cover;
cell->next = *pcell;
*pcell = cell;
-
- Exit:
- return cell;
- }
-
-
- static void
- gray_record_cell( RAS_ARG )
- {
- if ( !ras.invalid && ( ras.area | ras.cover ) )
- {
- PCell cell = gray_find_cell( RAS_VAR );
-
-
- cell->area += ras.area;
- cell->cover += ras.cover;
- }
}
diff --git a/src/gui/painting/qgrayraster_p.h b/src/gui/painting/qgrayraster_p.h
index ad595b8..d610a9a 100644
--- a/src/gui/painting/qgrayraster_p.h
+++ b/src/gui/painting/qgrayraster_p.h
@@ -91,7 +91,7 @@
/* Minimum buffer size for raster object, that accounts
for TWorker and TCell sizes.*/
-#define MINIMUM_POOL_SIZE 4096
+#define MINIMUM_POOL_SIZE 8192
QT_FT_EXPORT_VAR( const QT_FT_Raster_Funcs ) qt_ft_grays_raster;
diff --git a/src/gui/painting/qimagescale.cpp b/src/gui/painting/qimagescale.cpp
index 8580775..7383308 100644
--- a/src/gui/painting/qimagescale.cpp
+++ b/src/gui/painting/qimagescale.cpp
@@ -304,7 +304,7 @@ QImageScaleInfo* QImageScale::qimageCalcScaleInfo(const QImage &img,
return(isi);
}
-/* FIXME: NEED to optimise ScaleAARGBA - currently its "ok" but needs work*/
+/* FIXME: NEED to optimize ScaleAARGBA - currently its "ok" but needs work*/
/* scale by area sampling */
static void qt_qimageScaleAARGBA(QImageScaleInfo *isi, unsigned int *dest,
diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp
index 4169df0..cde7bfa 100644
--- a/src/gui/painting/qpaintdevice.cpp
+++ b/src/gui/painting/qpaintdevice.cpp
@@ -59,11 +59,13 @@ QPaintDevice::~QPaintDevice()
}
+#ifndef Q_WS_QPA
int QPaintDevice::metric(PaintDeviceMetric) const
{
qWarning("QPaintDevice::metrics: Device has no metric information");
return 0;
}
+#endif
Q_GUI_EXPORT int qt_paint_device_metric(const QPaintDevice *device, QPaintDevice::PaintDeviceMetric metric)
{
diff --git a/src/gui/painting/qpaintdevice.qdoc b/src/gui/painting/qpaintdevice.qdoc
index 38a1575..5290766 100644
--- a/src/gui/painting/qpaintdevice.qdoc
+++ b/src/gui/painting/qpaintdevice.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/painting/qpaintdevice_qpa.cpp b/src/gui/painting/qpaintdevice_qpa.cpp
new file mode 100644
index 0000000..0d1ca92
--- /dev/null
+++ b/src/gui/painting/qpaintdevice_qpa.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qpaintdevice.h"
+#include "qpainter.h"
+#include "qwidget.h"
+#include "qbitmap.h"
+#include "qapplication.h"
+
+QT_BEGIN_NAMESPACE
+
+extern void qt_painter_removePaintDevice(QPaintDevice *); //qpainter.cpp
+
+int QPaintDevice::metric(PaintDeviceMetric m) const
+{
+ qWarning("QPaintDevice::metrics: Device has no metric information");
+ if (m == PdmDpiX) {
+ return 72;
+ } else if (m == PdmDpiY) {
+ return 72;
+ } else if (m == PdmNumColors) {
+ // FIXME: does this need to be a real value?
+ return 256;
+ } else {
+ qDebug("Unrecognised metric %d!",m);
+ return 0;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h
index b860012..ee9b457 100644
--- a/src/gui/painting/qpaintengine.h
+++ b/src/gui/painting/qpaintengine.h
@@ -213,6 +213,7 @@ public:
OpenVG,
OpenGL2,
PaintBuffer,
+ Blitter,
User = 50, // first user type id
MaxUser = 100 // last user type id
@@ -270,6 +271,9 @@ private:
friend class QtopiaPrintEnginePrivate;
friend class QProxyFontEngine;
#endif
+#ifdef Q_WS_QPA
+ friend class QFontEngineQPA;
+#endif
friend class QPainter;
friend class QPainterPrivate;
friend class QWidget;
diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp
new file mode 100644
index 0000000..2e8d9dd
--- /dev/null
+++ b/src/gui/painting/qpaintengine_blitter.cpp
@@ -0,0 +1,663 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qpaintengine_blitter_p.h"
+
+#include "private/qblittable_p.h"
+#include "private/qpaintengine_raster_p.h"
+#include "private/qpainter_p.h"
+#include "private/qapplication_p.h"
+#include "private/qpixmap_blitter_p.h"
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+#define STATE_XFORM_SCALE 0x00000001
+#define STATE_XFORM_COMPLEX 0x00000002
+
+#define STATE_BRUSH_PATTERN 0x00000010
+#define STATE_BRUSH_ALPHA 0x00000020
+
+#define STATE_PEN_ENABLED 0x00000100
+
+#define STATE_ANTIALIASING 0x00001000
+#define STATE_ALPHA 0x00002000
+#define STATE_BLENDING_COMPLEX 0x00004000
+
+#define STATE_CLIPSYS_COMPLEX 0x00010000
+#define STATE_CLIP_COMPLEX 0x00020000
+
+
+static inline void updateStateBits(uint *state, uint mask, bool on)
+{
+ *state = on ? (*state | mask) : (*state & ~mask);
+}
+
+static inline bool checkStateAgainstMask(uint state, uint mask)
+{
+ return !state || (state & mask && !(state & ~mask));
+}
+
+class CapabilitiesToStateMask
+{
+public:
+ CapabilitiesToStateMask(QBlittable::Capabilities capabilities)
+ : m_capabilities(capabilities),
+ fillRectMask(0),
+ drawRectMask(0),
+ drawPixmapMask(0),
+ capabillitiesState(0)
+ {
+ if (capabilities & QBlittable::SolidRectCapability) {
+ setFillRectMask();
+ }
+ if (capabilities & QBlittable::SourcePixmapCapability) {
+ setSourcePixmapMask();
+ }
+ if (capabilities & QBlittable::SourceOverPixmapCapability) {
+ setSourceOverPixmapMask();
+ }
+ if (capabilities & QBlittable::SourceOverScaledPixmapCapability) {
+ setSourceOverScaledPixmapMask();
+ }
+ }
+
+ inline bool canBlitterFillRect() const
+ {
+ return checkStateAgainstMask(capabillitiesState,fillRectMask);
+ }
+
+ inline bool canBlitterDrawRectMask() const
+ {
+ return checkStateAgainstMask(capabillitiesState,drawRectMask);
+ }
+
+ bool canBlitterDrawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) const
+ {
+ if (pm.pixmapData()->classId() != QPixmapData::BlitterClass)
+ return false;
+ if (checkStateAgainstMask(capabillitiesState,drawPixmapMask)) {
+ if (m_capabilities & (QBlittable::SourceOverPixmapCapability
+ | QBlittable::SourceOverScaledPixmapCapability)) {
+ if (r.size() != sr.size()) {
+ return m_capabilities & QBlittable::SourceOverScaledPixmapCapability;
+ } else {
+ return m_capabilities & QBlittable::SourceOverPixmapCapability;
+ }
+ }
+ if ((m_capabilities & QBlittable::SourcePixmapCapability) && r.size() == sr.size() && !pm.hasAlphaChannel()) {
+ return m_capabilities & QBlittable::SourcePixmapCapability;
+ }
+ }
+ return false;
+ }
+
+ inline void updateState(uint mask, bool on) {
+ updateStateBits(&capabillitiesState,mask,on);
+ }
+
+public:
+
+ void setFillRectMask() {
+ updateStateBits(&fillRectMask, STATE_XFORM_SCALE, false);
+ updateStateBits(&fillRectMask, STATE_XFORM_COMPLEX, false);
+
+ updateStateBits(&fillRectMask, STATE_BRUSH_PATTERN, false);
+ updateStateBits(&fillRectMask, STATE_BRUSH_ALPHA, false);
+
+ updateStateBits(&fillRectMask, STATE_PEN_ENABLED, true);
+
+ //Sub-pixel aliasing should not be sent to the blitter
+ updateStateBits(&fillRectMask, STATE_ANTIALIASING, true);
+ updateStateBits(&fillRectMask, STATE_ALPHA, false);
+ updateStateBits(&fillRectMask, STATE_BLENDING_COMPLEX, false);
+
+ updateStateBits(&fillRectMask, STATE_CLIPSYS_COMPLEX, false);
+ updateStateBits(&fillRectMask, STATE_CLIP_COMPLEX, false);
+ }
+
+ void setSourcePixmapMask() {
+ updateStateBits(&drawPixmapMask, STATE_XFORM_SCALE, true);
+ updateStateBits(&drawPixmapMask, STATE_XFORM_COMPLEX, false);
+
+ updateStateBits(&drawPixmapMask, STATE_BRUSH_PATTERN, true);
+ updateStateBits(&drawPixmapMask, STATE_BRUSH_ALPHA, false);
+
+ updateStateBits(&drawPixmapMask, STATE_PEN_ENABLED, true);
+
+ updateStateBits(&drawPixmapMask, STATE_ANTIALIASING, true);
+ updateStateBits(&drawPixmapMask, STATE_ALPHA, false);
+ updateStateBits(&drawPixmapMask, STATE_BLENDING_COMPLEX, false);
+
+ updateStateBits(&drawPixmapMask, STATE_CLIPSYS_COMPLEX, false);
+ updateStateBits(&drawPixmapMask, STATE_CLIP_COMPLEX, false);
+ }
+
+ void setSourceOverPixmapMask() {
+ setSourcePixmapMask();
+ }
+
+ void setSourceOverScaledPixmapMask() {
+ setSourceOverPixmapMask();
+ updateStateBits(&drawRectMask, STATE_XFORM_SCALE, true);
+ }
+
+ QBlittable::Capabilities m_capabilities;
+ uint fillRectMask;
+ uint drawRectMask;
+ uint drawPixmapMask;
+ uint capabillitiesState;
+};
+
+class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate
+{
+ Q_DECLARE_PUBLIC(QBlitterPaintEngine);
+public:
+ QBlitterPaintEnginePrivate(QBlittablePixmapData *p)
+ : QPaintEngineExPrivate(),
+ pmData(p),
+ isBlitterLocked(false),
+ hasXForm(false)
+
+ {
+ raster = new QRasterPaintEngine(p->buffer());
+ capabillities = new CapabilitiesToStateMask(pmData->blittable()->capabilities());
+ }
+
+ inline void lock() {
+ if (!isBlitterLocked) {
+ raster->d_func()->rasterBuffer->prepare(pmData->blittable()->lock());
+ isBlitterLocked = true;
+ }
+ }
+
+ inline void unlock() {
+ if (isBlitterLocked) {
+ pmData->blittable()->unlock();
+ isBlitterLocked = false;
+ }
+ }
+
+ void fillRect(const QRectF &rect, const QColor &color) {
+ Q_Q(QBlitterPaintEngine);
+ pmData->unmarkRasterOverlay(rect);
+ QRectF targetRect = rect;
+ if (hasXForm) {
+ targetRect = q->state()->matrix.mapRect(rect);
+ }
+ const QClipData *clipData = q->clip();
+ if (clipData) {
+ if (clipData->hasRectClip) {
+ unlock();
+ pmData->blittable()->fillRect(targetRect & clipData->clipRect, color);
+ } else if (clipData->hasRegionClip) {
+ QVector<QRect> rects = clipData->clipRegion.rects();
+ for ( int i = 0; i < rects.size(); i++ ) {
+ QRect intersectRect = rects.at(i).intersected(targetRect.toRect());
+ if (!intersectRect.isEmpty()) {
+ unlock();
+ pmData->blittable()->fillRect(intersectRect,color);
+ }
+ }
+ }
+ } else {
+ if (targetRect.x() >= 0 && targetRect.y() >= 0
+ && targetRect.width() <= raster->paintDevice()->width()
+ && targetRect.height() <= raster->paintDevice()->height()) {
+ unlock();
+ pmData->blittable()->fillRect(targetRect,color);
+ } else {
+ QRectF deviceRect(0,0,raster->paintDevice()->width(), raster->paintDevice()->height());
+ unlock();
+ pmData->blittable()->fillRect(deviceRect&targetRect,color);
+ }
+ }
+ }
+
+ void clipAndDrawPixmap(const QRectF &clip, const QRectF &target, const QPixmap &pm, const QRectF &sr) {
+ QRectF intersectedRect = clip.intersected(target);
+ if (intersectedRect.isEmpty())
+ return;
+ QRectF source = sr;
+ if(intersectedRect.size() != target.size()) {
+ qreal deltaTop = target.top() - intersectedRect.top();
+ qreal deltaLeft = target.left() - intersectedRect.left();
+ qreal deltaBottom = target.bottom() - intersectedRect.bottom();
+ qreal deltaRight = target.right() - intersectedRect.right();
+ source.adjust(-deltaLeft,-deltaTop,-deltaRight,-deltaBottom);
+ }
+ pmData->unmarkRasterOverlay(intersectedRect);
+ pmData->blittable()->drawPixmap(intersectedRect, pm, source);
+ }
+
+ void updateClip() {
+ Q_Q(QBlitterPaintEngine);
+ const QClipData *clip = q->clip();
+ bool complex = clip && !(clip->hasRectClip || clip->hasRegionClip);
+ capabillities->updateState(STATE_CLIP_COMPLEX, complex);
+ }
+
+ void systemStateChanged() {
+ raster->d_func()->systemStateChanged();
+ }
+
+ QRasterPaintEngine *raster;
+
+ QBlittablePixmapData *pmData;
+ bool isBlitterLocked;
+
+ CapabilitiesToStateMask *capabillities;
+
+ uint hasXForm;
+};
+
+QBlitterPaintEngine::QBlitterPaintEngine(QBlittablePixmapData *p)
+ : QPaintEngineEx(*(new QBlitterPaintEnginePrivate(p)))
+{
+}
+
+QBlitterPaintEngine::~QBlitterPaintEngine()
+{
+}
+
+QPainterState *QBlitterPaintEngine::createState(QPainterState *orig) const
+{
+ Q_D(const QBlitterPaintEngine);
+ return d->raster->createState(orig);
+}
+
+bool QBlitterPaintEngine::begin(QPaintDevice *pdev)
+{
+ Q_D(QBlitterPaintEngine);
+
+ setActive(true);
+ bool ok = d->raster->begin(pdev);
+#ifdef QT_BLITTER_RASTEROVERLAY
+ d->pmData->unmergeOverlay();
+#endif
+ return ok;
+}
+
+
+bool QBlitterPaintEngine::end()
+{
+ Q_D(QBlitterPaintEngine);
+
+ setActive(false);
+#ifdef QT_BLITTER_RASTEROVERLAY
+ d->pmData->mergeOverlay();
+#endif
+ return d->raster->end();
+}
+
+
+void QBlitterPaintEngine::fill(const QVectorPath &path, const QBrush &brush)
+{
+ Q_D(QBlitterPaintEngine);
+ if (path.shape() == QVectorPath::RectangleHint) {
+ QRectF rect(((QPointF *) path.points())[0], ((QPointF *) path.points())[2]);
+ fillRect(rect, brush);
+ } else {
+ d->lock();
+ d->pmData->markRasterOverlay(path);
+ d->raster->fill(path, brush);
+ }
+}
+
+void QBlitterPaintEngine::fillRect(const QRectF &rect, const QColor &color)
+{
+ Q_D(QBlitterPaintEngine);
+ if (d->capabillities->canBlitterFillRect() && color.alpha() == 0xff) {
+ d->fillRect(rect, color);
+ } else {
+ d->lock();
+ d->pmData->markRasterOverlay(rect);
+ d->raster->fillRect(rect, color);
+ }
+}
+
+void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush)
+{
+ if(rect.size().isEmpty())
+ return;
+
+ Q_D(QBlitterPaintEngine);
+
+ if (qbrush_style(brush) == Qt::SolidPattern
+ && qbrush_color(brush).alpha() == 0xff
+ && d->capabillities->canBlitterFillRect())
+ {
+ d->fillRect(rect, qbrush_color(brush));
+ }else if (brush.style() == Qt::TexturePattern
+ && d->capabillities->canBlitterDrawPixmap(rect,brush.texture(),rect))
+ {
+ bool rectIsFilled = false;
+ QRectF transformedRect = state()->matrix.mapRect(rect);
+ qreal x = transformedRect.x();
+ qreal y = transformedRect.y();
+ QPixmap pm = brush.texture();
+ d->unlock();
+ int srcX = int(rect.x() - state()->brushOrigin.x()) % pm.width();
+ if (srcX < 0)
+ srcX = pm.width() + srcX;
+ const int startX = srcX;
+ int srcY = int(rect.y() - state()->brushOrigin.y()) % pm.height();
+ if (srcY < 0)
+ srcY = pm.height() + srcY;
+ while (!rectIsFilled) {
+ qreal blitWidth = (pm.width() ) - srcX;
+ qreal blitHeight = (pm.height() ) - srcY;
+ if (x + blitWidth > transformedRect.right())
+ blitWidth = transformedRect.right() -x;
+ if (y + blitHeight > transformedRect.bottom())
+ blitHeight = transformedRect.bottom() - y;
+ const QClipData *clipData = clip();
+ if (clipData->hasRectClip) {
+ QRect targetRect = QRect(x,y,blitWidth,blitHeight).intersected(clipData->clipRect);
+ if (targetRect.isValid()) {
+ int tmpSrcX = srcX + (targetRect.x() - x);
+ int tmpSrcY = srcY + (targetRect.y() - y);
+ QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height());
+ d->pmData->blittable()->drawPixmap(targetRect,pm,srcRect);
+ }
+ } else if (clipData->hasRegionClip) {
+ QVector<QRect> clipRects = clipData->clipRegion.rects();
+ QRect unclippedTargetRect(x,y,blitWidth,blitHeight);
+ QRegion intersectedRects = clipData->clipRegion.intersected(unclippedTargetRect);
+
+ for ( int i = 0; i < intersectedRects.rects().size(); i++ ) {
+ QRect targetRect = intersectedRects.rects().at(i);
+ if (!targetRect.isValid() || targetRect.isEmpty())
+ continue;
+ int tmpSrcX = srcX + (targetRect.x() - x);
+ int tmpSrcY = srcY + (targetRect.y() - y);
+ QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height());
+ d->pmData->blittable()->drawPixmap(targetRect,pm,srcRect);
+ }
+ }
+ x+=blitWidth;
+ if (x>=transformedRect.right()) {
+ x = transformedRect.x();
+ srcX = startX;
+ srcY = 0;
+ y+=blitHeight;
+ if (y>=transformedRect.bottom())
+ rectIsFilled = true;
+ } else
+ srcX = 0;
+ }
+ } else {
+ d->lock();
+ d->pmData->markRasterOverlay(rect);
+ d->raster->fillRect(rect, brush);
+ }
+
+}
+
+void QBlitterPaintEngine::stroke(const QVectorPath &path, const QPen &pen)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->pmData->markRasterOverlay(path);
+ d->raster->stroke(path, pen);
+}
+
+void QBlitterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->clip(path, op);
+ d->updateClip();
+}
+void QBlitterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op){
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->clip(rect,op);
+ d->updateClip();
+}
+void QBlitterPaintEngine::clip(const QRegion &region, Qt::ClipOperation op)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->clip(region,op);
+ d->updateClip();
+}
+
+void QBlitterPaintEngine::clipEnabledChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->clipEnabledChanged();
+}
+
+void QBlitterPaintEngine::penChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->penChanged();
+ d->capabillities->updateState(STATE_PEN_ENABLED,qpen_style(state()->pen) != Qt::NoPen);
+}
+
+void QBlitterPaintEngine::brushChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->brushChanged();
+
+ bool solid = qbrush_style(state()->brush) == Qt::SolidPattern;
+
+ d->capabillities->updateState(STATE_BRUSH_PATTERN, !solid);
+ d->capabillities->updateState(STATE_BRUSH_ALPHA,
+ qbrush_color(state()->brush).alpha() < 255);
+}
+
+void QBlitterPaintEngine::brushOriginChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->brushOriginChanged();
+}
+
+void QBlitterPaintEngine::opacityChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->opacityChanged();
+
+ bool translucent = state()->opacity < 1;
+ d->capabillities->updateState(STATE_ALPHA,translucent);
+}
+
+void QBlitterPaintEngine::compositionModeChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->compositionModeChanged();
+
+ bool nonTrivial = state()->composition_mode != QPainter::CompositionMode_SourceOver
+ && state()->composition_mode != QPainter::CompositionMode_Source;
+
+ d->capabillities->updateState(STATE_BLENDING_COMPLEX,nonTrivial);
+}
+
+void QBlitterPaintEngine::renderHintsChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->renderHintsChanged();
+
+ bool aa = state()->renderHints & QPainter::Antialiasing;
+ d->capabillities->updateState(STATE_ANTIALIASING, aa);
+
+}
+
+void QBlitterPaintEngine::transformChanged()
+{
+ Q_D(QBlitterPaintEngine);
+ d->raster->transformChanged();
+
+ QTransform::TransformationType type = state()->matrix.type();
+
+ d->capabillities->updateState(STATE_XFORM_COMPLEX, type > QTransform::TxScale);
+ d->capabillities->updateState(STATE_XFORM_SCALE, type > QTransform::TxTranslate);
+
+ d->hasXForm = type >= QTransform::TxTranslate;
+
+}
+
+void QBlitterPaintEngine::drawRects(const QRect *rects, int rectCount)
+{
+ Q_D(QBlitterPaintEngine);
+ if (d->capabillities->canBlitterDrawRectMask()) {
+ for (int i=0; i<rectCount; ++i) {
+ d->fillRect(rects[i], qbrush_color(state()->brush));
+ }
+ } else {
+ d->pmData->markRasterOverlay(rects,rectCount);
+ QPaintEngineEx::drawRects(rects, rectCount);
+ }
+}
+
+void QBlitterPaintEngine::drawRects(const QRectF *rects, int rectCount)
+{
+ Q_D(QBlitterPaintEngine);
+ if (d->capabillities->canBlitterDrawRectMask()) {
+ for (int i=0; i<rectCount; ++i) {
+ d->fillRect(rects[i], qbrush_color(state()->brush));
+ }
+ } else {
+ d->pmData->markRasterOverlay(rects,rectCount);
+ QPaintEngineEx::drawRects(rects, rectCount);
+ }
+}
+
+void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
+{
+ Q_D(QBlitterPaintEngine);
+ if (d->capabillities->canBlitterDrawPixmap(r,pm,sr)) {
+
+ d->unlock();
+ QRectF targetRect = r;
+ if (d->hasXForm) {
+ targetRect = state()->matrix.mapRect(r);
+ }
+ const QClipData *clipData = clip();
+ if (clipData) {
+ if (clipData->hasRectClip) {
+ d->clipAndDrawPixmap(clipData->clipRect,targetRect,pm,sr);
+ }else if (clipData->hasRegionClip) {
+ QVector<QRect>rects = clipData->clipRegion.rects();
+ for (int i = 0; i<rects.size(); i++) {
+ d->clipAndDrawPixmap(rects.at(i),targetRect,pm,sr);
+ }
+ }
+ } else {
+ QRectF deviceRect(0,0,d->raster->paintDevice()->width(), d->raster->paintDevice()->height());
+ d->clipAndDrawPixmap(deviceRect,targetRect,pm,sr);
+ }
+ }else {
+ d->lock();
+ d->pmData->markRasterOverlay(r);
+ d->raster->drawPixmap(r, pm, sr);
+ }
+}
+
+void QBlitterPaintEngine::drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
+ Qt::ImageConversionFlags flags)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->pmData->markRasterOverlay(r);
+ d->raster->drawImage(r, pm, sr, flags);
+}
+
+
+void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->drawTextItem(pos, ti);
+ d->pmData->markRasterOverlay(pos,ti);
+}
+
+void QBlitterPaintEngine::drawStaticTextItem(QStaticTextItem *sti)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->raster->drawStaticTextItem(sti);
+
+//#### d->pmData->markRasterOverlay(sti);
+ qWarning("not implemented: markRasterOverlay for QStaticTextItem");
+
+}
+
+
+void QBlitterPaintEngine::drawEllipse(const QRectF &r)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ d->pmData->markRasterOverlay(r);
+ d->raster->drawEllipse(r);
+}
+
+void QBlitterPaintEngine::setState(QPainterState *s)
+{
+ Q_D(QBlitterPaintEngine);
+ d->lock();
+ QPaintEngineEx::setState(s);
+ d->raster->setState(s);
+
+ clipEnabledChanged();
+ penChanged();
+ brushChanged();
+ brushOriginChanged();
+ opacityChanged();
+ compositionModeChanged();
+ renderHintsChanged();
+ transformChanged();
+
+ d->updateClip();
+}
+
+inline QRasterPaintEngine *QBlitterPaintEngine::raster() const
+{
+ Q_D(const QBlitterPaintEngine);
+ return d->raster;
+}
+
+QT_END_NAMESPACE
+#endif //QT_NO_BLITTABLE
+
diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h
new file mode 100644
index 0000000..c8aa536
--- /dev/null
+++ b/src/gui/painting/qpaintengine_blitter_p.h
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPAINTENGINE_BLITTER_P_H
+#define QPAINTENGINE_BLITTER_P_H
+
+#include "private/qpaintengineex_p.h"
+#include "private/qpaintengine_raster_p.h"
+
+#ifndef QT_NO_BLITTABLE
+QT_BEGIN_NAMESPACE
+
+class QBlitterPaintEnginePrivate;
+class QBlittablePixmapData;
+class QBlittable;
+
+class Q_GUI_EXPORT QBlitterPaintEngine : public QPaintEngineEx
+{
+ Q_DECLARE_PRIVATE(QBlitterPaintEngine);
+public:
+ QBlitterPaintEngine(QBlittablePixmapData *p);
+ ~QBlitterPaintEngine();
+
+ virtual QPainterState *createState(QPainterState *orig) const;
+
+ virtual QPaintEngine::Type type() const { return Blitter; }
+
+ virtual bool begin(QPaintDevice *pdev);
+ virtual bool end();
+
+ virtual void fill(const QVectorPath &path, const QBrush &brush);
+ virtual void stroke(const QVectorPath &path, const QPen &pen);
+
+ virtual void clip(const QVectorPath &path, Qt::ClipOperation op);
+ virtual void clip(const QRect &rect, Qt::ClipOperation op);
+ virtual void clip(const QRegion &region, Qt::ClipOperation op);
+
+ virtual void clipEnabledChanged();
+ virtual void penChanged();
+ virtual void brushChanged();
+ virtual void brushOriginChanged();
+ virtual void opacityChanged();
+ virtual void compositionModeChanged();
+ virtual void renderHintsChanged();
+ virtual void transformChanged();
+
+ virtual void fillRect(const QRectF &rect, const QBrush &brush);
+ virtual void fillRect(const QRectF &rect, const QColor &color);
+
+ virtual void drawRects(const QRect *rects, int rectCount);
+ virtual void drawRects(const QRectF *rects, int rectCount);
+
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
+
+ virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags);
+
+ virtual void drawTextItem(const QPointF &pos, const QTextItem &ti);
+ virtual void drawStaticTextItem(QStaticTextItem *);
+
+ virtual void drawEllipse(const QRectF &r);
+
+ virtual void setState(QPainterState *s);
+
+ inline QPainterState *state() { return raster()->state(); }
+ inline const QPainterState *state() const { const QPainterState *state = raster()->state(); return state;}
+ inline const QClipData *clip(){return raster()->d_func()->clip();}
+
+private:
+ QRasterPaintEngine *raster() const;
+};
+
+QT_END_NAMESPACE
+#endif //QT_NO_BLITTABLE
+#endif // QPAINTENGINE_BLITTER_P_H
+
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index dbf7b26..97dfddf 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -40,6 +40,7 @@
****************************************************************************/
#include <QtCore/qglobal.h>
+#include <QtCore/qmutex.h>
#define QT_FT_BEGIN_HEADER
#define QT_FT_END_HEADER
@@ -95,6 +96,8 @@
# include <private/qabstractfontengine_p.h>
#elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
# include <private/qfontengine_s60_p.h>
+#elif defined(Q_WS_QPA)
+# include <private/qfontengine_ft_p.h>
#endif
#if defined(Q_WS_WIN64)
@@ -440,7 +443,7 @@ bool QRasterPaintEngine::begin(QPaintDevice *device)
if (device->devType() == QInternal::Pixmap) {
QPixmap *pixmap = static_cast<QPixmap *>(device);
QPixmapData *pd = pixmap->pixmapData();
- if (pd->classId() == QPixmapData::RasterClass)
+ if (pd->classId() == QPixmapData::RasterClass || pd->classId() == QPixmapData::BlitterClass)
d->device = pd->buffer();
} else {
d->device = device;
@@ -871,9 +874,10 @@ void QRasterPaintEngine::updateState()
if (s->dirty & DirtyTransform)
updateMatrix(s->matrix);
- if (s->dirty & (DirtyPen|DirtyCompositionMode)) {
+ if (s->dirty & (DirtyPen|DirtyCompositionMode|DirtyOpacity)) {
const QPainter::CompositionMode mode = s->composition_mode;
s->flags.fast_text = (s->penData.type == QSpanData::Solid)
+ && s->intOpacity == 256
&& (mode == QPainter::CompositionMode_Source
|| (mode == QPainter::CompositionMode_SourceOver
&& qAlpha(s->penData.solid.color) == 255));
@@ -897,6 +901,7 @@ void QRasterPaintEngine::opacityChanged()
s->fillFlags |= DirtyOpacity;
s->strokeFlags |= DirtyOpacity;
s->pixmapFlags |= DirtyOpacity;
+ s->dirty |= DirtyOpacity;
s->intOpacity = (int) (s->opacity * 256);
}
@@ -1099,7 +1104,7 @@ void QRasterPaintEnginePrivate::updateMatrixData(QSpanData *spanData, const QBru
Q_Q(QRasterPaintEngine);
bool bilinear = q->state()->flags.bilinear;
- if (b.d->transform.type() > QTransform::TxNone) { // FALCON: optimise
+ if (b.d->transform.type() > QTransform::TxNone) { // FALCON: optimize
spanData->setupMatrix(b.transform() * m, bilinear);
} else {
if (m.type() <= QTransform::TxTranslate) {
@@ -2480,7 +2485,7 @@ void QRasterPaintEngine::drawImage(const QPointF &p, const QImage &img)
const QClipData *clip = d->clip();
QPointF pt(p.x() + s->matrix.dx(), p.y() + s->matrix.dy());
- if (s->flags.fast_images) {
+ if (d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) {
SrcOverBlendFunc func = qBlendFunctions[d->rasterBuffer->format][img.format()];
if (func) {
if (!clip) {
@@ -2661,7 +2666,7 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
bool exceedsPrecision = targetBounds.width() > 0xffff
|| targetBounds.height() > 0xffff;
- if (s->flags.fast_images && !exceedsPrecision) {
+ if (!exceedsPrecision && d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) {
if (s->matrix.type() > QTransform::TxScale) {
SrcOverTransformFunc func = qTransformFunctions[d->rasterBuffer->format][img.format()];
if (func && (!clip || clip->hasRectClip)) {
@@ -2733,8 +2738,7 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
fillPath(path, &d->image_filler_xform);
s->matrix = m;
} else {
-
- if (s->flags.fast_images) {
+ if (d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) {
SrcOverBlendFunc func = qBlendFunctions[d->rasterBuffer->format][img.format()];
if (func) {
QPointF pt(r.x() + s->matrix.dx(), r.y() + s->matrix.dy());
@@ -3153,10 +3157,8 @@ void QRasterPaintEngine::drawGlyphsS60(const QPointF &p, const QTextItemInt &ti)
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
fe->getCharacterData(glyphs[i], tmetrics, glyphBitmapBytes, glyphBitmapSize);
- const glyph_metrics_t metrics = ti.fontEngine->boundingBox(glyphs[i]);
- const int x = qFloor(positions[i].x + metrics.x);
- const int y = qFloor(positions[i].y + metrics.y);
-
+ const int x = qFloor(positions[i].x + tmetrics.HorizBearingX());
+ const int y = qFloor(positions[i].y - tmetrics.HorizBearingY());
alphaPenBlt(glyphBitmapBytes, glyphBitmapSize.iWidth, 8, x, y, glyphBitmapSize.iWidth, glyphBitmapSize.iHeight);
}
@@ -3291,7 +3293,7 @@ void QRasterPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
ensureState();
drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->glyphPositions,
- textItem->fontEngine);
+ textItem->fontEngine());
}
/*!
@@ -3383,6 +3385,33 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte
}
#endif // Q_WS_QWS
+#ifdef Q_WS_QPA
+ if (s->matrix.type() < QTransform::TxScale) {
+
+ QVarLengthArray<QFixedPoint> positions;
+ QVarLengthArray<glyph_t> glyphs;
+ QTransform matrix = state()->transform();
+
+ qreal _x = qFloor(p.x());
+ qreal _y = qFloor(p.y());
+ matrix.translate(_x, _y);
+
+ fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
+ if (glyphs.size() == 0)
+ return;
+
+ for(int i = 0; i < glyphs.size(); i++) {
+ QImage img = fontEngine->alphaMapForGlyph(glyphs[i]);
+ glyph_metrics_t metrics = fontEngine->boundingBox(glyphs[i]);
+ alphaPenBlt(img.bits(), img.bytesPerLine(), img.depth(),
+ qRound(positions[i].x + metrics.x),
+ qRound(positions[i].y + metrics.y),
+ img.width(), img.height());
+ }
+ return;
+ }
+#endif //Q_WS_QPA
+
#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE)
#if defined(Q_WS_QWS) && !defined(QT_NO_QWS_QPF2)
@@ -4263,11 +4292,19 @@ void QRasterPaintEnginePrivate::recalculateFastImages()
QRasterPaintEngineState *s = q->state();
s->flags.fast_images = !(s->renderHints & QPainter::SmoothPixmapTransform)
- && rasterBuffer->compositionMode == QPainter::CompositionMode_SourceOver
&& s->matrix.type() <= QTransform::TxShear;
}
+bool QRasterPaintEnginePrivate::canUseFastImageBlending(QPainter::CompositionMode mode, const QImage &image) const
+{
+ Q_Q(const QRasterPaintEngine);
+ const QRasterPaintEngineState *s = q->state();
+ return s->flags.fast_images
+ && (mode == QPainter::CompositionMode_SourceOver
+ || (mode == QPainter::CompositionMode_Source
+ && !image.hasAlphaChannel()));
+}
QImage QRasterBuffer::colorizeBitmap(const QImage &image, const QColor &color)
{
@@ -4594,38 +4631,40 @@ void QClipData::fixup()
return;
}
-// qDebug("QClipData::fixup: count=%d",count);
int y = -1;
ymin = m_spans[0].y;
ymax = m_spans[count-1].y + 1;
xmin = INT_MAX;
xmax = 0;
+ const int firstLeft = m_spans[0].x;
+ const int firstRight = m_spans[0].x + m_spans[0].len;
bool isRect = true;
- int left = m_spans[0].x;
- int right = m_spans[0].x + m_spans[0].len;
for (int i = 0; i < count; ++i) {
- if (m_spans[i].y != y) {
- if (m_spans[i].y != y + 1 && y != -1) {
+ QT_FT_Span_& span = m_spans[i];
+
+ if (span.y != y) {
+ if (span.y != y + 1 && y != -1)
isRect = false;
- }
- y = m_spans[i].y;
- m_clipLines[y].spans = m_spans+i;
- m_clipLines[y].count = 0;
-// qDebug() << " new line: y=" << y;
- }
- ++m_clipLines[y].count;
- int sl = (int) m_spans[i].x;
- int sr = sl + m_spans[i].len;
+ y = span.y;
+ m_clipLines[y].spans = &span;
+ m_clipLines[y].count = 1;
+ } else
+ ++m_clipLines[y].count;
+
+ const int spanLeft = span.x;
+ const int spanRight = spanLeft + span.len;
+
+ if (spanLeft < xmin)
+ xmin = spanLeft;
- xmin = qMin(xmin, (int)m_spans[i].x);
- xmax = qMax(xmax, (int)m_spans[i].x + m_spans[i].len);
+ if (spanRight > xmax)
+ xmax = spanRight;
- if (sl != left || sr != right)
+ if (spanLeft != firstLeft || spanRight != firstRight)
isRect = false;
}
-// qDebug("xmin=%d,xmax=%d,ymin=%d,ymax=%d %s", xmin, xmax, ymin, ymax, isRect ? "rectangular" : "");
if (isRect) {
hasRectClip = true;
@@ -4936,6 +4975,7 @@ public:
for (int i = 0; i < stops.size() && i <= 2; i++)
hash_val += stops[i].second.rgba();
+ QMutexLocker lock(&mutex);
QGradientColorTableHash::const_iterator it = cache.constFind(hash_val);
if (it == cache.constEnd())
@@ -4960,8 +5000,8 @@ protected:
int size, int opacity) const;
uint *addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) {
if (cache.size() == maxCacheSize()) {
- int elem_to_remove = qrand() % maxCacheSize();
- cache.remove(cache.keys()[elem_to_remove]); // may remove more than 1, but OK
+ // may remove more than 1, but OK
+ cache.erase(cache.begin() + (qrand() % maxCacheSize()));
}
CacheInfo cache_entry(gradient.stops(), opacity, gradient.interpolationMode());
generateGradientColorTable(gradient, cache_entry.buffer, paletteSize(), opacity);
@@ -4969,6 +5009,7 @@ protected:
}
QGradientColorTableHash cache;
+ QMutex mutex;
};
void QGradientCache::generateGradientColorTable(const QGradient& gradient, uint *colorTable, int size, int opacity) const
diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h
index 1016f8d..404528c 100644
--- a/src/gui/painting/qpaintengine_raster_p.h
+++ b/src/gui/painting/qpaintengine_raster_p.h
@@ -254,6 +254,8 @@ protected:
QRasterPaintEngine(QRasterPaintEnginePrivate &d, QPaintDevice *);
private:
friend struct QSpanData;
+ friend class QBlitterPaintEngine;
+ friend class QBlitterPaintEnginePrivate;
void init();
void fillRect(const QRectF &rect, QSpanData *data);
@@ -338,6 +340,7 @@ public:
void initializeRasterizer(QSpanData *data);
void recalculateFastImages();
+ bool canUseFastImageBlending(QPainter::CompositionMode mode, const QImage &image) const;
QPaintDevice *device;
QScopedPointer<QOutlineMapper> outlineMapper;
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index b0ca6ed..546861a 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -5857,7 +5857,7 @@ void QPainterPrivate::drawGlyphs(quint32 *glyphArray, QFixedPoint *positions, in
QStaticTextItem staticTextItem;
staticTextItem.color = state->pen.color();
staticTextItem.font = state->font;
- staticTextItem.fontEngine = fontEngine;
+ staticTextItem.setFontEngine(fontEngine);
staticTextItem.numGlyphs = glyphCount;
staticTextItem.glyphs = reinterpret_cast<glyph_t *>(const_cast<glyph_t *>(glyphArray));
staticTextItem.glyphPositions = positions;
@@ -6064,7 +6064,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText
d->extended->drawStaticTextItem(item);
drawDecorationForGlyphs(this, item->glyphs, item->glyphPositions,
- item->numGlyphs, item->fontEngine, staticText_d->font,
+ item->numGlyphs, item->fontEngine(), staticText_d->font,
QTextCharFormat());
}
if (currentColor != oldPen.color())
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index ffd0d5c..7d6ea12 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -576,6 +576,14 @@ QPainterPath &QPainterPath::operator=(const QPainterPath &other)
}
/*!
+ \fn void QPainterPath::swap(QPainterPath &other)
+ \since 4.8
+
+ Swaps painter path \a other with this painter path. This operation is very
+ fast and never fails.
+*/
+
+/*!
Destroys this QPainterPath object.
*/
QPainterPath::~QPainterPath()
diff --git a/src/gui/painting/qpainterpath.h b/src/gui/painting/qpainterpath.h
index 9a7b60a..82facf8 100644
--- a/src/gui/painting/qpainterpath.h
+++ b/src/gui/painting/qpainterpath.h
@@ -100,6 +100,7 @@ public:
{ qSwap(d_ptr, other.d_ptr); return *this; }
#endif
~QPainterPath();
+ inline void swap(QPainterPath &other) { d_ptr.swap(other.d_ptr); }
void closeSubpath();
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index ba5d164..45af03a 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -915,7 +915,6 @@ const char *QPdf::paperSizeToString(QPrinter::PaperSize paperSize)
return psToStr[paperSize];
}
-
// -------------------------- base engine, shared code between PS and PDF -----------------------
QPdfBaseEngine::QPdfBaseEngine(QPdfBaseEnginePrivate &dd, PaintEngineFeatures f)
diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp
index 2e43984..0137763 100644
--- a/src/gui/painting/qpen.cpp
+++ b/src/gui/painting/qpen.cpp
@@ -383,6 +383,14 @@ QPen &QPen::operator=(const QPen &p)
}
/*!
+ \fn void QPen::swap(QPen &other)
+ \since 4.8
+
+ Swaps pen \a other with this pen. This operation is very
+ fast and never fails.
+*/
+
+/*!
Returns the pen as a QVariant.
*/
QPen::operator QVariant() const
diff --git a/src/gui/painting/qpen.h b/src/gui/painting/qpen.h
index 4006112..a7b946c 100644
--- a/src/gui/painting/qpen.h
+++ b/src/gui/painting/qpen.h
@@ -78,6 +78,7 @@ public:
inline QPen &operator=(QPen &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QPen &other) { qSwap(d, other.d); }
Qt::PenStyle style() const;
void setStyle(Qt::PenStyle);
diff --git a/src/gui/painting/qpolygon.cpp b/src/gui/painting/qpolygon.cpp
index 2fb52b5..83323d0 100644
--- a/src/gui/painting/qpolygon.cpp
+++ b/src/gui/painting/qpolygon.cpp
@@ -700,6 +700,22 @@ QPolygon QPolygonF::toPolygon() const
}
/*!
+ \fn void QPolygon::swap(QPolygon &other)
+ \since 4.8
+
+ Swaps polygon \a other with this polygon. This operation is very
+ fast and never fails.
+*/
+
+/*!
+ \fn void QPolygonF::swap(QPolygonF &other)
+ \since 4.8
+
+ Swaps polygon \a other with this polygon. This operation is very
+ fast and never fails.
+*/
+
+/*!
Returns the polygon as a QVariant
*/
QPolygon::operator QVariant() const
diff --git a/src/gui/painting/qpolygon.h b/src/gui/painting/qpolygon.h
index 7a49e29..5baffc8 100644
--- a/src/gui/painting/qpolygon.h
+++ b/src/gui/painting/qpolygon.h
@@ -67,6 +67,8 @@ public:
inline QPolygon(const QVector<QPoint> &v) : QVector<QPoint>(v) {}
QPolygon(const QRect &r, bool closed=false);
QPolygon(int nPoints, const int *points);
+ inline void swap(QPolygon &other) { QVector<QPoint>::swap(other); } // prevent QVector<QPoint><->QPolygon swaps
+
operator QVariant() const;
void translate(int dx, int dy);
@@ -139,6 +141,7 @@ public:
inline QPolygonF(const QVector<QPointF> &v) : QVector<QPointF>(v) {}
QPolygonF(const QRectF &r);
QPolygonF(const QPolygon &a);
+ inline void swap(QPolygonF &other) { QVector<QPointF>::swap(other); } // prevent QVector<QPointF><->QPolygonF swaps
inline void translate(qreal dx, qreal dy);
void translate(const QPointF &offset);
diff --git a/src/gui/painting/qprinterinfo.qdoc b/src/gui/painting/qprinterinfo.qdoc
index 7374675..9193213 100644
--- a/src/gui/painting/qprinterinfo.qdoc
+++ b/src/gui/painting/qprinterinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp
index 3412f9b..cd997f4 100644
--- a/src/gui/painting/qregion.cpp
+++ b/src/gui/painting/qregion.cpp
@@ -391,6 +391,14 @@ void QRegion::exec(const QByteArray &buffer, int ver, QDataStream::ByteOrder byt
*/
/*!
+ \fn void QRegion::swap(QRegion &other)
+ \since 4.8
+
+ Swaps region \a other with this region. This operation is very
+ fast and never fails.
+*/
+
+/*!
\relates QRegion
Writes the region \a r to the stream \a s and returns a reference
@@ -1620,7 +1628,7 @@ QT_END_INCLUDE_NAMESPACE
QT_BEGIN_INCLUDE_NAMESPACE
# include "qregion_win.cpp"
QT_END_INCLUDE_NAMESPACE
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
static QRegionPrivate qrp;
QRegion::QRegionData QRegion::shared_empty = {Q_BASIC_ATOMIC_INITIALIZER(1), &qrp};
#endif
@@ -4231,7 +4239,7 @@ QRect QRegion::boundingRect() const
Returns true if \a rect is guaranteed to be fully contained in \a region.
A false return value does not guarantee the opposite.
*/
-#ifdef Q_WS_QWS
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
Q_GUI_EXPORT
#endif
bool qt_region_strictContains(const QRegion &region, const QRect &rect)
diff --git a/src/gui/painting/qregion.h b/src/gui/painting/qregion.h
index 2e42844..50052b3 100644
--- a/src/gui/painting/qregion.h
+++ b/src/gui/painting/qregion.h
@@ -59,7 +59,7 @@ QT_MODULE(Gui)
template <class T> class QVector;
class QVariant;
-#if defined(Q_WS_QWS) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN)
struct QRegionPrivate;
#endif
@@ -85,6 +85,7 @@ public:
inline QRegion &operator=(QRegion &&other)
{ qSwap(d, other.d); return *this; }
#endif
+ inline void swap(QRegion &other) { qSwap(d, other.d); }
#ifdef QT3_SUPPORT
inline QT3_SUPPORT bool isNull() const { return isEmpty(); }
#endif
@@ -166,7 +167,7 @@ public:
#endif
HIMutableShapeRef toHIMutableShape() const;
static QRegion fromHIShapeRef(HIShapeRef shape);
-#elif defined(Q_WS_QWS)
+#elif defined(Q_WS_QWS) || defined(Q_WS_QPA)
inline void *handle() const { return d->qt_rgn; }
#endif
#endif
@@ -204,9 +205,9 @@ private:
Region rgn;
void *xrectangles;
#elif defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)
- mutable RgnHandle unused; // Here for binary compatability reasons. ### Qt 5 remove.
+ mutable RgnHandle unused; // Here for binary compatibility reasons. ### Qt 5 remove.
#endif
-#if defined(Q_WS_QWS) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN)
QRegionPrivate *qt_rgn;
#endif
};
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 9219876..4a6c03f 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -143,6 +143,13 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
QHash<GlyphAndSubPixelPosition, Coord> listItemCoordinates;
int rowHeight = 0;
+ QFontEngine::GlyphFormat format;
+ switch (m_type) {
+ case Raster_A8: format = QFontEngine::Format_A8; break;
+ case Raster_RGBMask: format = QFontEngine::Format_A32; break;
+ default: format = QFontEngine::Format_Mono; break;
+ }
+
// check each glyph for its metrics and get the required rowHeight.
for (int i=0; i < numGlyphs; ++i) {
const glyph_t glyph = glyphs[i];
@@ -157,7 +164,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
continue;
if (listItemCoordinates.contains(GlyphAndSubPixelPosition(glyph, subPixelPosition)))
continue;
- glyph_metrics_t metrics = fontEngine->boundingBox(glyph, m_transform);
+ glyph_metrics_t metrics = fontEngine->alphaMapBoundingBox(glyph, m_transform, format);
#ifdef CACHE_DEBUG
printf("(%4x): w=%.2f, h=%.2f, xoff=%.2f, yoff=%.2f, x=%.2f, y=%.2f\n",
@@ -305,7 +312,7 @@ QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g, QFixed subPixelPosition
if (m_type == QFontEngineGlyphCache::Raster_RGBMask)
return m_current_fontengine->alphaRGBMapForGlyph(g, subPixelPosition, glyphMargin(), m_transform);
else
- return m_current_fontengine->alphaMapForGlyph(g, m_transform);
+ return m_current_fontengine->alphaMapForGlyph(g, subPixelPosition, m_transform);
return QImage();
}
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
new file mode 100644
index 0000000..b25757b
--- /dev/null
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
@@ -0,0 +1,257 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qunifiedtoolbarsurface_mac_p.h"
+#include <private/qt_cocoa_helpers_mac_p.h>
+#include <private/qbackingstore_p.h>
+#include <private/qmainwindowlayout_p.h>
+
+#include <QDebug>
+
+#ifdef QT_MAC_USE_COCOA
+
+QT_BEGIN_NAMESPACE
+
+QUnifiedToolbarSurface::QUnifiedToolbarSurface(QWidget *widget)
+ : QRasterWindowSurface(widget, false), d_ptr(new QUnifiedToolbarSurfacePrivate)
+{
+ d_ptr->image = 0;
+ d_ptr->inSetGeometry = false;
+ setStaticContentsSupport(true);
+
+ setGeometry(QRect(QPoint(0, 0), QSize(widget->width(), 100))); // FIXME: Fix height.
+}
+
+QUnifiedToolbarSurface::~QUnifiedToolbarSurface()
+{
+ if (d_ptr->image)
+ delete d_ptr->image;
+}
+
+QPaintDevice *QUnifiedToolbarSurface::paintDevice()
+{
+ return &d_ptr->image->image;
+}
+
+void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &offset)
+{
+ if (object != 0) {
+ if (object->isWidgetType()) {
+ QWidget *widget = qobject_cast<QWidget *>(object);
+
+ // We redirect the painting only if the widget is in the same window
+ // and is not a window in itself.
+ if (!(widget->windowType() & Qt::Window)) {
+ widget->d_func()->unifiedSurface = this;
+ widget->d_func()->isInUnifiedToolbar = true;
+ widget->d_func()->toolbar_offset = offset;
+ }
+ }
+
+ for (int i = 0; i < object->children().size(); ++i) {
+ recursiveRedirect(object->children().at(i), offset);
+ }
+ }
+}
+
+void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offset)
+{
+ setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME
+ recursiveRedirect(toolbar, offset);
+}
+
+void QUnifiedToolbarSurface::setGeometry(const QRect &rect)
+{
+ QWindowSurface::setGeometry(rect);
+ Q_D(QUnifiedToolbarSurface);
+ d->inSetGeometry = true;
+ if (d->image == 0 || d->image->width() < rect.width() || d->image->height() < rect.height())
+ prepareBuffer(QImage::Format_ARGB32_Premultiplied, window());
+ d->inSetGeometry = false;
+
+ // FIXME: set unified toolbar height.
+}
+
+void QUnifiedToolbarSurface::beginPaint(const QRegion &rgn)
+{
+ QPainter p(&d_ptr->image->image);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ const QVector<QRect> rects = rgn.rects();
+ const QColor blank = Qt::transparent;
+ for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
+ p.fillRect(*it, blank);
+ }
+}
+
+void QUnifiedToolbarSurface::updateToolbarOffset(QWidget *widget)
+{
+ QMainWindowLayout *mlayout = qobject_cast<QMainWindowLayout*> (widget->window()->layout());
+ mlayout->updateUnifiedToolbarOffset();
+}
+
+void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset)
+{
+ Q_D(QUnifiedToolbarSurface);
+
+ QRegion flushingRegion(widget->rect());
+
+ if (!d->image || rgn.rectCount() == 0) {
+ return;
+ }
+
+ Q_UNUSED(offset);
+
+ // Get a context for the widget.
+ CGContextRef context;
+ if (!(widget->d_func()->hasOwnContext)) {
+ widget->d_func()->ut_rg = rgn;
+ widget->d_func()->ut_pt = offset;
+ qt_mac_display(widget);
+ return;
+ } else {
+ // We render the content of the toolbar in the surface.
+ updateToolbarOffset(widget);
+ QRect beginPaintRect(widget->d_func()->toolbar_offset.x(), widget->d_func()->toolbar_offset.y(), widget->geometry().width(), widget->geometry().height());
+ QRegion beginPaintRegion(beginPaintRect);
+
+ context = widget->d_func()->cgContext;
+ beginPaint(beginPaintRegion);
+ widget->render(widget->d_func()->unifiedSurface->paintDevice(), widget->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren);
+ }
+
+ CGContextSaveGState(context);
+
+ int areaX = widget->d_func()->toolbar_offset.x();
+ int areaY = widget->d_func()->toolbar_offset.y();
+ int areaWidth = widget->geometry().width();
+ int areaHeight = widget->geometry().height();
+ const CGRect area = CGRectMake(areaX, areaY, areaWidth, areaHeight);
+
+ // Clip to region.
+ const QVector<QRect> &rects = flushingRegion.rects();
+ for (int i = 0; i < rects.size(); ++i) {
+ const QRect &rect = rects.at(i);
+ CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()));
+ }
+ CGContextAddRect(context, area);
+ CGContextClip(context);
+
+
+ CGImageRef image = CGBitmapContextCreateImage(d->image->cg);
+ CGImageRef subImage = CGImageCreateWithImageInRect(image, area);
+
+ const CGRect drawingArea = CGRectMake(0, 0, areaWidth, areaHeight);
+ qt_mac_drawCGImage(context, &drawingArea, subImage);
+
+ CGImageRelease(subImage);
+ CGImageRelease(image);
+
+ CGContextFlush(context);
+
+ // Restore context.
+ CGContextRestoreGState(context);
+ widget->d_func()->hasOwnContext = false;
+}
+
+void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widget)
+{
+ Q_D(QUnifiedToolbarSurface);
+
+ int width = geometry().width();
+ int height = geometry().height();
+ if (d->image) {
+ width = qMax(d->image->width(), width);
+ height = qMax(d->image->height(), height);
+ }
+
+ if (width == 0 || height == 0) {
+ delete d->image;
+ d->image = 0;
+ return;
+ }
+
+ QNativeImage *oldImage = d->image;
+
+ d->image = new QNativeImage(width, height, format, false, widget);
+
+ if (oldImage && d->inSetGeometry && hasStaticContents()) {
+ // Make sure we use the const version of bits() (no detach).
+ const uchar *src = const_cast<const QImage &>(oldImage->image).bits();
+ uchar *dst = d->image->image.bits();
+
+ const int srcBytesPerLine = oldImage->image.bytesPerLine();
+ const int dstBytesPerLine = d->image->image.bytesPerLine();
+ const int bytesPerPixel = oldImage->image.depth() >> 3;
+
+ QRegion staticRegion(staticContents());
+ // Make sure we're inside the boundaries of the old image.
+ staticRegion &= QRect(0, 0, oldImage->image.width(), oldImage->image.height());
+ const QVector<QRect> &rects = staticRegion.rects();
+ const QRect *srcRect = rects.constData();
+
+ // Copy the static content of the old image into the new one.
+ int numRectsLeft = rects.size();
+ do {
+ const int bytesOffset = srcRect->x() * bytesPerPixel;
+ const int dy = srcRect->y();
+
+ // Adjust src and dst to point to the right offset.
+ const uchar *s = src + dy * srcBytesPerLine + bytesOffset;
+ uchar *d = dst + dy * dstBytesPerLine + bytesOffset;
+ const int numBytes = srcRect->width() * bytesPerPixel;
+
+ int numScanLinesLeft = srcRect->height();
+ do {
+ ::memcpy(d, s, numBytes);
+ d += dstBytesPerLine;
+ s += srcBytesPerLine;
+ } while (--numScanLinesLeft);
+
+ ++srcRect;
+ } while (--numRectsLeft);
+ }
+
+ delete oldImage;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_MAC_USE_COCOA
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
new file mode 100644
index 0000000..3bc0404
--- /dev/null
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QUNIFIEDTOOLBARSURFACE_MAC_P_H
+#define QUNIFIEDTOOLBARSURFACE_MAC_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <private/qwindowsurface_raster_p.h>
+#include <QWidget>
+#include <private/qwidget_p.h>
+#include <private/qnativeimage_p.h>
+
+#ifdef QT_MAC_USE_COCOA
+
+QT_BEGIN_NAMESPACE
+
+class QNativeImage;
+
+
+class QUnifiedToolbarSurfacePrivate
+{
+public:
+ QNativeImage *image;
+ uint inSetGeometry : 1;
+};
+
+class Q_GUI_EXPORT QUnifiedToolbarSurface : public QRasterWindowSurface
+{
+public:
+ QUnifiedToolbarSurface(QWidget *widget);
+ ~QUnifiedToolbarSurface();
+
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void setGeometry(const QRect &rect);
+ void beginPaint(const QRegion &rgn);
+ void insertToolbar(QWidget *toolbar, const QPoint &offset);
+
+private:
+ QPaintDevice *paintDevice();
+ void updateToolbarOffset(QWidget *widget);
+ void prepareBuffer(QImage::Format format, QWidget *widget);
+ void recursiveRedirect(QObject *widget, const QPoint &offset);
+
+ Q_DECLARE_PRIVATE(QUnifiedToolbarSurface)
+ QScopedPointer<QUnifiedToolbarSurfacePrivate> d_ptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_MAC_USE_COCOA
+
+#endif // QUNIFIEDTOOLBARSURFACE_MAC_P_H
diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp
index 02a8b80..e9eb9c5 100644
--- a/src/gui/painting/qwindowsurface.cpp
+++ b/src/gui/painting/qwindowsurface.cpp
@@ -58,7 +58,11 @@ public:
}
QWidget *window;
+#if !defined(Q_WS_QPA)
QRect geometry;
+#else
+ QSize size;
+#endif //Q_WS_QPA
QRegion staticContents;
QList<QImage*> bufferImages;
uint staticContentsSupport : 1;
@@ -114,11 +118,11 @@ public:
/*!
Constructs an empty surface for the given top-level \a window.
*/
-QWindowSurface::QWindowSurface(QWidget *window)
+QWindowSurface::QWindowSurface(QWidget *window, bool setDefaultSurface)
: d_ptr(new QWindowSurfacePrivate(window))
{
if (!QApplicationPrivate::runtime_graphics_system) {
- if(window)
+ if(setDefaultSurface && window)
window->setWindowSurface(this);
}
}
@@ -153,6 +157,7 @@ void QWindowSurface::endPaint(const QRegion &)
d_ptr->bufferImages.clear();
}
+#if !defined(Q_WS_QPA)
/*!
Sets the currently allocated area to be the given \a rect.
@@ -173,6 +178,17 @@ QRect QWindowSurface::geometry() const
{
return d_ptr->geometry;
}
+#else
+void QWindowSurface::resize(const QSize &size)
+{
+ d_ptr->size = size;
+}
+
+QSize QWindowSurface::size() const
+{
+ return d_ptr->size;
+}
+#endif //Q_WS_QPA
/*!
Scrolls the given \a area \a dx pixels to the right and \a dy
@@ -329,7 +345,13 @@ void QWindowSurface::setPartialUpdateSupport(bool enable)
d_ptr->partialUpdateSupport = enable;
}
-void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset)
+#ifdef Q_WS_QPA
+#define Q_EXPORT_SCROLLRECT Q_GUI_EXPORT
+#else
+#define Q_EXPORT_SCROLLRECT
+#endif
+
+void Q_EXPORT_SCROLLRECT qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset)
{
// make sure we don't detach
uchar *mem = const_cast<uchar*>(const_cast<const QImage &>(img).bits());
diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h
index 6171ae8..82100c3 100644
--- a/src/gui/painting/qwindowsurface_p.h
+++ b/src/gui/painting/qwindowsurface_p.h
@@ -63,11 +63,12 @@ class QRect;
class QPoint;
class QImage;
class QWindowSurfacePrivate;
+class QPlatformWindow;
class Q_GUI_EXPORT QWindowSurface
{
public:
- QWindowSurface(QWidget *window);
+ QWindowSurface(QWidget *window, bool setDefaultSurface = true);
virtual ~QWindowSurface();
QWidget *window() const;
@@ -79,8 +80,14 @@ public:
// can be larger than just the offset from the top-level widget as there may also be window
// decorations which are painted into the window surface.
virtual void flush(QWidget *widget, const QRegion &region, const QPoint &offset) = 0;
+#if !defined(Q_WS_QPA)
virtual void setGeometry(const QRect &rect);
QRect geometry() const;
+#else
+ virtual void resize(const QSize &size);
+ QSize size() const;
+ inline QRect geometry() const { return QRect(QPoint(), size()); } //### cleanup before Qt 5
+#endif
virtual bool scroll(const QRegion &area, int dx, int dy);
diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp
index 6a2cb1e..ae73d7d 100644
--- a/src/gui/painting/qwindowsurface_raster.cpp
+++ b/src/gui/painting/qwindowsurface_raster.cpp
@@ -64,6 +64,9 @@
#ifdef Q_WS_MAC
#include <private/qt_cocoa_helpers_mac_p.h>
+#include <QMainWindow>
+#include <private/qmainwindowlayout_p.h>
+#include <QToolBar>
#endif
QT_BEGIN_NAMESPACE
@@ -82,8 +85,8 @@ public:
uint inSetGeometry : 1;
};
-QRasterWindowSurface::QRasterWindowSurface(QWidget *window)
- : QWindowSurface(window), d_ptr(new QRasterWindowSurfacePrivate)
+QRasterWindowSurface::QRasterWindowSurface(QWidget *window, bool setDefaultSurface)
+ : QWindowSurface(window, setDefaultSurface), d_ptr(new QRasterWindowSurfacePrivate)
{
#ifdef Q_WS_X11
d_ptr->gc = XCreateGC(X11->display, window->handle(), 0, 0);
@@ -248,6 +251,30 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi
#ifdef Q_WS_MAC
+ // This is mainly done for native components like native "open file" dialog.
+ if (widget->testAttribute(Qt::WA_DontShowOnScreen)) {
+ return;
+ }
+
+#ifdef QT_MAC_USE_COCOA
+ // Unified toolbar hack.
+ QMainWindow* mWindow = qobject_cast<QMainWindow*>(widget->window());
+ if (mWindow) {
+ QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout());
+ QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList;
+
+ for (int i = 0; i < toolbarList.size(); ++i) {
+ QToolBar* toolbar = toolbarList.at(i);
+ if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) {
+ QWidget* tbWidget = (QWidget*) toolbar;
+ if (tbWidget->d_func()->unifiedSurface) {
+ tbWidget->d_func()->unifiedSurface->flush(tbWidget, rgn, offset);
+ }
+ }
+ }
+ }
+#endif // QT_MAC_USE_COCOA
+
Q_UNUSED(offset);
// Get a context for the widget.
#ifndef QT_MAC_USE_COCOA
@@ -318,6 +345,25 @@ void QRasterWindowSurface::setGeometry(const QRect &rect)
prepareBuffer(QNativeImage::systemFormat(), window());
}
d->inSetGeometry = false;
+
+#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
+ QMainWindow* mWindow = qobject_cast<QMainWindow*>(window());
+ if (mWindow) {
+ QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout());
+ QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList;
+
+ for (int i = 0; i < toolbarList.size(); ++i) {
+ QToolBar* toolbar = toolbarList.at(i);
+ if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) {
+ QWidget* tbWidget = (QWidget*) toolbar;
+ if (tbWidget->d_func()->unifiedSurface) {
+ tbWidget->d_func()->unifiedSurface->setGeometry(rect);
+ }
+ }
+ }
+ }
+#endif // Q_WS_MAC && QT_MAC_USE_COCOA
+
}
// from qwindowsurface.cpp
diff --git a/src/gui/painting/qwindowsurface_raster_p.h b/src/gui/painting/qwindowsurface_raster_p.h
index 2b932a9..a7c3b9f 100644
--- a/src/gui/painting/qwindowsurface_raster_p.h
+++ b/src/gui/painting/qwindowsurface_raster_p.h
@@ -97,7 +97,7 @@ class QNativeImage;
class Q_GUI_EXPORT QRasterWindowSurface : public QWindowSurface
{
public:
- QRasterWindowSurface(QWidget *widget);
+ QRasterWindowSurface(QWidget *widget, bool setDefaultSurface = true);
~QRasterWindowSurface();
QPaintDevice *paintDevice();
diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp
index d4dcf7d..eb9eff2 100644
--- a/src/gui/painting/qwindowsurface_s60.cpp
+++ b/src/gui/painting/qwindowsurface_s60.cpp
@@ -102,9 +102,11 @@ QS60WindowSurface::~QS60WindowSurface()
// Issue empty redraw to clear the UI surface
QWidget *w = window();
- RWindow *const window = static_cast<RWindow *>(w->winId()->DrawableWindow());
- window->BeginRedraw();
- window->EndRedraw();
+ if (w->testAttribute(Qt::WA_WState_Created)) {
+ RWindow *const window = static_cast<RWindow *>(w->winId()->DrawableWindow());
+ window->BeginRedraw();
+ window->EndRedraw();
+ }
}
}
#endif
diff --git a/src/gui/painting/qwindowsurface_x11.cpp b/src/gui/painting/qwindowsurface_x11.cpp
index cadf264..d7f54ea 100644
--- a/src/gui/painting/qwindowsurface_x11.cpp
+++ b/src/gui/painting/qwindowsurface_x11.cpp
@@ -149,6 +149,8 @@ void QX11WindowSurface::setGeometry(const QRect &rect)
return;
#ifndef QT_NO_XRENDER
if (d_ptr->translucentBackground) {
+ QPixmap::x11SetDefaultScreen(d_ptr->widget->x11Info().screen());
+
QX11PixmapData *data = new QX11PixmapData(QPixmapData::PixmapType);
data->xinfo = d_ptr->widget->x11Info();
data->resize(size.width(), size.height());
diff --git a/src/gui/s60framework/qs60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp
index 74432af..24d2496 100644
--- a/src/gui/s60framework/qs60mainapplication.cpp
+++ b/src/gui/s60framework/qs60mainapplication.cpp
@@ -47,6 +47,9 @@
#include "qs60mainapplication.h"
#include <bautils.h>
#include <coemain.h>
+#ifndef Q_WS_S60
+# include <eikserverapp.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -152,7 +155,11 @@ CDictionaryStore *QS60MainApplication::OpenIniFileLC(RFs &aFs) const
*/
void QS60MainApplication::NewAppServerL(CApaAppServer *&aAppServer)
{
+#ifdef Q_WS_S60
QS60MainApplicationBase::NewAppServerL(aAppServer);
+#else
+ aAppServer = new(ELeave) CEikAppServer;
+#endif
}
QT_END_NAMESPACE
diff --git a/src/gui/styles/qmacstyle.qdoc b/src/gui/styles/qmacstyle.qdoc
index a86f2ed..3efabe1 100644
--- a/src/gui/styles/qmacstyle.qdoc
+++ b/src/gui/styles/qmacstyle.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 3a05f40..a05ec6b 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -1948,10 +1948,9 @@ void QMacStyle::unpolish(QWidget* w)
rubber->setAttribute(Qt::WA_NoSystemBackground, true);
}
- if (QFocusFrame *frame = qobject_cast<QFocusFrame *>(w)) {
+ if (QFocusFrame *frame = qobject_cast<QFocusFrame *>(w))
frame->setAttribute(Qt::WA_NoSystemBackground, true);
- frame->setAutoFillBackground(true);
- }
+
QWindowsStyle::unpolish(w);
}
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 89f54bc..087907f 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -405,13 +405,14 @@ void QS60StylePrivate::clearCaches(CacheClearReason reason)
QPixmapCache::clear();
break;
case CC_ThemeChange:
- m_colorCache.clear();
QPixmapCache::clear();
+#ifdef Q_WS_S60
+ deleteStoredSettings();
+#endif
deleteBackground();
break;
case CC_UndefinedChange:
default:
- m_colorCache.clear();
m_mappedFontsCache.clear();
QPixmapCache::clear();
deleteBackground();
@@ -419,64 +420,53 @@ void QS60StylePrivate::clearCaches(CacheClearReason reason)
}
}
-// Since S60Style has 'button' and 'tooltip' as a graphic, we don't have any native color which to use
-// for QPalette::Button and QPalette::ToolTipBase. Therefore S60Style needs to guesstimate
-// palette colors by calculating average rgb values for button pixels.
-// Returns Qt::black if there is an issue with the graphics (image is NULL, or no bits() found).
-QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const
+QColor QS60StylePrivate::calculatedColor(SkinFrameElements frame) const
{
- const bool cachedColorExists = m_colorCache.contains(frame);
- if (!cachedColorExists) {
- const int frameCornerWidth = pixelMetric(PM_FrameCornerWidth);
- const int frameCornerHeight = pixelMetric(PM_FrameCornerHeight);
- Q_ASSERT(2 * frameCornerWidth < 32);
- Q_ASSERT(2 * frameCornerHeight < 32);
-
- const QImage frameImage = QS60StylePrivate::frame(frame, QSize(32, 32)).toImage();
- Q_ASSERT(frameImage.bytesPerLine() > 0);
- if (frameImage.isNull())
- return Qt::black;
-
- const QRgb *pixelRgb = (const QRgb*)frameImage.bits();
- const int pixels = frameImage.byteCount()/sizeof(QRgb);
-
- int estimatedRed = 0;
- int estimatedGreen = 0;
- int estimatedBlue = 0;
-
- int skips = 0;
- int estimations = 0;
-
- const int topBorderLastPixel = frameCornerHeight*frameImage.width() - 1;
- const int bottomBorderFirstPixel = frameImage.width() * frameImage.height() - frameCornerHeight*frameImage.width() - 1;
- const int rightBorderFirstPixel = frameImage.width() - frameCornerWidth;
- const int leftBorderLastPixel = frameCornerWidth;
-
- while ((skips + estimations) < pixels) {
- if ((skips + estimations) > topBorderLastPixel &&
- (skips + estimations) < bottomBorderFirstPixel) {
- for (int rowIndex = 0; rowIndex < frameImage.width(); rowIndex++) {
- if (rowIndex > leftBorderLastPixel &&
- rowIndex < rightBorderFirstPixel) {
- estimatedRed += qRed(*pixelRgb);
- estimatedGreen += qGreen(*pixelRgb);
- estimatedBlue += qBlue(*pixelRgb);
- }
- pixelRgb++;
- estimations++;
+ const int frameCornerWidth = pixelMetric(PM_FrameCornerWidth);
+ const int frameCornerHeight = pixelMetric(PM_FrameCornerHeight);
+ Q_ASSERT(2 * frameCornerWidth < 32);
+ Q_ASSERT(2 * frameCornerHeight < 32);
+
+ const QImage frameImage = QS60StylePrivate::frame(frame, QSize(32, 32)).toImage();
+ Q_ASSERT(frameImage.bytesPerLine() > 0);
+ if (frameImage.isNull())
+ return Qt::black;
+
+ const QRgb *pixelRgb = (const QRgb*)frameImage.constBits();
+ const int pixels = frameImage.byteCount() / sizeof(QRgb);
+
+ int estimatedRed = 0;
+ int estimatedGreen = 0;
+ int estimatedBlue = 0;
+
+ int skips = 0;
+ int estimations = 0;
+
+ const int topBorderLastPixel = frameCornerHeight * frameImage.width() - 1;
+ const int bottomBorderFirstPixel = frameImage.width() * frameImage.height() - topBorderLastPixel;
+ const int rightBorderFirstPixel = frameImage.width() - frameCornerWidth;
+ const int leftBorderLastPixel = frameCornerWidth;
+
+ while ((skips + estimations) < pixels) {
+ if ((skips + estimations) > topBorderLastPixel &&
+ (skips + estimations) < bottomBorderFirstPixel) {
+ for (int rowIndex = 0; rowIndex < frameImage.width(); rowIndex++) {
+ if (rowIndex > leftBorderLastPixel &&
+ rowIndex < rightBorderFirstPixel) {
+ estimatedRed += qRed(*pixelRgb);
+ estimatedGreen += qGreen(*pixelRgb);
+ estimatedBlue += qBlue(*pixelRgb);
}
- } else {
pixelRgb++;
- skips++;
+ estimations++;
}
+ } else {
+ pixelRgb++;
+ skips++;
}
- QColor frameColor(estimatedRed/estimations, estimatedGreen/estimations, estimatedBlue/estimations);
- m_colorCache.insert(frame, frameColor);
- return !estimations ? Qt::black : frameColor;
- } else {
- return m_colorCache.value(frame);
}
-
+ QColor frameColor(estimatedRed/estimations, estimatedGreen/estimations, estimatedBlue/estimations);
+ return !estimations ? Qt::black : frameColor;
}
void QS60StylePrivate::setThemePalette(QApplication *app) const
@@ -731,11 +721,14 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const
palette->setBrush(QPalette::Window, backgroundTexture());
// set as transparent so that styled full screen theme background is visible
palette->setBrush(QPalette::Base, Qt::transparent);
- // set button and tooltipbase based on pixel colors
+ // set button color based on pixel colors
+#ifndef Q_WS_S60
+ //For emulated style, just calculate the color every time
+ const QColor buttonColor = calculatedColor(SF_ButtonNormal);
+#else
const QColor buttonColor = colorFromFrameGraphics(SF_ButtonNormal);
+#endif
palette->setColor(QPalette::Button, buttonColor);
- const QColor toolTipColor = colorFromFrameGraphics(SF_ToolTip);
- palette->setColor(QPalette::ToolTipBase, toolTipColor);
palette->setColor(QPalette::Light, palette->color(QPalette::Button).lighter());
palette->setColor(QPalette::Dark, palette->color(QPalette::Button).darker());
palette->setColor(QPalette::Midlight, palette->color(QPalette::Button).lighter(125));
@@ -837,11 +830,8 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const
s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
QApplication::setPalette(widgetPalette, "QLineEdit");
QApplication::setPalette(widgetPalette, "QTextEdit");
- widgetPalette = *palette;
-
- widgetPalette.setColor(QPalette::HighlightedText,
- s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
QApplication::setPalette(widgetPalette, "QComboBox");
+ QApplication::setPalette(widgetPalette, "QSpinBox");
widgetPalette = *palette;
widgetPalette.setColor(QPalette::WindowText, s60Color(QS60StyleEnums::CL_QsnTextColors, 7, 0));
@@ -2524,9 +2514,9 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
metricValue = QS60StylePrivate::pixelMetric(PM_LayoutLeftMargin);
}
- if (widget && (metric == PM_LayoutTopMargin))
+ if (widget && (metric == PM_LayoutTopMargin || metric == PM_LayoutLeftMargin || metric == PM_LayoutRightMargin))
if (widget->windowType() == Qt::Dialog)
- //double the top layout margin for dialogs, it is very close to real value
+ //double the layout margins (except bottom) for dialogs, it is very close to real value
//without having to define custom pixel metric
metricValue *= 2;
@@ -2620,6 +2610,8 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
break;
}
+ if (!sz.isValid())
+ sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget);
return sz;
}
@@ -3425,8 +3417,11 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event)
qobject_cast<QCheckBox *>(w))
d->m_pressedWidget = w;
- if ( d->m_pressedWidget)
+ if (d->m_pressedWidget)
d->m_pressedWidget->update();
+#ifdef Q_WS_S60
+ d->touchFeedback(event, w);
+#endif
}
break;
}
diff --git a/src/gui/styles/qs60style_feedbackinterface_p.h b/src/gui/styles/qs60style_feedbackinterface_p.h
new file mode 100644
index 0000000..81fcdc3
--- /dev/null
+++ b/src/gui/styles/qs60style_feedbackinterface_p.h
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QObject>
+
+class TactileFeedbackInterface : public QObject
+{
+ public:
+ virtual void touchFeedback(QEvent *event, const QWidget *widget) = 0;
+};
+
+Q_DECLARE_INTERFACE(TactileFeedbackInterface, "com.trolltech.Qt.TactileFeedbackInterface/1.0")
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index b3f4160..db4285d 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -387,6 +387,7 @@ private: //data members
class QFocusFrame;
class QProgressBar;
class QS60StyleAnimation;
+class TactileFeedbackInterface;
// Private class
#ifdef Q_OS_SYMBIAN
@@ -522,8 +523,12 @@ public:
static bool isSingleClickUi();
static bool isWidgetPressed(const QWidget *widget);
- // calculates average color based on button skin graphics (minus borders).
+#ifdef Q_WS_S60
+ static void deleteStoredSettings();
+ // calculates average color based on theme graphics (minus borders).
QColor colorFromFrameGraphics(SkinFrameElements frame) const;
+#endif
+ QColor calculatedColor(SkinFrameElements frame) const;
//set theme palette for application
void setThemePalette(QApplication *application) const;
@@ -541,7 +546,6 @@ public:
static const int m_numberOfLayouts;
mutable QHash<QPair<QS60StyleEnums::FontCategories , int>, QFont> m_mappedFontsCache;
- mutable QHash<SkinFrameElements, QColor> m_colorCache;
// Has one entry per SkinFrameElements
static const struct frameElementCenter {
@@ -572,6 +576,8 @@ public:
void stopAnimation(QS60StyleEnums::SkinParts animation);
static QS60StyleAnimation* animationDefinition(QS60StyleEnums::SkinParts part);
static void removeAnimations();
+ //No support for tactile feedback in emulated style
+ void touchFeedback(QEvent *event, const QWidget *widget);
#endif
@@ -626,6 +632,7 @@ private:
#ifdef Q_WS_S60
//list of progress bars having animation running
QList<QProgressBar *> m_bars;
+ TactileFeedbackInterface *m_feedbackPlugin;
#endif
};
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 5dda42e..7b75d40 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -48,6 +48,11 @@
#include "private/qpixmap_s60_p.h"
#include "private/qcore_symbian_p.h"
#include "qapplication.h"
+#include "qsettings.h"
+
+#include "qpluginloader.h"
+#include "qlibraryinfo.h"
+#include "private/qs60style_feedbackinterface_p.h"
#include <w32std.h>
#include <AknsConstants.h>
@@ -65,6 +70,8 @@
#include <gulicon.h>
#include <AknBitmapAnimation.h>
+#include <centralrepository.h>
+
#if !defined(QT_NO_STYLE_S60) || defined(QT_PLUGIN)
QT_BEGIN_NAMESPACE
@@ -77,6 +84,8 @@ enum TDrawType {
ENoDraw
};
+const TUid personalisationUID = { 0x101F876F };
+
enum TSupportRelease {
ES60_None = 0x0000, //indicates that the commonstyle should draw the graphics
ES60_3_1 = 0x0001,
@@ -685,6 +694,76 @@ bool QS60StylePrivate::isSingleClickUi()
return (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0);
}
+void QS60StylePrivate::deleteStoredSettings()
+{
+ QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ settings.beginGroup(QLatin1String("QS60Style"));
+ settings.remove("");
+ settings.endGroup();
+}
+
+// Since S60Style has 'button' as a graphic, we don't have any native color which to use
+// for QPalette::Button. Therefore S60Style needs to guesstimate palette color by calculating
+// average rgb values for button pixels.
+// Returns Qt::black if there is an issue with the graphics (image is NULL, or no constBits() found).
+QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const
+{
+#ifndef QT_NO_SETTINGS
+ TInt themeID = 0;
+ //First we need to fetch active theme ID. We need to store the themeID at the same time
+ //as color, so that we can later check if the stored color is still from the same theme.
+ //Native side stores active theme UID/Timestamp into central repository.
+ int error = 0;
+ QT_TRAP_THROWING(
+ CRepository *themeRepository = CRepository::NewLC(personalisationUID);
+ if (themeRepository) {
+ static const TInt KThemePkgIDDesSize = 23; //size of the stored theme package ID
+ TBuf<32> value; //themeID is currently max of 8 + 1 + 8 characters, but lets have some extra space
+ const TUint32 key = 0x00000002; //active theme key in the repository
+ error = themeRepository->Get(key, value);
+ if (error == KErrNone) {
+ TLex lex(value);
+ TPtrC numberToken(lex.NextToken());
+ if (numberToken.Length())
+ error = TLex(numberToken).Val(themeID);
+ else
+ error = KErrArgument;
+ }
+ }
+ CleanupStack::PopAndDestroy(themeRepository);
+ );
+
+ QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ settings.beginGroup(QLatin1String("QS60Style"));
+ if (themeID != 0) {
+ QVariant buttonColor = settings.value(QLatin1String("ButtonColor"));
+ if (!buttonColor.isNull()) {
+ //there is a stored color value, lets see if the theme ID matches
+ if (error == KErrNone) {
+ QVariant themeUID = settings.value(QLatin1String("ThemeUID"));
+ if (!themeUID.isNull() && themeUID.toInt() == themeID) {
+ QColor storedColor(buttonColor.value<QColor>());
+ if (storedColor.isValid())
+ return storedColor;
+ }
+ }
+ settings.remove(""); //if color was invalid, or theme has been changed, just delete all stored settings
+ }
+ }
+#endif
+
+ QColor color = calculatedColor(frame);
+
+#ifndef QT_NO_SETTINGS
+ settings.setValue(QLatin1String("ThemeUID"), QVariant(themeID));
+ if (frame == SF_ButtonNormal) //other colors are not currently calculated from graphics
+ settings.setValue(QLatin1String("ButtonColor"), QVariant(color));
+ settings.endGroup();
+#endif
+
+ return color;
+}
+
QPoint qt_s60_fill_background_offset(const QWidget *targetWidget)
{
CCoeControl *control = targetWidget->effectiveWinId();
@@ -1143,13 +1222,25 @@ void QS60StylePrivate::setActiveLayout()
Q_GLOBAL_STATIC(QList<QS60StyleAnimation *>, m_animations)
-QS60StylePrivate::QS60StylePrivate()
+QS60StylePrivate::QS60StylePrivate() : m_feedbackPlugin(0)
{
//Animation defaults need to be created when style is instantiated
QS60StyleAnimation* progressBarAnimation = new QS60StyleAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim, 7, 100);
m_animations()->append(progressBarAnimation);
// No need to set active layout, if dynamic metrics API is available
setActiveLayout();
+
+ //Tactile feedback plugin is only available for touch devices.
+ if (isTouchSupported()) {
+ QString pluginsPath = QLibraryInfo::location(QLibraryInfo::PluginsPath);
+ pluginsPath += QLatin1String("/feedback/qtactilefeedback.dll");
+
+ // Create plugin loader
+ QPluginLoader pluginLoader(pluginsPath);
+ // Load plugin and store pointer to the plugin implementation
+ if (pluginLoader.load())
+ m_feedbackPlugin = qobject_cast<TactileFeedbackInterface*>(pluginLoader.instance());
+ }
}
void QS60StylePrivate::removeAnimations()
@@ -1439,6 +1530,12 @@ void QS60StylePrivate::stopAnimation(QS60StyleEnums::SkinParts animationPart)
}
}
+void QS60StylePrivate::touchFeedback(QEvent *event, const QWidget *widget)
+{
+ if (m_feedbackPlugin)
+ m_feedbackPlugin->touchFeedback(event, widget);
+}
+
QVariant QS60StyleModeSpecifics::themeDefinition(
QS60StyleEnums::ThemeDefinitions definition, QS60StyleEnums::SkinParts part)
{
diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp
index 0a75492..3ebfab2 100644
--- a/src/gui/styles/qstyle.cpp
+++ b/src/gui/styles/qstyle.cpp
@@ -367,10 +367,10 @@ QStyle::~QStyle()
Note that the default implementation does nothing. Reasonable
actions in this function might be to call the
QWidget::setBackgroundMode() function for the widget. Do not use
- the function to set, for example, the geometry; reimplementing
- this function do provide a back-door through which the appearance
- of a widget can be changed, but with Qt 4.0's style engine there
- is rarely necessary to implement this function; reimplement the
+ the function to set, for example, the geometry. Reimplementing
+ this function provides a back-door through which the appearance
+ of a widget can be changed, but with Qt's style engine it is
+ rarely necessary to implement this function; reimplement
drawItemPixmap(), drawItemText(), drawPrimitive(), etc. instead.
The QWidget::inherits() function may provide enough information to
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index 4be439d..fb6fc23 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -99,14 +99,7 @@ public:
};
-static QHash<const QWidget *, QVector<StyleRule> > *styleRulesCache = 0;
-static QHash<const QWidget *, QHash<int, bool> > *hasStyleRuleCache = 0;
-typedef QHash<int, QHash<quint64, QRenderRule> > QRenderRules;
-static QHash<const QWidget *, QRenderRules> *renderRulesCache = 0;
-static QHash<const QWidget *, QPalette> *customPaletteWidgets = 0; // widgets whose palette we tampered
-static QHash<const void *, StyleSheet> *styleSheetCache = 0; // parsed style sheets
-static QSet<const QWidget *> *autoFillDisabledWidgets = 0;
-
+static QStyleSheetStyleCaches *styleSheetCaches = 0;
/* RECURSION_GUARD:
* the QStyleSheetStyle is a proxy. If used with others proxy style, we may end up with something like:
@@ -1525,8 +1518,8 @@ private:
QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
{
- QHash<const QWidget *, QVector<StyleRule> >::const_iterator cacheIt = styleRulesCache->constFind(w);
- if (cacheIt != styleRulesCache->constEnd())
+ QHash<const QWidget *, QVector<StyleRule> >::const_iterator cacheIt = styleSheetCaches->styleRulesCache.constFind(w);
+ if (cacheIt != styleSheetCaches->styleRulesCache.constEnd())
return cacheIt.value();
if (!initWidget(w)) {
@@ -1536,12 +1529,12 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
QStyleSheetStyleSelector styleSelector;
StyleSheet defaultSs;
- QHash<const void *, StyleSheet>::const_iterator defaultCacheIt = styleSheetCache->constFind(baseStyle());
- if (defaultCacheIt == styleSheetCache->constEnd()) {
+ QHash<const void *, StyleSheet>::const_iterator defaultCacheIt = styleSheetCaches->styleSheetCache.constFind(baseStyle());
+ if (defaultCacheIt == styleSheetCaches->styleSheetCache.constEnd()) {
defaultSs = getDefaultStyleSheet();
QStyle *bs = baseStyle();
- styleSheetCache->insert(bs, defaultSs);
- QObject::connect(bs, SIGNAL(destroyed(QObject*)), this, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection);
+ styleSheetCaches->styleSheetCache.insert(bs, defaultSs);
+ QObject::connect(bs, SIGNAL(destroyed(QObject*)), styleSheetCaches, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection);
} else {
defaultSs = defaultCacheIt.value();
}
@@ -1549,8 +1542,8 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
if (!qApp->styleSheet().isEmpty()) {
StyleSheet appSs;
- QHash<const void *, StyleSheet>::const_iterator appCacheIt = styleSheetCache->constFind(qApp);
- if (appCacheIt == styleSheetCache->constEnd()) {
+ QHash<const void *, StyleSheet>::const_iterator appCacheIt = styleSheetCaches->styleSheetCache.constFind(qApp);
+ if (appCacheIt == styleSheetCaches->styleSheetCache.constEnd()) {
QString ss = qApp->styleSheet();
if (ss.startsWith(QLatin1String("file:///")))
ss.remove(0, 8);
@@ -1559,7 +1552,7 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
qWarning("Could not parse application stylesheet");
appSs.origin = StyleSheetOrigin_Inline;
appSs.depth = 1;
- styleSheetCache->insert(qApp, appSs);
+ styleSheetCaches->styleSheetCache.insert(qApp, appSs);
} else {
appSs = appCacheIt.value();
}
@@ -1571,8 +1564,8 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
if (wid->styleSheet().isEmpty())
continue;
StyleSheet ss;
- QHash<const void *, StyleSheet>::const_iterator widCacheIt = styleSheetCache->constFind(wid);
- if (widCacheIt == styleSheetCache->constEnd()) {
+ QHash<const void *, StyleSheet>::const_iterator widCacheIt = styleSheetCaches->styleSheetCache.constFind(wid);
+ if (widCacheIt == styleSheetCaches->styleSheetCache.constEnd()) {
parser.init(wid->styleSheet());
if (!parser.parse(&ss)) {
parser.init(QLatin1String("* {") + wid->styleSheet() + QLatin1Char('}'));
@@ -1580,7 +1573,7 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
qWarning("Could not parse stylesheet of widget %p", wid);
}
ss.origin = StyleSheetOrigin_Inline;
- styleSheetCache->insert(wid, ss);
+ styleSheetCaches->styleSheetCache.insert(wid, ss);
} else {
ss = widCacheIt.value();
}
@@ -1595,7 +1588,7 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
StyleSelector::NodePtr n;
n.ptr = (void *)w;
QVector<QCss::StyleRule> rules = styleSelector.styleRulesForNode(n);
- styleRulesCache->insert(w, rules);
+ styleSheetCaches->styleRulesCache.insert(w, rules);
return rules;
}
@@ -1724,7 +1717,7 @@ static void qt_check_if_internal_widget(const QWidget **w, int *element)
QRenderRule QStyleSheetStyle::renderRule(const QWidget *w, int element, quint64 state) const
{
qt_check_if_internal_widget(&w, &element);
- QHash<quint64, QRenderRule> &cache = (*renderRulesCache)[w][element];
+ QHash<quint64, QRenderRule> &cache = styleSheetCaches->renderRulesCache[w][element];
QHash<quint64, QRenderRule>::const_iterator cacheIt = cache.constFind(state);
if (cacheIt != cache.constEnd())
return cacheIt.value();
@@ -2035,7 +2028,7 @@ QRenderRule QStyleSheetStyle::renderRule(const QWidget *w, const QStyleOption *o
bool QStyleSheetStyle::hasStyleRule(const QWidget *w, int part) const
{
- QHash<int, bool> &cache = (*hasStyleRuleCache)[w];
+ QHash<int, bool> &cache = styleSheetCaches->hasStyleRuleCache[w];
QHash<int, bool>::const_iterator cacheIt = cache.constFind(part);
if (cacheIt != cache.constEnd())
return cacheIt.value();
@@ -2565,7 +2558,7 @@ void QStyleSheetStyle::setPalette(QWidget *w)
rule.configurePalette(&p, map[i].group, ew, ew != w);
}
- customPaletteWidgets->insert(w, w->palette());
+ styleSheetCaches->customPaletteWidgets.insert(w, w->palette());
w->setPalette(p);
if (ew != w)
ew->setPalette(p);
@@ -2573,32 +2566,32 @@ void QStyleSheetStyle::setPalette(QWidget *w)
void QStyleSheetStyle::unsetPalette(QWidget *w)
{
- if (customPaletteWidgets->contains(w)) {
- QPalette p = customPaletteWidgets->value(w);
+ if (styleSheetCaches->customPaletteWidgets.contains(w)) {
+ QPalette p = styleSheetCaches->customPaletteWidgets.value(w);
w->setPalette(p);
QWidget *ew = embeddedWidget(w);
if (ew != w)
ew->setPalette(p);
- customPaletteWidgets->remove(w);
+ styleSheetCaches->customPaletteWidgets.remove(w);
}
QVariant oldFont = w->property("_q_styleSheetWidgetFont");
if (oldFont.isValid()) {
w->setFont(qvariant_cast<QFont>(oldFont));
}
- if (autoFillDisabledWidgets->contains(w)) {
+ if (styleSheetCaches->autoFillDisabledWidgets.contains(w)) {
embeddedWidget(w)->setAutoFillBackground(true);
- autoFillDisabledWidgets->remove(w);
+ styleSheetCaches->autoFillDisabledWidgets.remove(w);
}
}
static void updateWidgets(const QList<const QWidget *>& widgets)
{
- if (!styleRulesCache->isEmpty() || !hasStyleRuleCache->isEmpty() || !renderRulesCache->isEmpty()) {
+ if (!styleSheetCaches->styleRulesCache.isEmpty() || !styleSheetCaches->hasStyleRuleCache.isEmpty() || !styleSheetCaches->renderRulesCache.isEmpty()) {
for (int i = 0; i < widgets.size(); ++i) {
const QWidget *widget = widgets.at(i);
- styleRulesCache->remove(widget);
- hasStyleRuleCache->remove(widget);
- renderRulesCache->remove(widget);
+ styleSheetCaches->styleRulesCache.remove(widget);
+ styleSheetCaches->hasStyleRuleCache.remove(widget);
+ styleSheetCaches->renderRulesCache.remove(widget);
}
}
for (int i = 0; i < widgets.size(); ++i) {
@@ -2622,12 +2615,7 @@ QStyleSheetStyle::QStyleSheetStyle(QStyle *base)
{
++numinstances;
if (numinstances == 1) {
- styleRulesCache = new QHash<const QWidget *, QVector<StyleRule> >;
- hasStyleRuleCache = new QHash<const QWidget *, QHash<int, bool> >;
- renderRulesCache = new QHash<const QWidget *, QRenderRules>;
- customPaletteWidgets = new QHash<const QWidget *, QPalette>;
- styleSheetCache = new QHash<const void *, StyleSheet>;
- autoFillDisabledWidgets = new QSet<const QWidget *>;
+ styleSheetCaches = new QStyleSheetStyleCaches;
}
}
@@ -2635,18 +2623,7 @@ QStyleSheetStyle::~QStyleSheetStyle()
{
--numinstances;
if (numinstances == 0) {
- delete styleRulesCache;
- styleRulesCache = 0;
- delete hasStyleRuleCache;
- hasStyleRuleCache = 0;
- delete renderRulesCache;
- renderRulesCache = 0;
- delete customPaletteWidgets;
- customPaletteWidgets = 0;
- delete styleSheetCache;
- styleSheetCache = 0;
- delete autoFillDisabledWidgets;
- autoFillDisabledWidgets = 0;
+ delete styleSheetCaches;
}
}
QStyle *QStyleSheetStyle::baseStyle() const
@@ -2658,19 +2635,19 @@ QStyle *QStyleSheetStyle::baseStyle() const
return QApplication::style();
}
-void QStyleSheetStyle::widgetDestroyed(QObject *o)
+void QStyleSheetStyleCaches::widgetDestroyed(QObject *o)
{
- styleRulesCache->remove((const QWidget *)o);
- hasStyleRuleCache->remove((const QWidget *)o);
- renderRulesCache->remove((const QWidget *)o);
- customPaletteWidgets->remove((const QWidget *)o);
- styleSheetCache->remove((const QWidget *)o);
- autoFillDisabledWidgets->remove((const QWidget *)o);
+ styleRulesCache.remove((const QWidget *)o);
+ hasStyleRuleCache.remove((const QWidget *)o);
+ renderRulesCache.remove((const QWidget *)o);
+ customPaletteWidgets.remove((const QWidget *)o);
+ styleSheetCache.remove((const QWidget *)o);
+ autoFillDisabledWidgets.remove((const QWidget *)o);
}
-void QStyleSheetStyle::styleDestroyed(QObject *o)
+void QStyleSheetStyleCaches::styleDestroyed(QObject *o)
{
- styleSheetCache->remove(o);
+ styleSheetCache.remove(o);
}
/*!
@@ -2688,7 +2665,7 @@ bool QStyleSheetStyle::initWidget(const QWidget *w) const
return false;
const_cast<QWidget *>(w)->setAttribute(Qt::WA_StyleSheet, true);
- QObject::connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)));
+ QObject::connect(w, SIGNAL(destroyed(QObject*)), styleSheetCaches, SLOT(widgetDestroyed(QObject*)), Qt::UniqueConnection);
return true;
}
@@ -2700,12 +2677,12 @@ void QStyleSheetStyle::polish(QWidget *w)
if (!initWidget(w))
return;
- if (styleRulesCache->contains(w)) {
+ if (styleSheetCaches->styleRulesCache.contains(w)) {
// the widget accessed its style pointer before polish (or repolish)
// (exemple: the QAbstractSpinBox constructor ask for the stylehint)
- styleRulesCache->remove(w);
- hasStyleRuleCache->remove(w);
- renderRulesCache->remove(w);
+ styleSheetCaches->styleRulesCache.remove(w);
+ styleSheetCaches->hasStyleRuleCache.remove(w);
+ styleSheetCaches->renderRulesCache.remove(w);
}
setGeometry(w);
setProperties(w);
@@ -2771,7 +2748,7 @@ void QStyleSheetStyle::polish(QWidget *w)
QWidget *ew = embeddedWidget(w);
if (ew->autoFillBackground()) {
ew->setAutoFillBackground(false);
- autoFillDisabledWidgets->insert(w);
+ styleSheetCaches->autoFillDisabledWidgets.insert(w);
if (ew != w) { //eg. viewport of a scrollarea
//(in order to draw the background anyway in case we don't.)
ew->setAttribute(Qt::WA_StyledBackground, true);
@@ -2797,18 +2774,18 @@ void QStyleSheetStyle::repolish(QWidget *w)
{
QList<const QWidget *> children = w->findChildren<const QWidget *>(QString());
children.append(w);
- styleSheetCache->remove(w);
+ styleSheetCaches->styleSheetCache.remove(w);
updateWidgets(children);
}
void QStyleSheetStyle::repolish(QApplication *app)
{
Q_UNUSED(app);
- const QList<const QWidget*> allWidgets = styleRulesCache->keys();
- styleSheetCache->remove(qApp);
- styleRulesCache->clear();
- hasStyleRuleCache->clear();
- renderRulesCache->clear();
+ const QList<const QWidget*> allWidgets = styleSheetCaches->styleRulesCache.keys();
+ styleSheetCaches->styleSheetCache.remove(qApp);
+ styleSheetCaches->styleRulesCache.clear();
+ styleSheetCaches->hasStyleRuleCache.clear();
+ styleSheetCaches->renderRulesCache.clear();
updateWidgets(allWidgets);
}
@@ -2819,10 +2796,10 @@ void QStyleSheetStyle::unpolish(QWidget *w)
return;
}
- styleRulesCache->remove(w);
- hasStyleRuleCache->remove(w);
- renderRulesCache->remove(w);
- styleSheetCache->remove(w);
+ styleSheetCaches->styleRulesCache.remove(w);
+ styleSheetCaches->hasStyleRuleCache.remove(w);
+ styleSheetCaches->renderRulesCache.remove(w);
+ styleSheetCaches->styleSheetCache.remove(w);
unsetPalette(w);
w->setProperty("_q_stylesheet_minw", QVariant());
w->setProperty("_q_stylesheet_minh", QVariant());
@@ -2849,10 +2826,10 @@ void QStyleSheetStyle::unpolish(QApplication *app)
{
baseStyle()->unpolish(app);
RECURSION_GUARD(return)
- styleRulesCache->clear();
- hasStyleRuleCache->clear();
- renderRulesCache->clear();
- styleSheetCache->remove(qApp);
+ styleSheetCaches->styleRulesCache.clear();
+ styleSheetCaches->hasStyleRuleCache.clear();
+ styleSheetCaches->renderRulesCache.clear();
+ styleSheetCaches->styleSheetCache.remove(qApp);
}
#ifndef QT_NO_TABBAR
@@ -4157,6 +4134,10 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
pseudoElement = PseudoElement_DownArrow;
break;
+ case PE_IndicatorArrowUp:
+ pseudoElement = PseudoElement_UpArrow;
+ break;
+
case PE_IndicatorRadioButton:
pseudoElement = PseudoElement_ExclusiveIndicator;
break;
@@ -4257,7 +4238,7 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
case PE_Widget:
if (!rule.hasDrawable()) {
QWidget *container = containerWidget(w);
- if (autoFillDisabledWidgets->contains(container)
+ if (styleSheetCaches->autoFillDisabledWidgets.contains(container)
&& (container == w || !renderRule(container, opt).hasBackground())) {
//we do not have a background, but we disabled the autofillbackground anyway. so fill the background now.
// (this may happen if we have rules like :focus)
diff --git a/src/gui/styles/qstylesheetstyle_p.h b/src/gui/styles/qstylesheetstyle_p.h
index fd81437..4564950 100644
--- a/src/gui/styles/qstylesheetstyle_p.h
+++ b/src/gui/styles/qstylesheetstyle_p.h
@@ -145,10 +145,6 @@ protected Q_SLOTS:
protected:
bool event(QEvent *e);
-private Q_SLOTS:
- void widgetDestroyed(QObject *);
- void styleDestroyed(QObject *);
-
private:
int refcount;
@@ -186,6 +182,22 @@ private:
Q_DECLARE_PRIVATE(QStyleSheetStyle)
};
+class QStyleSheetStyleCaches : public QObject
+{
+ Q_OBJECT
+public Q_SLOTS:
+ void widgetDestroyed(QObject *);
+ void styleDestroyed(QObject *);
+public:
+ QHash<const QWidget *, QVector<QCss::StyleRule> > styleRulesCache;
+ QHash<const QWidget *, QHash<int, bool> > hasStyleRuleCache;
+ typedef QHash<int, QHash<quint64, QRenderRule> > QRenderRules;
+ QHash<const QWidget *, QRenderRules> renderRulesCache;
+ QHash<const QWidget *, QPalette> customPaletteWidgets; // widgets whose palette we tampered
+ QHash<const void *, QCss::StyleSheet> styleSheetCache; // parsed style sheets
+ QSet<const QWidget *> autoFillDisabledWidgets;
+};
+
QT_END_NAMESPACE
#endif // QT_NO_STYLE_STYLESHEET
diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp
index f185c0d..6ded280 100644
--- a/src/gui/styles/qwindowsxpstyle.cpp
+++ b/src/gui/styles/qwindowsxpstyle.cpp
@@ -302,7 +302,7 @@ HWND QWindowsXPStylePrivate::winId(const QWidget *widget)
limboWidget = new QWidget(0);
limboWidget->createWinId();
limboWidget->setObjectName(QLatin1String("xp_limbo_widget"));
- // We dont need this internal widget to appear in QApplication::topLevelWidgets()
+ // We don't need this internal widget to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets)
QWidgetPrivate::allWidgets->remove(limboWidget);
}
diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri
index b22a908..b6eeec9 100644
--- a/src/gui/styles/styles.pri
+++ b/src/gui/styles/styles.pri
@@ -35,7 +35,7 @@ contains( styles, all ) {
styles = mac windows windowsxp windowsvista
}
-x11|embedded|!macx-*:styles -= mac
+x11|embedded|qpa|!macx-*:styles -= mac
x11{
QMAKE_CXXFLAGS += $$QT_CFLAGS_QGTKSTYLE
diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp
index 3fe98e1..bdba10d 100644
--- a/src/gui/text/qfont.cpp
+++ b/src/gui/text/qfont.cpp
@@ -75,6 +75,10 @@
#ifdef Q_OS_SYMBIAN
#include <private/qt_s60_p.h>
#endif
+#ifdef Q_WS_QPA
+#include <QtGui/qplatformscreen_qpa.h>
+#include <QtGui/private/qapplication_p.h>
+#endif
#include <QMutexLocker>
@@ -172,6 +176,17 @@ Q_GUI_EXPORT int qt_defaultDpiX()
if (!subScreens.isEmpty())
screen = subScreens.at(0);
dpi = qRound(screen->width() / (screen->physicalWidth() / qreal(25.4)));
+#elif defined(Q_WS_QPA)
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ if (pi) {
+ QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0);
+ const QSize screenSize = screen->geometry().size();
+ const QSize physicalSize = screen->physicalSize();
+ dpi = qRound(screenSize.width() / (physicalSize.width() / qreal(25.4)));
+ } else {
+ //PI has not been initialised, or it is being initialised. Give a default dpi
+ dpi = 100;
+ }
#elif defined(Q_OS_SYMBIAN)
dpi = S60->defaultDpiX;
#endif // Q_WS_X11
@@ -200,6 +215,17 @@ Q_GUI_EXPORT int qt_defaultDpiY()
if (!subScreens.isEmpty())
screen = subScreens.at(0);
dpi = qRound(screen->height() / (screen->physicalHeight() / qreal(25.4)));
+#elif defined(Q_WS_QPA)
+ QPlatformIntegration *pi = QApplicationPrivate::platformIntegration();
+ if (pi) {
+ QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0);
+ const QSize screenSize = screen->geometry().size();
+ const QSize physicalSize = screen->physicalSize();
+ dpi = qRound(screenSize.height() / (physicalSize.height() / qreal(25.4)));
+ } else {
+ //PI has not been initialised, or it is being initialised. Give a default dpi
+ dpi = 100;
+ }
#elif defined(Q_OS_SYMBIAN)
dpi = S60->defaultDpiY;
#endif // Q_WS_X11
diff --git a/src/gui/text/qfont_qpa.cpp b/src/gui/text/qfont_qpa.cpp
new file mode 100644
index 0000000..5fed18b
--- /dev/null
+++ b/src/gui/text/qfont_qpa.cpp
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/QPlatformFontDatabase>
+
+QT_BEGIN_NAMESPACE
+
+void QFont::initialize()
+{
+ QApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase();
+}
+
+void QFont::cleanup()
+{
+ QFontCache::cleanup();
+}
+
+
+/*****************************************************************************
+ QFont member functions
+ *****************************************************************************/
+
+Qt::HANDLE QFont::handle() const
+{
+ return 0;
+}
+
+QString QFont::rawName() const
+{
+ return QLatin1String("unknown");
+}
+
+void QFont::setRawName(const QString &)
+{
+}
+
+QString QFont::defaultFamily() const
+{
+ QString familyName;
+ switch(d->request.styleHint) {
+ case QFont::Times:
+ familyName = QString::fromLatin1("times");
+ case QFont::Courier:
+ case QFont::Monospace:
+ familyName = QString::fromLatin1("monospace");
+ case QFont::Decorative:
+ familyName = QString::fromLatin1("old english");
+ case QFont::Helvetica:
+ case QFont::System:
+ default:
+ familyName = QString::fromLatin1("helvetica");
+ }
+
+ QStringList list = QApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(familyName,QFont::StyleNormal,QUnicodeTables::Common);
+ if (list.size()) {
+ familyName = list.at(0);
+ }
+ return familyName;
+}
+
+QString QFont::lastResortFamily() const
+{
+ return QString::fromLatin1("helvetica");
+}
+
+QString QFont::lastResortFont() const
+{
+ qFatal("QFont::lastResortFont: Cannot find any reasonable font");
+ // Shut compiler up
+ return QString();
+}
+
+
+QT_END_NAMESPACE
+
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 2b26638..bae2a20 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -50,13 +50,19 @@
#include "private/qunicodetables_p.h"
#include "qfontengine_p.h"
+#ifdef Q_WS_QPA
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/qplatformfontdatabase_qpa.h>
+#include "qabstractfileengine.h"
+#endif
+
#ifdef Q_WS_X11
#include <locale.h>
#endif
#include <stdlib.h>
#include <limits.h>
-#if (defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE)
+#if (defined(Q_WS_QWS)|| defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE)
# include <ft2build.h>
# include FT_TRUETYPE_TABLES_H
#endif
@@ -139,7 +145,7 @@ struct QtFontEncoding
uchar pitch : 8;
};
-struct QtFontSize
+struct QtFontSize
{
#ifdef Q_WS_X11
QtFontEncoding *encodings;
@@ -147,10 +153,14 @@ struct QtFontSize
uint yres = 0, uint avgwidth = 0, bool add = false);
unsigned short count : 16;
#endif // Q_WS_X11
+
#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
QByteArray fileName;
int fileIndex;
-#endif // defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#endif // defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_QPA)
+ void *handle;
+#endif
unsigned short pixelSize : 16;
};
@@ -226,7 +236,7 @@ struct QtFontStyle
delete [] weightName;
delete [] setwidthName;
#endif
-#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
while (count) {
// bitfield count-- in while condition does not work correctly in mwccsym2
count--;
@@ -236,6 +246,12 @@ struct QtFontStyle
#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
pixelSizes[count].fileName.~QByteArray();
#endif
+#if defined (Q_WS_QPA)
+ QPlatformIntegration *integration = QApplicationPrivate::platformIntegration();
+ if (integration) { //on shut down there will be some that we don't release.
+ integration->fontDatabase()->releaseHandle(pixelSizes[count].handle);
+ }
+#endif
}
#endif
free(pixelSizes);
@@ -251,7 +267,7 @@ struct QtFontStyle
const char *weightName;
const char *setwidthName;
#endif // Q_WS_X11
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
bool antialiased;
#endif
@@ -301,6 +317,9 @@ QtFontSize *QtFontStyle::pixelSize(unsigned short size, bool add)
new (&pixelSizes[count].fileName) QByteArray;
pixelSizes[count].fileIndex = 0;
#endif
+#if defined(Q_WS_QPA)
+ pixelSizes[count].handle = 0;
+#endif
return pixelSizes + (count++);
}
@@ -357,7 +376,7 @@ QtFontStyle *QtFontFoundry::style(const QtFontStyle::Key &key, bool create)
}
-struct QtFontFamily
+struct QtFontFamily
{
enum WritingSystemStatus {
Unknown = 0,
@@ -383,9 +402,12 @@ struct QtFontFamily
fixedPitchComputed(false),
#endif
name(n), count(0), foundries(0)
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
, bogusWritingSystems(false)
#endif
+#if defined(Q_WS_QPA)
+ , askedForFallback(false)
+#endif
{
memset(writingSystems, 0, sizeof(writingSystems));
}
@@ -423,10 +445,13 @@ struct QtFontFamily
int count;
QtFontFoundry **foundries;
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
bool bogusWritingSystems;
QStringList fallbackFamilies;
#endif
+#if defined (Q_WS_QPA)
+ bool askedForFallback;
+#endif
unsigned char writingSystems[QFontDatabase::WritingSystemsCount];
QtFontFoundry *foundry(const QString &f, bool = false);
@@ -471,6 +496,7 @@ QtFontFoundry *QtFontFamily::foundry(const QString &f, bool create)
// ### copied to tools/makeqpf/qpf2.cpp
#if (defined(Q_WS_QWS) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA))
+
// see the Unicode subset bitfields in the MSDN docs
static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = {
// Any,
@@ -663,7 +689,7 @@ public:
bool loadFromCache(const QString &fontPath);
void addQPF2File(const QByteArray &file);
#endif // Q_WS_QWS
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
+#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
void addFont(const QString &familyname, const char *foundryname, int weight,
bool italic, int pixelSize, const QByteArray &file, int fileIndex,
bool antialiased,
@@ -674,10 +700,12 @@ public:
#endif
#if defined(Q_WS_QWS)
QDataStream *stream;
- QStringList fallbackFamilies;
#elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
const QSymbianFontDatabaseExtras *symbianExtras;
#endif
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
+ QStringList fallbackFamilies;
+#endif
};
void QFontDatabasePrivate::invalidate()
@@ -726,7 +754,7 @@ QtFontFamily *QFontDatabasePrivate::family(const QString &f, bool create)
return families[pos];
}
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
+#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE)
void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize,
const QByteArray &file, int fileIndex, bool antialiased,
const QList<QFontDatabase::WritingSystem> &writingSystems)
@@ -959,7 +987,7 @@ static void match(int script, const QFontDef &request,
const QString &family_name, const QString &foundry_name, int force_encoding_id,
QtFontDesc *desc, const QList<int> &blacklistedFamilies = QList<int>(), bool forceXLFD=false);
-#if defined(Q_WS_X11) || defined(Q_WS_QWS)
+#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA)
static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDef *fontDef)
{
fontDef->family = desc.family->name;
@@ -988,7 +1016,7 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe
#endif
#endif
-#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || defined(Q_WS_QPA)
static void getEngineData(const QFontPrivate *d, const QFontCache::Key &key)
{
// look for the requested font in the engine data cache
@@ -1049,6 +1077,8 @@ QT_BEGIN_INCLUDE_NAMESPACE
# include "qfontdatabase_win.cpp"
#elif defined(Q_WS_QWS)
# include "qfontdatabase_qws.cpp"
+#elif defined(Q_WS_QPA)
+# include "qfontdatabase_qpa.cpp"
#elif defined(Q_OS_SYMBIAN)
# include "qfontdatabase_s60.cpp"
#endif
@@ -1334,6 +1364,7 @@ static void match(int script, const QFontDef &request,
styleKey.stretch = request.stretch;
char pitch = request.ignorePitch ? '*' : request.fixedPitch ? 'm' : 'p';
+
FM_DEBUG("QFontDatabase::match\n"
" request:\n"
" family: %s [%s], script: %d\n"
@@ -2423,10 +2454,12 @@ QString QFontDatabase::writingSystemSample(WritingSystem writingSystem)
sample += QChar(0x4f8b);
break;
case Japanese:
- sample += QChar(0x3050);
- sample += QChar(0x3060);
- sample += QChar(0x30b0);
- sample += QChar(0x30c0);
+ sample += QChar(0x30b5);
+ sample += QChar(0x30f3);
+ sample += QChar(0x30d7);
+ sample += QChar(0x30eb);
+ sample += QChar(0x3067);
+ sample += QChar(0x3059);
break;
case Korean:
sample += QChar(0xac00);
@@ -2479,7 +2512,7 @@ void QFontDatabase::createDatabase()
{ initializeDb(); }
// used from qfontengine_ft.cpp
-QByteArray qt_fontdata_from_index(int index)
+Q_GUI_EXPORT QByteArray qt_fontdata_from_index(int index)
{
QMutexLocker locker(fontDatabaseMutex());
return privateDb()->applicationFonts.value(index).data;
diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h
index 719242c..f31c19c 100644
--- a/src/gui/text/qfontdatabase.h
+++ b/src/gui/text/qfontdatabase.h
@@ -152,7 +152,7 @@ public:
private:
static void createDatabase();
static void parseFontName(const QString &name, QString &foundry, QString &family);
-#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request);
#endif
static void load(const QFontPrivate *d, int script);
@@ -167,6 +167,7 @@ private:
friend class QFontEngineMultiXLFD;
friend class QFontEngineMultiQWS;
friend class QFontEngineMultiS60;
+ friend class QFontEngineMultiQPA;
QFontDatabasePrivate *d;
};
diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp
new file mode 100644
index 0000000..19ce1be
--- /dev/null
+++ b/src/gui/text/qfontdatabase_qpa.cpp
@@ -0,0 +1,393 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlibraryinfo.h"
+#include <QtCore/qsettings.h>
+
+#include "qfontengine_qpa_p.h"
+#include "qplatformdefs.h"
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/qplatformfontdatabase_qpa.h>
+
+#include <QtCore/qmath.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_GUI_EXPORT void qt_registerFont(const QString &familyName, const QString &foundryname, int weight,
+ QFont::Style style, int stretch, bool antialiased, bool scalable, int pixelSize,
+ const QSupportedWritingSystems &writingSystems, void *handle)
+{
+ QFontDatabasePrivate *d = privateDb();
+ // qDebug() << "Adding font" << familyname << weight << italic << pixelSize << file << fileIndex << antialiased;
+ QtFontStyle::Key styleKey;
+ styleKey.style = style;
+ styleKey.weight = weight;
+ styleKey.stretch = stretch;
+ QtFontFamily *f = d->family(familyName, true);
+
+ for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) {
+ if (writingSystems.supported(QFontDatabase::WritingSystem(i))) {
+ f->writingSystems[i] = QtFontFamily::Supported;
+ } else {
+ f->writingSystems[i] = QtFontFamily::Unsupported;
+ }
+ }
+
+ QtFontFoundry *foundry = f->foundry(foundryname, true);
+ QtFontStyle *fontStyle = foundry->style(styleKey, true);
+ fontStyle->smoothScalable = scalable;
+ fontStyle->antialiased = antialiased;
+ QtFontSize *size = fontStyle->pixelSize(pixelSize?pixelSize:SMOOTH_SCALABLE, true);
+ size->handle = handle;
+}
+
+static QStringList fallbackFamilies(const QString &family, const QFont::Style &style, const QUnicodeTables::Script &script)
+{
+ QStringList retList = QApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,script);
+ QFontDatabasePrivate *db = privateDb();
+
+ QStringList::iterator i;
+ for (i = retList.begin(); i != retList.end(); ++i) {
+ bool contains = false;
+ for (int j = 0; j < db->count; j++) {
+ QtFontFamily *qtFamily = db->families[j];
+ if (!(i->compare(qtFamily->name,Qt::CaseInsensitive))) {
+ contains = true;
+ break;
+ }
+ }
+ if (!contains) {
+ i = retList.erase(i);
+ i--;
+ }
+ }
+ return retList;
+}
+
+static void initializeDb()
+{
+ static int initialized = false;
+
+ if (!initialized) {
+ //init by asking for the platformfontdb for the first time :)
+ QApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase();
+ initialized = true;
+ }
+}
+
+#ifndef QT_NO_SETTINGS
+// called from qapplication_qws.cpp
+void qt_applyFontDatabaseSettings(const QSettings &settings)
+{
+ initializeDb();
+ QFontDatabasePrivate *db = privateDb();
+ for (int i = 0; i < db->count; ++i) {
+ QtFontFamily *family = db->families[i];
+ if (settings.contains(family->name))
+ family->fallbackFamilies = settings.value(family->name).toStringList();
+ }
+
+ if (settings.contains(QLatin1String("Global Fallbacks")))
+ db->fallbackFamilies = settings.value(QLatin1String("Global Fallbacks")).toStringList();
+}
+#endif // QT_NO_SETTINGS
+
+static inline void load(const QString & = QString(), int = -1)
+{
+ initializeDb();
+}
+
+static
+QFontEngine *loadSingleEngine(int script,
+ const QFontDef &request,
+ QtFontFoundry *foundry,
+ QtFontStyle *style, QtFontSize *size)
+{
+ Q_UNUSED(foundry);
+
+ Q_ASSERT(size);
+ int pixelSize = size->pixelSize;
+ if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE))
+ pixelSize = request.pixelSize;
+
+ QFontDef def = request;
+ def.pixelSize = pixelSize;
+
+ QFontCache::Key key(def,script);
+ QFontEngine *engine = QFontCache::instance()->findEngine(key);
+ if (!engine) {
+ QPlatformFontDatabase *pfdb = QApplicationPrivate::platformIntegration()->fontDatabase();
+ if (size->handle) {
+ engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle);
+ if (engine) {
+ QFontCache::Key key(def,script);
+ QFontCache::instance()->instance()->insertEngine(key,engine);
+ }
+ }
+
+ }
+ return engine;
+}
+
+static
+QFontEngine *loadEngine(int script, const QFontDef &request,
+ QtFontFamily *family, QtFontFoundry *foundry,
+ QtFontStyle *style, QtFontSize *size)
+{
+
+ QFontEngine *engine = loadSingleEngine(script, request, foundry, style, size);
+ //make sure that the db has all fallback families
+ if (engine
+ && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol ) {
+
+ if (family && !family->askedForFallback) {
+ family->fallbackFamilies = fallbackFamilies(family->name,QFont::Style(style->key.style),QUnicodeTables::Script(script));
+
+ family->askedForFallback = true;
+ }
+
+ QStringList fallbacks = privateDb()->fallbackFamilies;
+ if (family && !family->fallbackFamilies.isEmpty())
+ fallbacks = family->fallbackFamilies;
+
+ engine = new QFontEngineMultiQPA(engine, script, fallbacks);
+ }
+
+ return engine;
+}
+
+static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt)
+{
+ QFontDatabasePrivate *db = privateDb();
+
+ fnt->families = QApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName);
+
+ db->reregisterAppFonts = true;
+}
+
+bool QFontDatabase::removeApplicationFont(int handle)
+{
+ QMutexLocker locker(fontDatabaseMutex());
+
+ QFontDatabasePrivate *db = privateDb();
+ if (handle < 0 || handle >= db->applicationFonts.count())
+ return false;
+
+ db->applicationFonts[handle] = QFontDatabasePrivate::ApplicationFont();
+
+ db->reregisterAppFonts = true;
+ db->invalidate();
+ return true;
+}
+
+bool QFontDatabase::removeAllApplicationFonts()
+{
+ QMutexLocker locker(fontDatabaseMutex());
+
+ QFontDatabasePrivate *db = privateDb();
+ if (db->applicationFonts.isEmpty())
+ return false;
+
+ db->applicationFonts.clear();
+ db->invalidate();
+ return true;
+}
+
+bool QFontDatabase::supportsThreadedFontRendering()
+{
+ return true;
+}
+
+/*!
+ \internal
+*/
+QFontEngine *
+QFontDatabase::findFont(int script, const QFontPrivate *fp,
+ const QFontDef &request)
+{
+ QMutexLocker locker(fontDatabaseMutex());
+
+ const int force_encoding_id = -1;
+
+ if (!privateDb()->count)
+ initializeDb();
+
+ QFontEngine *engine;
+ QFontCache::Key key(request, script);
+ engine = QFontCache::instance()->findEngine(key);
+ if (engine) {
+ qDebug() << "Cache hit level 1";
+ return engine;
+ }
+
+ QString family_name, foundry_name;
+
+ parseFontName(request.family, foundry_name, family_name);
+
+ if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) {
+ engine =new QTestFontEngine(request.pixelSize);
+ engine->fontDef = request;
+ }
+
+ QtFontDesc desc;
+ match(script, request, family_name, foundry_name, force_encoding_id, &desc);
+ if (desc.family != 0 && desc.foundry != 0 && desc.style != 0) {
+ engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size);
+ } else {
+ FM_DEBUG(" NO MATCH FOUND\n");
+ }
+
+ if (engine) {
+ initFontDef(desc, request, &engine->fontDef);
+
+ if (fp) {
+ QFontDef def = request;
+ if (def.family.isEmpty()) {
+ def.family = fp->request.family;
+ def.family = def.family.left(def.family.indexOf(QLatin1Char(',')));
+ }
+ }
+ }
+
+ if (!engine) {
+ if (!request.family.isEmpty()) {
+ QStringList fallbacks = fallbackFamilies(request.family,QFont::Style(request.style),QUnicodeTables::Script(script));
+ for (int i = 0; i < fallbacks.size(); i++) {
+ QFontDef def = request;
+ def.family = fallbacks.at(i);
+ QFontCache::Key key(def,script);
+ engine = QFontCache::instance()->findEngine(key);
+ if (!engine) {
+ QtFontDesc desc;
+ match(script, def, def.family, QLatin1String(""), 0, &desc);
+ if (desc.family == 0 && desc.foundry == 0 && desc.style == 0) {
+ continue;
+ }
+ engine = loadEngine(script, def, desc.family, desc.foundry, desc.style, desc.size);
+ if (engine) {
+ initFontDef(desc, def, &engine->fontDef);
+ break;
+ }
+ }
+ }
+ }
+
+ if (!engine)
+ engine = new QFontEngineBox(request.pixelSize);
+
+ FM_DEBUG("returning box engine");
+ }
+
+ if (fp && fp->dpi > 0) {
+ engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi));
+ } else {
+ engine->fontDef.pointSize = request.pointSize;
+ }
+
+ return engine;
+}
+
+void QFontDatabase::load(const QFontPrivate *d, int script)
+{
+ QFontDef req = d->request;
+
+ if (req.pixelSize == -1) {
+ req.pixelSize = floor(((req.pointSize * d->dpi) / 72) * 100 + 0.5) / 100;
+ req.pixelSize = qRound(req.pixelSize);
+ }
+ if (req.pointSize < 0)
+ req.pointSize = req.pixelSize*72.0/d->dpi;
+ if (req.weight == 0)
+ req.weight = QFont::Normal;
+ if (req.stretch == 0)
+ req.stretch = 100;
+
+ QFontCache::Key key(req, script);
+
+ if (!d->engineData)
+ getEngineData(d, key);
+
+ // the cached engineData could have already loaded the engine we want
+ if (d->engineData->engines[script])
+ return;
+
+ QFontEngine *fe = QFontCache::instance()->findEngine(key);
+
+ // list of families to try
+ QStringList family_list;
+
+ if (!req.family.isEmpty()) {
+ family_list = familyList(req);
+
+ // add the default family
+ QString defaultFamily = QApplication::font().family();
+ if (! family_list.contains(defaultFamily))
+ family_list << defaultFamily;
+
+ }
+
+ // null family means find the first font matching the specified script
+ family_list << QString();
+
+ QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd();
+ for (; !fe && it != end; ++it) {
+ req.family = *it;
+
+ fe = QFontDatabase::findFont(script, d, req);
+ if (fe && (fe->type()==QFontEngine::Box) && !req.family.isEmpty())
+ fe = 0;
+ }
+
+ if (fe->symbol || (d->request.styleStrategy & QFont::NoFontMerging)) {
+ for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) {
+ if (!d->engineData->engines[i]) {
+ d->engineData->engines[i] = fe;
+ fe->ref.ref();
+ }
+ }
+ } else {
+ d->engineData->engines[script] = fe;
+ fe->ref.ref();
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/text/qfontdatabase_qws.cpp b/src/gui/text/qfontdatabase_qws.cpp
index a3d8d65..09fb07c 100644
--- a/src/gui/text/qfontdatabase_qws.cpp
+++ b/src/gui/text/qfontdatabase_qws.cpp
@@ -40,8 +40,10 @@
****************************************************************************/
#include "qdir.h"
+#if defined(Q_WS_QWS)
#include "qscreen_qws.h" //so we can check for rotation
#include "qwindowsystem_qws.h"
+#endif
#include "qlibraryinfo.h"
#include "qabstractfileengine.h"
#include <QtCore/qsettings.h>
@@ -153,7 +155,11 @@ extern QString qws_fontCacheDir();
#ifndef QT_FONTS_ARE_RESOURCES
bool QFontDatabasePrivate::loadFromCache(const QString &fontPath)
{
+#ifdef Q_WS_QWS
const bool weAreTheServer = QWSServer::instance();
+#else
+ const bool weAreTheServer = true; // assume single-process
+#endif
QString fontDirFile = fontPath + QLatin1String("/fontdir");
@@ -382,12 +388,14 @@ static void initializeDb()
}
#endif
+#ifndef QT_NO_QWS_QPF2
QDir dir(fontpath, QLatin1String("*.qpf2"));
for (int i = 0; i < int(dir.count()); ++i) {
const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));
//qDebug() << "looking at" << file;
db->addQPF2File(file);
}
+#endif
#endif //QT_FONTS_ARE_RESOURCES
@@ -688,6 +696,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp,
{
QScopedPointer<QFontEngine> engine(loadSingleEngine(script, fp, request, family, foundry,
style, size));
+#ifndef QT_NO_QWS_QPF
if (!engine.isNull()
&& script == QUnicodeTables::Common
&& !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) {
@@ -701,6 +710,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp,
engine.take();
engine.reset(fe);
}
+#endif
return engine.take();
}
diff --git a/src/gui/text/qfontdatabase_x11.cpp b/src/gui/text/qfontdatabase_x11.cpp
index a7aa2ce..635d2cf 100644
--- a/src/gui/text/qfontdatabase_x11.cpp
+++ b/src/gui/text/qfontdatabase_x11.cpp
@@ -1455,6 +1455,7 @@ void qt_addPatternProps(FcPattern *pattern, int screen, int script, const QFontD
weight_value = FC_WEIGHT_DEMIBOLD;
else if (request.weight < (QFont::Bold + QFont::Black) / 2)
weight_value = FC_WEIGHT_BOLD;
+ FcPatternDel(pattern, FC_WEIGHT);
FcPatternAddInteger(pattern, FC_WEIGHT, weight_value);
int slant_value = FC_SLANT_ROMAN;
@@ -1462,20 +1463,25 @@ void qt_addPatternProps(FcPattern *pattern, int screen, int script, const QFontD
slant_value = FC_SLANT_ITALIC;
else if (request.style == QFont::StyleOblique)
slant_value = FC_SLANT_OBLIQUE;
+ FcPatternDel(pattern, FC_SLANT);
FcPatternAddInteger(pattern, FC_SLANT, slant_value);
double size_value = qMax(qreal(1.), request.pixelSize);
+ FcPatternDel(pattern, FC_PIXEL_SIZE);
FcPatternAddDouble(pattern, FC_PIXEL_SIZE, size_value);
int stretch = request.stretch;
if (!stretch)
stretch = 100;
+ FcPatternDel(pattern, FC_WIDTH);
FcPatternAddInteger(pattern, FC_WIDTH, stretch);
if (X11->display && QX11Info::appDepth(screen) <= 8) {
+ FcPatternDel(pattern, FC_ANTIALIAS);
// can't do antialiasing on 8bpp
FcPatternAddBool(pattern, FC_ANTIALIAS, false);
} else if (request.styleStrategy & (QFont::PreferAntialias|QFont::NoAntialias)) {
+ FcPatternDel(pattern, FC_ANTIALIAS);
FcPatternAddBool(pattern, FC_ANTIALIAS,
!(request.styleStrategy & QFont::NoAntialias));
}
@@ -1484,6 +1490,7 @@ void qt_addPatternProps(FcPattern *pattern, int screen, int script, const QFontD
Q_ASSERT(script < QUnicodeTables::ScriptCount);
FcLangSet *ls = FcLangSetCreate();
FcLangSetAdd(ls, (const FcChar8*)specialLanguages[script]);
+ FcPatternDel(pattern, FC_LANG);
FcPatternAddLangSet(pattern, FC_LANG, ls);
FcLangSetDestroy(ls);
}
@@ -1891,6 +1898,18 @@ QFontEngine *QFontDatabase::loadXlfd(int screen, int script, const QFontDef &req
return fe;
}
+#if (defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6)) && defined(Q_CC_GNU) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
+#define NEEDS_GCC_BUG_WORKAROUND
+#endif
+
+#ifdef NEEDS_GCC_BUG_WORKAROUND
+static inline void gccBugWorkaround(const QFontDef &req)
+{
+ char buffer[8];
+ snprintf(buffer, 8, "%f", req.pixelSize);
+}
+#endif
+
/*! \internal
Loads a QFontEngine for the specified \a script that matches the
QFontDef \e request member variable.
@@ -1902,9 +1921,15 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
// normalize the request to get better caching
QFontDef req = d->request;
if (req.pixelSize <= 0)
- req.pixelSize = floor(qt_pixelSize(req.pointSize, d->dpi) * 100 + 0.5) / 100;
+ req.pixelSize = qFloor(qt_pixelSize(req.pointSize, d->dpi) * 100.0 + 0.5) * 0.01;
if (req.pixelSize < 1)
req.pixelSize = 1;
+
+#ifdef NEEDS_GCC_BUG_WORKAROUND
+ // req.pixelSize ends up with a bogus value unless this workaround is called
+ gccBugWorkaround(req);
+#endif
+
if (req.weight == 0)
req.weight = QFont::Normal;
if (req.stretch == 0)
@@ -1940,7 +1965,6 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
#ifndef QT_NO_FONTCONFIG
} else if (X11->has_fontconfig) {
fe = loadFc(d, script, req);
-
if (fe != 0 && fe->fontDef.pixelSize != req.pixelSize && mainThread && qt_is_gui_used) {
QFontEngine *xlfdFontEngine = loadXlfd(d->screen, script, req);
if (xlfdFontEngine->fontDef.family == fe->fontDef.family) {
@@ -1989,7 +2013,7 @@ static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt)
FcFontSet *set = FcConfigGetFonts(config, FcSetApplication);
if (!set) {
- FcConfigAppFontAddFile(config, (const FcChar8 *)":/non-existant");
+ FcConfigAppFontAddFile(config, (const FcChar8 *)":/non-existent");
set = FcConfigGetFonts(config, FcSetApplication); // try again
if (!set)
return;
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index be346e9..24c4664 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -494,7 +494,7 @@ static void collectSingleContour(qreal x0, qreal y0, uint *grid, int x, int y, i
path->closeSubpath();
}
-void qt_addBitmapToPath(qreal x0, qreal y0, const uchar *image_data, int bpl, int w, int h, QPainterPath *path)
+Q_GUI_EXPORT void qt_addBitmapToPath(qreal x0, qreal y0, const uchar *image_data, int bpl, int w, int h, QPainterPath *path)
{
uint *grid = new uint[(w+1)*(h+1)];
// set up edges
@@ -605,6 +605,12 @@ void QFontEngine::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int n
addBitmapFontToPath(x, y, g, path, flags);
}
+QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed /*subPixelPosition*/)
+{
+ // For font engines don't support subpixel positioning
+ return alphaMapForGlyph(glyph);
+}
+
QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &t)
{
QImage i = alphaMapForGlyph(glyph);
@@ -615,6 +621,19 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &t)
return i;
}
+QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t)
+{
+ if (! supportsSubPixelPositions())
+ return alphaMapForGlyph(glyph, t);
+
+ QImage i = alphaMapForGlyph(glyph, subPixelPosition);
+ if (t.type() > QTransform::TxTranslate)
+ i = i.transformed(t).convertToFormat(QImage::Format_Indexed8);
+ Q_ASSERT(i.depth() <= 8); // To verify that transformed didn't change the format...
+
+ return i;
+}
+
QImage QFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed /*subPixelPosition*/, int /* margin */, const QTransform &t)
{
QImage alphaMask = alphaMapForGlyph(glyph, t);
@@ -753,7 +772,7 @@ QFontEngineGlyphCache *QFontEngine::glyphCache(void *key, QFontEngineGlyphCache:
return 0;
}
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
static inline QFixed kerning(int left, int right, const QFontEngine::KernPair *pairs, int numPairs)
{
uint left_right = (left << 16) + right;
@@ -1197,7 +1216,7 @@ glyph_metrics_t QFontEngineBox::boundingBox(const QGlyphLayout &glyphs)
return overall;
}
-#if defined(Q_WS_QWS)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
void QFontEngineBox::draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &ti)
{
if (!ti.glyphs.numGlyphs)
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 512afc8..81e2594 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -723,7 +723,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format)
metrics = face->size->metrics;
-#if defined(Q_WS_QWS)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
/*
TrueType fonts with embedded bitmaps may have a bitmap font specific
ascent/descent in the EBLC table. There is no direct public API
@@ -755,10 +755,15 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format)
return true;
}
-QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph) const
+void QFontEngineFT::setDefaultHintStyle(HintStyle style)
+{
+ default_hint_style = style;
+}
+
+QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const
{
Glyph *g = set->getGlyph(glyph);
- if (g)
+ if (g && g->format == format)
return g;
int load_flags = FT_LOAD_DEFAULT | default_load_flags;
@@ -766,6 +771,18 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph
? FT_LOAD_TARGET_LIGHT
: FT_LOAD_TARGET_NORMAL;
+ if (format == Format_Mono) {
+ load_target = FT_LOAD_TARGET_MONO;
+ } else if (format == Format_A32) {
+ if (subpixelType == QFontEngineFT::Subpixel_RGB || subpixelType == QFontEngineFT::Subpixel_BGR) {
+ if (default_hint_style == HintFull)
+ load_target = FT_LOAD_TARGET_LCD;
+ } else if (subpixelType == QFontEngineFT::Subpixel_VRGB || subpixelType == QFontEngineFT::Subpixel_VBGR) {
+ if (default_hint_style == HintFull)
+ load_target = FT_LOAD_TARGET_LCD_V;
+ }
+ }
+
if (set->outline_drawing)
load_flags = FT_LOAD_NO_BITMAP;
@@ -1767,6 +1784,11 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph)
glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matrix)
{
+ return alphaMapBoundingBox(glyph, matrix, QFontEngine::Format_None);
+}
+
+glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix, QFontEngine::GlyphFormat format)
+{
FT_Face face = 0;
glyph_metrics_t overall;
QGlyphSet *glyphSet = 0;
@@ -1810,9 +1832,9 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matr
glyphSet = &defaultGlyphSet;
}
Glyph * g = glyphSet->getGlyph(glyph);
- if (!g) {
+ if (!g || g->format != format) {
face = lockFace();
- g = loadGlyphMetrics(glyphSet, glyph);
+ g = loadGlyphMetrics(glyphSet, glyph, format);
}
if (g) {
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index 72f7d9f..f0f7153 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -130,13 +130,6 @@ private:
class Q_GUI_EXPORT QFontEngineFT : public QFontEngine
{
public:
- enum GlyphFormat {
- Format_None,
- Format_Render = Format_None,
- Format_Mono,
- Format_A8,
- Format_A32
- };
/* we don't cache glyphs that are too large anyway, so we can make this struct rather small */
struct Glyph {
@@ -242,6 +235,8 @@ private:
virtual void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const;
virtual QImage alphaMapForGlyph(glyph_t);
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
+ virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix,
+ QFontEngine::GlyphFormat format);
virtual void removeGlyphFromCache(glyph_t glyph);
virtual int glyphCount() const;
@@ -282,6 +277,14 @@ private:
virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints);
+ enum HintStyle {
+ HintNone,
+ HintLight,
+ HintMedium,
+ HintFull
+ };
+
+ void setDefaultHintStyle(HintStyle style);
protected:
void freeGlyphSets();
@@ -293,12 +296,6 @@ protected:
QFreetypeFace *freetype;
int default_load_flags;
- enum HintStyle {
- HintNone,
- HintLight,
- HintMedium,
- HintFull
- };
HintStyle default_hint_style;
@@ -311,7 +308,7 @@ protected:
bool embeddedbitmap;
private:
- QFontEngineFT::Glyph *loadGlyphMetrics(QGlyphSet *set, uint glyph) const;
+ QFontEngineFT::Glyph *loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const;
GlyphFormat defaultFormat;
FT_Matrix matrix;
diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm
index ebc1f6d..3c6f3b2 100644
--- a/src/gui/text/qfontengine_mac.mm
+++ b/src/gui/text/qfontengine_mac.mm
@@ -252,6 +252,11 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay
continue;
Q_ASSERT((CTRunGetStatus(run) & kCTRunStatusRightToLeft) == rtl);
+ CFRange stringRange = CTRunGetStringRange(run);
+ UniChar endGlyph = CFStringGetCharacterAtIndex(cfstring, stringRange.location + stringRange.length - 1);
+ bool endWithPDF = QChar::direction(endGlyph) == QChar::DirPDF;
+ if (endWithPDF)
+ glyphCount++;
if (!outOBounds && outGlyphs + glyphCount - initialGlyph > *nglyphs) {
outOBounds = true;
@@ -264,6 +269,9 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay
CTFontRef runFont = static_cast<CTFontRef>(CFDictionaryGetValue(runAttribs, NSFontAttributeName));
const uint fontIndex = (fontIndexForFont(runFont) << 24);
//NSLog(@"Run Font Name = %@", CTFontCopyFamilyName(runFont));
+ if (endWithPDF)
+ glyphCount--;
+
QVarLengthArray<CGGlyph, 512> cgglyphs(0);
const CGGlyph *tmpGlyphs = CTRunGetGlyphsPtr(run);
if (!tmpGlyphs) {
@@ -331,6 +339,16 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay
(fontDef.styleStrategy & QFont::ForceIntegerMetrics)
? QFixed::fromReal(lastGlyphAdvance.width).round()
: QFixed::fromReal(lastGlyphAdvance.width);
+
+ if (endWithPDF) {
+ logClusters[stringRange.location + stringRange.length - 1] = glyphCount;
+ outGlyphs[glyphCount] = 0xFFFF;
+ outAdvances_x[glyphCount] = 0;
+ outAdvances_y[glyphCount] = 0;
+ outAttributes[glyphCount].clusterStart = true;
+ outAttributes[glyphCount].dontPrint = true;
+ glyphCount++;
+ }
}
outGlyphs += glyphCount;
outAttributes += glyphCount;
@@ -694,7 +712,7 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition
CGContextSetFont(ctx, cgFont);
qreal pos_x = -br.x.toReal() + subPixelPosition.toReal();
- qreal pos_y = im.height()+br.y.toReal();
+ qreal pos_y = im.height() + br.y.toReal() - 1;
CGContextSetTextPosition(ctx, pos_x, pos_y);
CGSize advance;
@@ -713,9 +731,9 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition
return im;
}
-QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph)
+QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition)
{
- QImage im = imageForGlyph(glyph, QFixed(), 0, false);
+ QImage im = imageForGlyph(glyph, subPixelPosition, 0, false);
QImage indexed(im.width(), im.height(), QImage::Format_Indexed8);
QVector<QRgb> colors(256);
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index d07c8c9..be9f48d 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -120,6 +120,14 @@ public:
TestFontEngine = 0x1000
};
+ enum GlyphFormat {
+ Format_None,
+ Format_Render = Format_None,
+ Format_Mono,
+ Format_A8,
+ Format_A32
+ };
+
QFontEngine();
virtual ~QFontEngine();
@@ -159,7 +167,7 @@ public:
virtual QFixed emSquareSize() const { return ascent(); }
- /* returns 0 as glyph index for non existant glyphs */
+ /* returns 0 as glyph index for non existent glyphs */
virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const = 0;
/**
@@ -169,7 +177,7 @@ public:
virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const {}
virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const;
-#if !defined(Q_WS_X11) && !defined(Q_WS_WIN) && !defined(Q_WS_MAC) && !defined(Q_OS_SYMBIAN)
+#if !defined(Q_WS_X11) && !defined(Q_WS_WIN) && !defined(Q_WS_MAC) && !defined(Q_OS_SYMBIAN) && !defined(Q_WS_QPA)
virtual void draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &si) = 0;
#endif
virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
@@ -188,9 +196,16 @@ public:
* Returns an image indexed_8 with index values ranging from 0=fully transparant to 255=opaque
*/
virtual QImage alphaMapForGlyph(glyph_t);
+ virtual QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition);
virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t);
+ virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t);
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
+ virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix, GlyphFormat /*format*/)
+ {
+ return boundingBox(glyph, matrix);
+ }
+
virtual void removeGlyphFromCache(glyph_t);
virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) = 0;
@@ -242,7 +257,7 @@ public:
bool symbol;
mutable HB_FontRec hbFont;
mutable HB_Face hbFace;
-#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
struct KernPair {
uint left_right;
QFixed adjust;
@@ -460,7 +475,7 @@ public:
virtual FaceId faceId() const;
virtual bool getSfntTableData(uint /*tag*/, uchar * /*buffer*/, uint * /*length*/) const;
virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics);
- virtual QImage alphaMapForGlyph(glyph_t);
+ virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition);
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
virtual qreal minRightBearing() const;
virtual qreal minLeftBearing() const;
diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp
new file mode 100644
index 0000000..cccbc92
--- /dev/null
+++ b/src/gui/text/qfontengine_qpa.cpp
@@ -0,0 +1,691 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qfontengine_qpa_p.h"
+
+#include <QtCore/QFile>
+#include <QtCore/QFileInfo>
+#include <QtCore/QDir>
+#include <QtCore/QBuffer>
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/QPlatformFontDatabase>
+#include <QtGui/private/qpaintengine_raster_p.h>
+
+QT_BEGIN_NAMESPACE
+
+//#define DEBUG_HEADER
+//#define DEBUG_FONTENGINE
+
+static QFontEngineQPA::TagType tagTypes[QFontEngineQPA::NumTags] = {
+ QFontEngineQPA::StringType, // FontName
+ QFontEngineQPA::StringType, // FileName
+ QFontEngineQPA::UInt32Type, // FileIndex
+ QFontEngineQPA::UInt32Type, // FontRevision
+ QFontEngineQPA::StringType, // FreeText
+ QFontEngineQPA::FixedType, // Ascent
+ QFontEngineQPA::FixedType, // Descent
+ QFontEngineQPA::FixedType, // Leading
+ QFontEngineQPA::FixedType, // XHeight
+ QFontEngineQPA::FixedType, // AverageCharWidth
+ QFontEngineQPA::FixedType, // MaxCharWidth
+ QFontEngineQPA::FixedType, // LineThickness
+ QFontEngineQPA::FixedType, // MinLeftBearing
+ QFontEngineQPA::FixedType, // MinRightBearing
+ QFontEngineQPA::FixedType, // UnderlinePosition
+ QFontEngineQPA::UInt8Type, // GlyphFormat
+ QFontEngineQPA::UInt8Type, // PixelSize
+ QFontEngineQPA::UInt8Type, // Weight
+ QFontEngineQPA::UInt8Type, // Style
+ QFontEngineQPA::StringType, // EndOfHeader
+ QFontEngineQPA::BitFieldType// WritingSystems
+};
+
+
+#if defined(DEBUG_HEADER)
+# define DEBUG_VERIFY qDebug
+#else
+# define DEBUG_VERIFY if (0) qDebug
+#endif
+
+#define READ_VERIFY(type, variable) \
+ if (tagPtr + sizeof(type) > endPtr) { \
+ DEBUG_VERIFY() << "read verify failed in line" << __LINE__; \
+ return 0; \
+ } \
+ variable = qFromBigEndian<type>(tagPtr); \
+ DEBUG_VERIFY() << "read value" << variable << "of type " #type; \
+ tagPtr += sizeof(type)
+
+template <typename T>
+T readValue(const uchar *&data)
+{
+ T value = qFromBigEndian<T>(data);
+ data += sizeof(T);
+ return value;
+}
+
+#define VERIFY(condition) \
+ if (!(condition)) { \
+ DEBUG_VERIFY() << "condition " #condition " failed in line" << __LINE__; \
+ return 0; \
+ }
+
+#define VERIFY_TAG(condition) \
+ if (!(condition)) { \
+ DEBUG_VERIFY() << "verifying tag condition " #condition " failed in line" << __LINE__ << "with tag" << tag; \
+ return 0; \
+ }
+
+static inline const uchar *verifyTag(const uchar *tagPtr, const uchar *endPtr)
+{
+ quint16 tag, length;
+ READ_VERIFY(quint16, tag);
+ READ_VERIFY(quint16, length);
+ if (tag == QFontEngineQPA::Tag_EndOfHeader)
+ return endPtr;
+ if (tag < QFontEngineQPA::NumTags) {
+ switch (tagTypes[tag]) {
+ case QFontEngineQPA::BitFieldType:
+ case QFontEngineQPA::StringType:
+ // can't do anything...
+ break;
+ case QFontEngineQPA::UInt32Type:
+ VERIFY_TAG(length == sizeof(quint32));
+ break;
+ case QFontEngineQPA::FixedType:
+ VERIFY_TAG(length == sizeof(quint32));
+ break;
+ case QFontEngineQPA::UInt8Type:
+ VERIFY_TAG(length == sizeof(quint8));
+ break;
+ }
+#if defined(DEBUG_HEADER)
+ if (length == 1)
+ qDebug() << "tag data" << hex << *tagPtr;
+ else if (length == 4)
+ qDebug() << "tag data" << hex << tagPtr[0] << tagPtr[1] << tagPtr[2] << tagPtr[3];
+#endif
+ }
+ return tagPtr + length;
+}
+
+const QFontEngineQPA::Glyph *QFontEngineQPA::findGlyph(glyph_t g) const
+{
+ if (!g || g >= glyphMapEntries)
+ return 0;
+ const quint32 *gmapPtr = reinterpret_cast<const quint32 *>(fontData + glyphMapOffset);
+ quint32 glyphPos = qFromBigEndian<quint32>(gmapPtr[g]);
+ if (glyphPos > glyphDataSize) {
+ if (glyphPos == 0xffffffff)
+ return 0;
+#if defined(DEBUG_FONTENGINE)
+ qDebug() << "glyph" << g << "outside of glyphData, remapping font file";
+#endif
+ if (glyphPos > glyphDataSize)
+ return 0;
+ }
+ return reinterpret_cast<const Glyph *>(fontData + glyphDataOffset + glyphPos);
+}
+
+bool QFontEngineQPA::verifyHeader(const uchar *data, int size)
+{
+ VERIFY(size >= int(sizeof(Header)));
+ const Header *header = reinterpret_cast<const Header *>(data);
+ if (header->magic[0] != 'Q'
+ || header->magic[1] != 'P'
+ || header->magic[2] != 'F'
+ || header->magic[3] != '2')
+ return false;
+
+ VERIFY(header->majorVersion <= CurrentMajorVersion);
+ const quint16 dataSize = qFromBigEndian<quint16>(header->dataSize);
+ VERIFY(size >= int(sizeof(Header)) + dataSize);
+
+ const uchar *tagPtr = data + sizeof(Header);
+ const uchar *tagEndPtr = tagPtr + dataSize;
+ while (tagPtr < tagEndPtr - 3) {
+ tagPtr = verifyTag(tagPtr, tagEndPtr);
+ VERIFY(tagPtr);
+ }
+
+ VERIFY(tagPtr <= tagEndPtr);
+ return true;
+}
+
+QVariant QFontEngineQPA::extractHeaderField(const uchar *data, HeaderTag requestedTag)
+{
+ const Header *header = reinterpret_cast<const Header *>(data);
+ const uchar *tagPtr = data + sizeof(Header);
+ const uchar *endPtr = tagPtr + qFromBigEndian<quint16>(header->dataSize);
+ while (tagPtr < endPtr - 3) {
+ quint16 tag = readValue<quint16>(tagPtr);
+ quint16 length = readValue<quint16>(tagPtr);
+ if (tag == requestedTag) {
+ switch (tagTypes[requestedTag]) {
+ case StringType:
+ return QVariant(QString::fromUtf8(reinterpret_cast<const char *>(tagPtr), length));
+ case UInt32Type:
+ return QVariant(readValue<quint32>(tagPtr));
+ case UInt8Type:
+ return QVariant(uint(*tagPtr));
+ case FixedType:
+ return QVariant(QFixed::fromFixed(readValue<quint32>(tagPtr)).toReal());
+ case BitFieldType:
+ return QVariant(QByteArray(reinterpret_cast<const char *>(tagPtr), length));
+ }
+ return QVariant();
+ } else if (tag == Tag_EndOfHeader) {
+ break;
+ }
+ tagPtr += length;
+ }
+
+ return QVariant();
+}
+
+
+
+static inline unsigned int getChar(const QChar *str, int &i, const int len)
+{
+ unsigned int uc = str[i].unicode();
+ if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) {
+ uint low = str[i+1].unicode();
+ if (low >= 0xdc00 && low < 0xe000) {
+ uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000;
+ ++i;
+ }
+ }
+ return uc;
+}
+
+QFontEngineQPA::QFontEngineQPA(const QFontDef &def, const QByteArray &data)
+ : fontData(reinterpret_cast<const uchar *>(data.constData())), dataSize(data.size())
+{
+ fontDef = def;
+ cache_cost = 100;
+ externalCMap = 0;
+ cmapOffset = 0;
+ cmapSize = 0;
+ glyphMapOffset = 0;
+ glyphMapEntries = 0;
+ glyphDataOffset = 0;
+ glyphDataSize = 0;
+ kerning_pairs_loaded = false;
+ readOnly = true;
+
+#if defined(DEBUG_FONTENGINE)
+ qDebug() << "QFontEngineQPA::QFontEngineQPA( fd =" << fd << ", renderingFontEngine =" << renderingFontEngine << ')';
+#endif
+
+ if (!verifyHeader(fontData, dataSize)) {
+#if defined(DEBUG_FONTENGINE)
+ qDebug() << "verifyHeader failed!";
+#endif
+ return;
+ }
+
+ const Header *header = reinterpret_cast<const Header *>(fontData);
+
+ readOnly = (header->lock == 0xffffffff);
+
+ const uchar *imgData = fontData + sizeof(Header) + qFromBigEndian<quint16>(header->dataSize);
+ const uchar *endPtr = fontData + dataSize;
+ while (imgData <= endPtr - 8) {
+ quint16 blockTag = readValue<quint16>(imgData);
+ imgData += 2; // skip padding
+ quint32 blockSize = readValue<quint32>(imgData);
+
+ if (blockTag == CMapBlock) {
+ cmapOffset = imgData - fontData;
+ cmapSize = blockSize;
+ } else if (blockTag == GMapBlock) {
+ glyphMapOffset = imgData - fontData;
+ glyphMapEntries = blockSize / 4;
+ } else if (blockTag == GlyphBlock) {
+ glyphDataOffset = imgData - fontData;
+ glyphDataSize = blockSize;
+ }
+
+ imgData += blockSize;
+ }
+
+ face_id.filename = QFile::encodeName(extractHeaderField(fontData, Tag_FileName).toString());
+ face_id.index = extractHeaderField(fontData, Tag_FileIndex).toInt();
+
+ // get the real cmap
+ if (cmapOffset) {
+ int tableSize = cmapSize;
+ const uchar *cmapPtr = getCMap(fontData + cmapOffset, tableSize, &symbol, &cmapSize);
+ if (cmapPtr)
+ cmapOffset = cmapPtr - fontData;
+ else
+ cmapOffset = 0;
+ } else if (externalCMap) {
+ int tableSize = cmapSize;
+ externalCMap = getCMap(externalCMap, tableSize, &symbol, &cmapSize);
+ }
+
+ // verify all the positions in the glyphMap
+ if (glyphMapOffset) {
+ const quint32 *gmapPtr = reinterpret_cast<const quint32 *>(fontData + glyphMapOffset);
+ for (uint i = 0; i < glyphMapEntries; ++i) {
+ quint32 glyphDataPos = qFromBigEndian<quint32>(gmapPtr[i]);
+ if (glyphDataPos == 0xffffffff)
+ continue;
+ if (glyphDataPos >= glyphDataSize) {
+ // error
+ glyphMapOffset = 0;
+ glyphMapEntries = 0;
+ break;
+ }
+ }
+ }
+
+#if defined(DEBUG_FONTENGINE)
+ if (!isValid())
+ qDebug() << "fontData" << fontData << "dataSize" << dataSize
+ << "externalCMap" << externalCMap << "cmapOffset" << cmapOffset
+ << "glyphMapOffset" << glyphMapOffset << "glyphDataOffset" << glyphDataOffset
+ << "fd" << fd << "glyphDataSize" << glyphDataSize;
+#endif
+}
+
+QFontEngineQPA::~QFontEngineQPA()
+{
+}
+
+bool QFontEngineQPA::getSfntTableData(uint tag, uchar *buffer, uint *length) const
+{
+ Q_UNUSED(tag);
+ Q_UNUSED(buffer);
+ *length = 0;
+ return false;
+}
+
+bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const
+{
+ if (*nglyphs < len) {
+ *nglyphs = len;
+ return false;
+ }
+
+#if defined(DEBUG_FONTENGINE)
+ QSet<QChar> seenGlyphs;
+#endif
+
+ const uchar *cmap = externalCMap ? externalCMap : (fontData + cmapOffset);
+
+ bool mirrored = flags & QTextEngine::RightToLeft;
+ int glyph_pos = 0;
+ if (symbol) {
+ for (int i = 0; i < len; ++i) {
+ unsigned int uc = getChar(str, i, len);
+ if (mirrored)
+ uc = QChar::mirroredChar(uc);
+ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
+ if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
+ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
+ ++glyph_pos;
+ }
+ } else {
+ for (int i = 0; i < len; ++i) {
+ unsigned int uc = getChar(str, i, len);
+ if (mirrored)
+ uc = QChar::mirroredChar(uc);
+ glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
+#if 0 && defined(DEBUG_FONTENGINE)
+ QChar c(uc);
+ if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c))
+ qDebug() << "glyph for character" << c << '/' << hex << uc << "is" << dec << glyphs[glyph_pos].glyph;
+
+ seenGlyphs.insert(c);
+#endif
+ ++glyph_pos;
+ }
+ }
+
+ *nglyphs = glyph_pos;
+ glyphs->numGlyphs = glyph_pos;
+ recalcAdvances(glyphs, flags);
+ return true;
+}
+
+void QFontEngineQPA::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags) const
+{
+ for (int i = 0; i < glyphs->numGlyphs; ++i) {
+ const Glyph *g = findGlyph(glyphs->glyphs[i]);
+ if (!g) {
+ glyphs->glyphs[i] = 0;
+ continue;
+ }
+ glyphs->advances_x[i] = g->advance;
+ glyphs->advances_y[i] = 0;
+ }
+}
+
+QImage QFontEngineQPA::alphaMapForGlyph(glyph_t g)
+{
+ const Glyph *glyph = findGlyph(g);
+ if (!glyph)
+ return QImage();
+
+ const uchar *bits = ((const uchar *) glyph) + sizeof(Glyph);
+
+ QImage image(bits,glyph->width, glyph->height, glyph->bytesPerLine, QImage::Format_Indexed8);
+
+ return image;
+}
+
+void QFontEngineQPA::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags)
+{
+ addBitmapFontToPath(x, y, glyphs, path, flags);
+}
+
+glyph_metrics_t QFontEngineQPA::boundingBox(const QGlyphLayout &glyphs)
+{
+ glyph_metrics_t overall;
+ // initialize with line height, we get the same behaviour on all platforms
+ overall.y = -ascent();
+ overall.height = ascent() + descent() + 1;
+
+ QFixed ymax = 0;
+ QFixed xmax = 0;
+ for (int i = 0; i < glyphs.numGlyphs; i++) {
+ const Glyph *g = findGlyph(glyphs.glyphs[i]);
+ if (!g)
+ continue;
+
+ QFixed x = overall.xoff + glyphs.offsets[i].x + g->x;
+ QFixed y = overall.yoff + glyphs.offsets[i].y + g->y;
+ overall.x = qMin(overall.x, x);
+ overall.y = qMin(overall.y, y);
+ xmax = qMax(xmax, x + g->width);
+ ymax = qMax(ymax, y + g->height);
+ overall.xoff += g->advance;
+ }
+ overall.height = qMax(overall.height, ymax - overall.y);
+ overall.width = xmax - overall.x;
+
+ return overall;
+}
+
+glyph_metrics_t QFontEngineQPA::boundingBox(glyph_t glyph)
+{
+ glyph_metrics_t overall;
+ const Glyph *g = findGlyph(glyph);
+ if (!g)
+ return overall;
+ overall.x = g->x;
+ overall.y = g->y;
+ overall.width = g->width;
+ overall.height = g->height;
+ overall.xoff = g->advance;
+ return overall;
+}
+
+QFixed QFontEngineQPA::ascent() const
+{
+ return QFixed::fromReal(extractHeaderField(fontData, Tag_Ascent).value<qreal>());
+}
+
+QFixed QFontEngineQPA::descent() const
+{
+ return QFixed::fromReal(extractHeaderField(fontData, Tag_Descent).value<qreal>());
+}
+
+QFixed QFontEngineQPA::leading() const
+{
+ return QFixed::fromReal(extractHeaderField(fontData, Tag_Leading).value<qreal>());
+}
+
+qreal QFontEngineQPA::maxCharWidth() const
+{
+ return extractHeaderField(fontData, Tag_MaxCharWidth).value<qreal>();
+}
+
+qreal QFontEngineQPA::minLeftBearing() const
+{
+ return extractHeaderField(fontData, Tag_MinLeftBearing).value<qreal>();
+}
+
+qreal QFontEngineQPA::minRightBearing() const
+{
+ return extractHeaderField(fontData, Tag_MinRightBearing).value<qreal>();
+}
+
+QFixed QFontEngineQPA::underlinePosition() const
+{
+ return QFixed::fromReal(extractHeaderField(fontData, Tag_UnderlinePosition).value<qreal>());
+}
+
+QFixed QFontEngineQPA::lineThickness() const
+{
+ return QFixed::fromReal(extractHeaderField(fontData, Tag_LineThickness).value<qreal>());
+}
+
+QFontEngine::Type QFontEngineQPA::type() const
+{
+ return QFontEngine::QPF2;
+}
+
+bool QFontEngineQPA::canRender(const QChar *string, int len)
+{
+ const uchar *cmap = externalCMap ? externalCMap : (fontData + cmapOffset);
+
+ if (symbol) {
+ for (int i = 0; i < len; ++i) {
+ unsigned int uc = getChar(string, i, len);
+ glyph_t g = getTrueTypeGlyphIndex(cmap, uc);
+ if(!g && uc < 0x100)
+ g = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
+ if (!g)
+ return false;
+ }
+ } else {
+ for (int i = 0; i < len; ++i) {
+ unsigned int uc = getChar(string, i, len);
+ if (!getTrueTypeGlyphIndex(cmap, uc))
+ return false;
+ }
+ }
+ return true;
+}
+
+bool QFontEngineQPA::isValid() const
+{
+ return fontData && dataSize && (cmapOffset || externalCMap)
+ && glyphMapOffset && glyphDataOffset && glyphDataSize > 0;
+}
+
+void QPAGenerator::generate()
+{
+ writeHeader();
+ writeGMap();
+ writeBlock(QFontEngineQPA::GlyphBlock, QByteArray());
+
+ dev->seek(4); // position of header.lock
+ writeUInt32(0);
+}
+
+void QPAGenerator::writeHeader()
+{
+ QFontEngineQPA::Header header;
+
+ header.magic[0] = 'Q';
+ header.magic[1] = 'P';
+ header.magic[2] = 'F';
+ header.magic[3] = '2';
+ header.lock = 1;
+ header.majorVersion = QFontEngineQPA::CurrentMajorVersion;
+ header.minorVersion = QFontEngineQPA::CurrentMinorVersion;
+ header.dataSize = 0;
+ dev->write((const char *)&header, sizeof(header));
+
+ writeTaggedString(QFontEngineQPA::Tag_FontName, fe->fontDef.family.toUtf8());
+
+ QFontEngine::FaceId face = fe->faceId();
+ writeTaggedString(QFontEngineQPA::Tag_FileName, face.filename);
+ writeTaggedUInt32(QFontEngineQPA::Tag_FileIndex, face.index);
+
+ {
+ uchar data[4];
+ uint len = 4;
+ bool ok = fe->getSfntTableData(MAKE_TAG('h', 'e', 'a', 'd'), data, &len);
+ if (ok) {
+ const quint32 revision = qFromBigEndian<quint32>(data);
+ writeTaggedUInt32(QFontEngineQPA::Tag_FontRevision, revision);
+ }
+ }
+
+ writeTaggedQFixed(QFontEngineQPA::Tag_Ascent, fe->ascent());
+ writeTaggedQFixed(QFontEngineQPA::Tag_Descent, fe->descent());
+ writeTaggedQFixed(QFontEngineQPA::Tag_Leading, fe->leading());
+ writeTaggedQFixed(QFontEngineQPA::Tag_XHeight, fe->xHeight());
+ writeTaggedQFixed(QFontEngineQPA::Tag_AverageCharWidth, fe->averageCharWidth());
+ writeTaggedQFixed(QFontEngineQPA::Tag_MaxCharWidth, QFixed::fromReal(fe->maxCharWidth()));
+ writeTaggedQFixed(QFontEngineQPA::Tag_LineThickness, fe->lineThickness());
+ writeTaggedQFixed(QFontEngineQPA::Tag_MinLeftBearing, QFixed::fromReal(fe->minLeftBearing()));
+ writeTaggedQFixed(QFontEngineQPA::Tag_MinRightBearing, QFixed::fromReal(fe->minRightBearing()));
+ writeTaggedQFixed(QFontEngineQPA::Tag_UnderlinePosition, fe->underlinePosition());
+ writeTaggedUInt8(QFontEngineQPA::Tag_PixelSize, fe->fontDef.pixelSize);
+ writeTaggedUInt8(QFontEngineQPA::Tag_Weight, fe->fontDef.weight);
+ writeTaggedUInt8(QFontEngineQPA::Tag_Style, fe->fontDef.style);
+
+ writeTaggedUInt8(QFontEngineQPA::Tag_GlyphFormat, QFontEngineQPA::AlphamapGlyphs);
+
+ writeTaggedString(QFontEngineQPA::Tag_EndOfHeader, QByteArray());
+ align4();
+
+ const quint64 size = dev->pos();
+ header.dataSize = qToBigEndian<quint16>(size - sizeof(header));
+ dev->seek(0);
+ dev->write((const char *)&header, sizeof(header));
+ dev->seek(size);
+}
+
+void QPAGenerator::writeGMap()
+{
+ const quint16 glyphCount = fe->glyphCount();
+
+ writeUInt16(QFontEngineQPA::GMapBlock);
+ writeUInt16(0); // padding
+ writeUInt32(glyphCount * 4);
+
+ QByteArray &buffer = dev->buffer();
+ const int numBytes = glyphCount * sizeof(quint32);
+ qint64 pos = buffer.size();
+ buffer.resize(pos + numBytes);
+ qMemSet(buffer.data() + pos, 0xff, numBytes);
+ dev->seek(pos + numBytes);
+}
+
+void QPAGenerator::writeBlock(QFontEngineQPA::BlockTag tag, const QByteArray &data)
+{
+ writeUInt16(tag);
+ writeUInt16(0); // padding
+ const int padSize = ((data.size() + 3) / 4) * 4 - data.size();
+ writeUInt32(data.size() + padSize);
+ dev->write(data);
+ for (int i = 0; i < padSize; ++i)
+ writeUInt8(0);
+}
+
+void QPAGenerator::writeTaggedString(QFontEngineQPA::HeaderTag tag, const QByteArray &string)
+{
+ writeUInt16(tag);
+ writeUInt16(string.length());
+ dev->write(string);
+}
+
+void QPAGenerator::writeTaggedUInt32(QFontEngineQPA::HeaderTag tag, quint32 value)
+{
+ writeUInt16(tag);
+ writeUInt16(sizeof(value));
+ writeUInt32(value);
+}
+
+void QPAGenerator::writeTaggedUInt8(QFontEngineQPA::HeaderTag tag, quint8 value)
+{
+ writeUInt16(tag);
+ writeUInt16(sizeof(value));
+ writeUInt8(value);
+}
+
+void QPAGenerator::writeTaggedQFixed(QFontEngineQPA::HeaderTag tag, QFixed value)
+{
+ writeUInt16(tag);
+ writeUInt16(sizeof(quint32));
+ writeUInt32(value.value());
+}
+
+
+/*
+ Creates a new multi QPA engine.
+
+ This function takes ownership of the QFontEngine, increasing it's refcount.
+*/
+QFontEngineMultiQPA::QFontEngineMultiQPA(QFontEngine *fe, int _script, const QStringList &fallbacks)
+ : QFontEngineMulti(fallbacks.size() + 1),
+ fallbackFamilies(fallbacks), script(_script)
+{
+ engines[0] = fe;
+ fe->ref.ref();
+ fontDef = engines[0]->fontDef;
+}
+
+void QFontEngineMultiQPA::loadEngine(int at)
+{
+ Q_ASSERT(at < engines.size());
+ Q_ASSERT(engines.at(at) == 0);
+
+ QFontDef request = fontDef;
+ request.styleStrategy |= QFont::NoFontMerging;
+ request.family = fallbackFamilies.at(at-1);
+ engines[at] = QFontDatabase::findFont(script,
+ /*fontprivate*/0,
+ request);
+ Q_ASSERT(engines[at]);
+ engines[at]->ref.ref();
+ engines[at]->fontDef = request;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/text/qfontengine_qpa_p.h b/src/gui/text/qfontengine_qpa_p.h
new file mode 100644
index 0000000..467fca6
--- /dev/null
+++ b/src/gui/text/qfontengine_qpa_p.h
@@ -0,0 +1,262 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFONTENGINE_QPA_P_H
+#define QFONTENGINE_QPA_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+#include <QtCore/qconfig.h>
+#include <QtCore/qglobal.h>
+#include <QtCore/qendian.h>
+#include <QtCore/QBuffer>
+
+#include "qfontengine_p.h"
+
+#include <QtCore/QFile>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QFontEngine;
+class QFreetypeFace;
+class QBuffer;
+
+class Q_GUI_EXPORT QFontEngineQPA : public QFontEngine
+{
+public:
+ // if you add new tags please make sure to update the tables in
+ // qpfutil.cpp and tools/makeqpf/qpf2.cpp
+ enum HeaderTag {
+ Tag_FontName, // 0 string
+ Tag_FileName, // 1 string
+ Tag_FileIndex, // 2 quint32
+ Tag_FontRevision, // 3 quint32
+ Tag_FreeText, // 4 string
+ Tag_Ascent, // 5 QFixed
+ Tag_Descent, // 6 QFixed
+ Tag_Leading, // 7 QFixed
+ Tag_XHeight, // 8 QFixed
+ Tag_AverageCharWidth, // 9 QFixed
+ Tag_MaxCharWidth, // 10 QFixed
+ Tag_LineThickness, // 11 QFixed
+ Tag_MinLeftBearing, // 12 QFixed
+ Tag_MinRightBearing, // 13 QFixed
+ Tag_UnderlinePosition, // 14 QFixed
+ Tag_GlyphFormat, // 15 quint8
+ Tag_PixelSize, // 16 quint8
+ Tag_Weight, // 17 quint8
+ Tag_Style, // 18 quint8
+ Tag_EndOfHeader, // 19 string
+ Tag_WritingSystems, // 20 bitfield
+
+ NumTags
+ };
+
+ enum TagType {
+ StringType,
+ FixedType,
+ UInt8Type,
+ UInt32Type,
+ BitFieldType
+ };
+
+ struct Tag
+ {
+ quint16 tag;
+ quint16 size;
+ };
+
+ enum GlyphFormat {
+ BitmapGlyphs = 1,
+ AlphamapGlyphs = 8
+ };
+
+ enum {
+ CurrentMajorVersion = 2,
+ CurrentMinorVersion = 0
+ };
+
+ // The CMap is identical to the TrueType CMap table format
+ // The GMap table is a normal array with the total number of
+ // covered glyphs in the TrueType font
+ enum BlockTag {
+ CMapBlock,
+ GMapBlock,
+ GlyphBlock
+ };
+
+ struct Q_PACKED Header
+ {
+ char magic[4]; // 'QPF2'
+ quint32 lock; // values: 0 = unlocked, 0xffffffff = read-only, otherwise qws client id of locking process
+ quint8 majorVersion;
+ quint8 minorVersion;
+ quint16 dataSize;
+ };
+
+ struct Q_PACKED Block
+ {
+ quint16 tag;
+ quint16 pad;
+ quint32 dataSize;
+ };
+
+ struct Q_PACKED Glyph
+ {
+ quint8 width;
+ quint8 height;
+ quint8 bytesPerLine;
+ qint8 x;
+ qint8 y;
+ qint8 advance;
+ };
+
+ QFontEngineQPA(const QFontDef &def, const QByteArray &data);
+ ~QFontEngineQPA();
+
+ FaceId faceId() const { return face_id; }
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
+
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const;
+ void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const;
+
+ void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags);
+ QImage alphaMapForGlyph(glyph_t t);
+
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs);
+ glyph_metrics_t boundingBox(glyph_t glyph);
+
+ QFixed ascent() const;
+ QFixed descent() const;
+ QFixed leading() const;
+ qreal maxCharWidth() const;
+ qreal minLeftBearing() const;
+ qreal minRightBearing() const;
+ QFixed underlinePosition() const;
+ QFixed lineThickness() const;
+
+ Type type() const;
+
+ bool canRender(const QChar *string, int len);
+ inline const char *name() const { return "QPF2"; }
+
+ virtual int glyphCount() const { return glyphMapEntries; }
+
+ bool isValid() const;
+
+ const Glyph *findGlyph(glyph_t g) const;
+
+ static bool verifyHeader(const uchar *data, int size);
+ static QVariant extractHeaderField(const uchar *data, HeaderTag tag);
+
+private:
+
+ const uchar *fontData;
+ int dataSize;
+ const uchar *externalCMap;
+ quint32 cmapOffset;
+ int cmapSize;
+ quint32 glyphMapOffset;
+ quint32 glyphMapEntries;
+ quint32 glyphDataOffset;
+ quint32 glyphDataSize;
+ QString internalFileName;
+ QString encodedFileName;
+ bool readOnly;
+
+ FaceId face_id;
+ QByteArray freetypeCMapTable;
+ mutable bool kerning_pairs_loaded;
+};
+
+struct QPAGenerator
+{
+ QPAGenerator(QBuffer *device, QFontEngine *engine)
+ : dev(device), fe(engine) {}
+
+ void generate();
+ void writeHeader();
+ void writeGMap();
+ void writeBlock(QFontEngineQPA::BlockTag tag, const QByteArray &data);
+
+ void writeTaggedString(QFontEngineQPA::HeaderTag tag, const QByteArray &string);
+ void writeTaggedUInt32(QFontEngineQPA::HeaderTag tag, quint32 value);
+ void writeTaggedUInt8(QFontEngineQPA::HeaderTag tag, quint8 value);
+ void writeTaggedQFixed(QFontEngineQPA::HeaderTag tag, QFixed value);
+
+ void writeUInt16(quint16 value) { value = qToBigEndian(value); dev->write((const char *)&value, sizeof(value)); }
+ void writeUInt32(quint32 value) { value = qToBigEndian(value); dev->write((const char *)&value, sizeof(value)); }
+ void writeUInt8(quint8 value) { dev->write((const char *)&value, sizeof(value)); }
+ void writeInt8(qint8 value) { dev->write((const char *)&value, sizeof(value)); }
+
+ void align4() { while (dev->pos() & 3) { dev->putChar('\0'); } }
+
+ QBuffer *dev;
+ QFontEngine *fe;
+};
+
+class QFontEngineMultiQPA : public QFontEngineMulti
+{
+public:
+ QFontEngineMultiQPA(QFontEngine *fe, int script, const QStringList &fallbacks);
+
+ void loadEngine(int at);
+
+private:
+ QStringList fallbackFamilies;
+ int script;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QFONTENGINE_QPA_P_H
diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp
index e9dcfa0..134c1ed 100644
--- a/src/gui/text/qfontengine_s60.cpp
+++ b/src/gui/text/qfontengine_s60.cpp
@@ -41,6 +41,7 @@
#include "qfontengine_s60_p.h"
#include "qtextengine_p.h"
+#include "qendian.h"
#include "qglobal.h"
#include <private/qapplication_p.h>
#include "qimage.h"
@@ -177,6 +178,24 @@ CFont *QSymbianTypeFaceExtras::fontOwner() const
return m_cFont;
}
+QFixed QSymbianTypeFaceExtras::unitsPerEm() const
+{
+ if (m_unitsPerEm.value() != 0)
+ return m_unitsPerEm;
+ const QByteArray head = getSfntTable(MAKE_TAG('h', 'e', 'a', 'd'));
+ const int unitsPerEmOffset = 18;
+ if (head.size() > unitsPerEmOffset + sizeof(quint16)) {
+ const uchar* tableData = reinterpret_cast<const uchar*>(head.constData());
+ const uchar* unitsPerEm = tableData + unitsPerEmOffset;
+ m_unitsPerEm = qFromBigEndian<quint16>(unitsPerEm);
+ } else {
+ // Bitmap font? Corrupt font?
+ // We return -1 and let the QFontEngineS60 return the pixel size.
+ m_unitsPerEm = -1;
+ }
+ return m_unitsPerEm;
+}
+
// duplicated from qfontengine_xyz.cpp
static inline unsigned int getChar(const QChar *str, int &i, const int len)
{
@@ -249,6 +268,13 @@ QFontEngineS60::~QFontEngineS60()
releaseFont(m_scaledFont);
}
+QFixed QFontEngineS60::emSquareSize() const
+{
+ const QFixed unitsPerEm = m_extras->unitsPerEm();
+ return unitsPerEm.toInt() == -1 ?
+ QFixed::fromReal(m_originalFontSizeInPixels) : unitsPerEm;
+}
+
bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const
{
if (*nglyphs < len) {
@@ -278,10 +304,13 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout
void QFontEngineS60::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const
{
Q_UNUSED(flags);
+ TOpenFontCharMetrics metrics;
+ const TUint8 *glyphBitmapBytes;
+ TSize glyphBitmapSize;
for (int i = 0; i < glyphs->numGlyphs; i++) {
- const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]);
- glyphs->advances_x[i] = bbox.xoff;
- glyphs->advances_y[i] = bbox.yoff;
+ getCharacterData(glyphs->glyphs[i], metrics, glyphBitmapBytes, glyphBitmapSize);
+ glyphs->advances_x[i] = metrics.HorizAdvance();
+ glyphs->advances_y[i] = 0;
}
}
@@ -309,6 +338,7 @@ void QFontEngineS60::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions,
parseGlyphPathData(outlineChar, outlineEnd, *path, fontSizeInPixels,
positions[count++].toPointF(), false);
} while(KErrNone == iterator.Next() && count <= nglyphs);
+ iterator.Close();
#else // Q_SYMBIAN_HAS_GLYPHOUTLINE_API
QFontEngine::addGlyphsToPath(glyphs, positions, nglyphs, path, flags);
#endif //Q_SYMBIAN_HAS_GLYPHOUTLINE_API
@@ -316,29 +346,17 @@ void QFontEngineS60::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions,
QImage QFontEngineS60::alphaMapForGlyph(glyph_t glyph)
{
+ // Note: On some Symbian versions (apparently <= Symbian^1), this
+ // function will return gray values 0x00, 0x10 ... 0xe0, 0xf0 due
+ // to a bug. The glyphs are nowhere perfectly opaque.
+ // This has been fixed for Symbian^3.
+
TOpenFontCharMetrics metrics;
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
getCharacterData(glyph, metrics, glyphBitmapBytes, glyphBitmapSize);
QImage result(glyphBitmapBytes, glyphBitmapSize.iWidth, glyphBitmapSize.iHeight, glyphBitmapSize.iWidth, QImage::Format_Indexed8);
result.setColorTable(grayPalette());
-
- // The above setColorTable() call detached the image data anyway, so why not shape tha data a bit, while we can.
- // CFont::GetCharacterData() returns 8-bit data that obviously was 4-bit data before, and converted to 8-bit incorrectly.
- // The data values are 0x00, 0x10 ... 0xe0, 0xf0. So, a real opaque 0xff is never reached, which we get punished
- // for every time we want to blit this glyph in the raster paint engine.
- // "Fix" is to convert all 0xf0 to 0xff. Is fine, quality wise, and I assume faster than correcting all values.
- // Blitting is however, evidentially faster now.
- const int bpl = result.bytesPerLine();
- for (int row = 0; row < result.height(); ++row) {
- uchar *scanLine = result.scanLine(row);
- for (int column = 0; column < bpl; ++column) {
- if (*scanLine == 0xf0)
- *scanLine = 0xff;
- scanLine++;
- }
- }
-
return result;
}
@@ -360,13 +378,11 @@ glyph_metrics_t QFontEngineS60::boundingBox_const(glyph_t glyph) const
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
getCharacterData(glyph, metrics, glyphBitmapBytes, glyphBitmapSize);
- TRect glyphBounds;
- metrics.GetHorizBounds(glyphBounds);
const glyph_metrics_t result(
- glyphBounds.iTl.iX,
- glyphBounds.iTl.iY,
- glyphBounds.Width(),
- glyphBounds.Height(),
+ metrics.HorizBearingX(),
+ -metrics.HorizBearingY(),
+ metrics.Width(),
+ metrics.Height(),
metrics.HorizAdvance(),
0
);
diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h
index d05c23c..c65ce55 100644
--- a/src/gui/text/qfontengine_s60_p.h
+++ b/src/gui/text/qfontengine_s60_p.h
@@ -82,11 +82,13 @@ public:
const uchar *cmap() const;
CFont *fontOwner() const;
bool isSymbolCMap() const;
+ QFixed unitsPerEm() const;
private:
CFont* m_cFont;
mutable bool m_symbolCMap;
mutable QByteArray m_cmapTable;
+ mutable QFixed m_unitsPerEm;
#ifndef Q_SYMBIAN_HAS_FONTTABLE_API
COpenFont *m_openFont;
mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
@@ -99,6 +101,7 @@ public:
QFontEngineS60(const QFontDef &fontDef, const QSymbianTypeFaceExtras *extras);
~QFontEngineS60();
+ QFixed emSquareSize() const;
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const;
void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const;
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index a941dab..cf4fbda 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -1209,7 +1209,7 @@ QImage QFontEngineWin::alphaMapForGlyph(glyph_t glyph, const QTransform &xform)
QImage indexed(mask->width(), mask->height(), QImage::Format_Indexed8);
- // ### This part is kinda pointless, but we'll crash later if we dont because some
+ // ### This part is kinda pointless, but we'll crash later if we don't because some
// code paths expects there to be colortables for index8-bit...
QVector<QRgb> colors(256);
for (int i=0; i<256; ++i)
diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp
index e49f5b4..2283358 100644
--- a/src/gui/text/qfontsubset.cpp
+++ b/src/gui/text/qfontsubset.cpp
@@ -697,7 +697,7 @@ static QTtfTable generateHead(const qttf_head_table &head)
// Bits 5-10: These should be set according to Apple's specification . However, they are not implemented in OpenType.
// Bit 11: Font data is 'lossless,' as a result of having been compressed and decompressed with the Agfa MicroType Express engine.
// Bit 12: Font converted (produce compatible metrics)
-// Bit 13: Font optimised for ClearType
+// Bit 13: Font optimized for ClearType
// Bit 14: Reserved, set to 0
// Bit 15: Reserved, set to 0
<< quint16(0)
@@ -1008,7 +1008,7 @@ static void convertPath(const QPainterPath &path, QList<TTF_POINT> *points, QLis
np.x = (i1_x + i2_x) >> 1;
np.y = (i1_y + i2_y) >> 1;
if (try_reduce) {
- // see if we can optimise out the last onCurve point
+ // see if we can optimize out the last onCurve point
int mx = (points->at(points->size() - 2).x + base[2].x) >> 1;
int my = (points->at(points->size() - 2).y + base[2].y) >> 1;
if (qAbs(mx - base[3].x) <= split_limit && qAbs(my = base[3].y) <= split_limit)
diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp
new file mode 100644
index 0000000..370c921
--- /dev/null
+++ b/src/gui/text/qplatformfontdatabase_qpa.cpp
@@ -0,0 +1,241 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformfontdatabase_qpa.h"
+#include <QtGui/private/qfontengine_p.h>
+#include <QtGui/private/qfontengine_qpa_p.h>
+#include <QtCore/QLibraryInfo>
+#include <QtCore/QDir>
+
+QT_BEGIN_NAMESPACE
+
+extern void qt_registerFont(const QString &familyname, const QString &foundryname, int weight,
+ QFont::Style style, int stretch, bool antialiased,bool scalable, int pixelSize,
+ const QSupportedWritingSystems &writingSystems, void *hanlde);
+
+void QPlatformFontDatabase::registerQPF2Font(const QByteArray &dataArray, void *handle)
+{
+ if (dataArray.size() == 0)
+ return;
+
+ const uchar *data = reinterpret_cast<const uchar *>(dataArray.constData());
+ if (QFontEngineQPA::verifyHeader(data, dataArray.size())) {
+ QString fontName = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_FontName).toString();
+ int pixelSize = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_PixelSize).toInt();
+ QVariant weight = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_Weight);
+ QVariant style = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_Style);
+ QByteArray writingSystemBits = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_WritingSystems).toByteArray();
+
+ if (!fontName.isEmpty() && pixelSize) {
+ int fontWeight = 50;
+ if (weight.type() == QVariant::Int || weight.type() == QVariant::UInt)
+ fontWeight = weight.toInt();
+
+ QFont::Style fontStyle = static_cast<QFont::Style>(style.toInt());
+
+ QSupportedWritingSystems writingSystems;
+ for (int i = 0; i < writingSystemBits.count(); ++i) {
+ uchar currentByte = writingSystemBits.at(i);
+ for (int j = 0; j < 8; ++j) {
+ if (currentByte & 1)
+ writingSystems.setSupported(QFontDatabase::WritingSystem(i * 8 + j));
+ currentByte >>= 1;
+ }
+ }
+
+ registerFont(fontName,QString(),fontWeight,fontStyle,100,true,false,pixelSize,writingSystems,handle);
+ }
+ } else {
+ qDebug() << "header verification of QPF2 font failed. maybe it is corrupt?";
+ }
+}
+
+void QPlatformFontDatabase::registerFont(const QString &familyname, const QString &foundryname, int weight,
+ QFont::Style style, int stretch, bool antialiased, bool scalable, int pixelSize,
+ const QSupportedWritingSystems &writingSystems, void *usrPtr)
+{
+ if (scalable)
+ pixelSize = 0;
+ qt_registerFont(familyname,foundryname,weight,style,stretch,antialiased,scalable,pixelSize,writingSystems,usrPtr);
+}
+
+class QWritingSystemsPrivate
+{
+public:
+ QWritingSystemsPrivate()
+ : ref(1)
+ , vector(QFontDatabase::WritingSystemsCount,false)
+ {
+ }
+
+ QWritingSystemsPrivate(const QWritingSystemsPrivate *other)
+ : ref(1)
+ , vector(other->vector)
+ {
+ }
+
+ QAtomicInt ref;
+ QVector<bool> vector;
+};
+
+QSupportedWritingSystems::QSupportedWritingSystems()
+{
+ d = new QWritingSystemsPrivate;
+}
+
+QSupportedWritingSystems::QSupportedWritingSystems(const QSupportedWritingSystems &other)
+{
+ d = other.d;
+ d->ref.ref();
+}
+
+QSupportedWritingSystems &QSupportedWritingSystems::operator=(const QSupportedWritingSystems &other)
+{
+ if (d != other.d) {
+ other.d->ref.ref();
+ if (!d->ref.deref())
+ delete d;
+ d = other.d;
+ }
+ return *this;
+}
+
+QSupportedWritingSystems::~QSupportedWritingSystems()
+{
+ if (!d->ref.deref())
+ delete d;
+}
+
+void QSupportedWritingSystems::detach()
+{
+ if (d->ref != 1) {
+ QWritingSystemsPrivate *newd = new QWritingSystemsPrivate(d);
+ if (!d->ref.deref())
+ delete d;
+ d = newd;
+ }
+}
+
+void QSupportedWritingSystems::setSupported(QFontDatabase::WritingSystem writingSystem, bool support)
+{
+ detach();
+ d->vector[writingSystem] = support;
+}
+
+bool QSupportedWritingSystems::supported(QFontDatabase::WritingSystem writingSystem) const
+{
+ return d->vector.at(writingSystem);
+}
+
+void QPlatformFontDatabase::populateFontDatabase()
+{
+ QString fontpath = fontDir();
+
+ if(!QFile::exists(fontpath)) {
+ qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?",
+ qPrintable(fontpath));
+ }
+
+ QDir dir(fontpath);
+ dir.setNameFilters(QStringList() << QLatin1String("*.qpf2"));
+ dir.refresh();
+ for (int i = 0; i < int(dir.count()); ++i) {
+ const QByteArray fileName = QFile::encodeName(dir.absoluteFilePath(dir[i]));
+ QFile file(QString::fromLocal8Bit(fileName));
+ if (file.open(QFile::ReadOnly)) {
+ const QByteArray fileData = file.readAll();
+ QByteArray *fileDataPtr = new QByteArray(fileData);
+ registerQPF2Font(fileData, fileDataPtr);
+ }
+ }
+}
+
+QFontEngine *QPlatformFontDatabase::fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle)
+{
+ Q_UNUSED(script);
+ Q_UNUSED(handle);
+ QByteArray *fileDataPtr = static_cast<QByteArray *>(handle);
+ QFontEngineQPA *engine = new QFontEngineQPA(fontDef,*fileDataPtr);
+ qDebug() << fontDef.pixelSize << fontDef.weight << fontDef.style << fontDef.stretch << fontDef.styleHint << fontDef.styleStrategy << fontDef.family << script;
+ return engine;
+}
+
+QStringList QPlatformFontDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const
+{
+ Q_UNUSED(family);
+ Q_UNUSED(style);
+ Q_UNUSED(script);
+ return QStringList();
+}
+
+/*!
+ Adds an application font. Returns a list of family names, or an empty list if the font could
+ not be added
+*/
+QStringList QPlatformFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName)
+{
+ Q_UNUSED(fontData);
+ Q_UNUSED(fileName);
+
+ qWarning("This plugin does not support application fonts");
+ return QStringList();
+}
+
+void QPlatformFontDatabase::releaseHandle(void *handle)
+{
+ QByteArray *fileDataPtr = static_cast<QByteArray *>(handle);
+ delete fileDataPtr;
+}
+
+QString QPlatformFontDatabase::fontDir() const
+{
+ QString fontpath = QString::fromLocal8Bit(qgetenv("QT_QPA_FONTDIR"));
+ if (fontpath.isEmpty()) {
+#ifndef QT_NO_SETTINGS
+ fontpath = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
+ fontpath += QLatin1String("/fonts");
+#endif
+ }
+
+ return fontpath;
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h
new file mode 100644
index 0000000..75b0a18
--- /dev/null
+++ b/src/gui/text/qplatformfontdatabase_qpa.h
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMFONTDATABASE_QPA_H
+#define QPLATFORMFONTDATABASE_QPA_H
+
+#include <QtCore/qconfig.h>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QList>
+#include <QtGui/QFontDatabase>
+#include <QtGui/private/qfont_p.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QWritingSystemsPrivate;
+
+class Q_GUI_EXPORT QSupportedWritingSystems
+{
+public:
+
+ QSupportedWritingSystems();
+ QSupportedWritingSystems(const QSupportedWritingSystems &other);
+ QSupportedWritingSystems &operator=(const QSupportedWritingSystems &other);
+ ~QSupportedWritingSystems();
+
+ void setSupported(QFontDatabase::WritingSystem, bool supported = true);
+ bool supported(QFontDatabase::WritingSystem) const;
+
+private:
+ void detach();
+
+ QWritingSystemsPrivate *d;
+
+ friend Q_GUI_EXPORT bool operator==(const QSupportedWritingSystems &, const QSupportedWritingSystems &);
+ friend Q_GUI_EXPORT bool operator!=(const QSupportedWritingSystems &, const QSupportedWritingSystems &);
+};
+
+Q_GUI_EXPORT bool operator==(const QSupportedWritingSystems &, const QSupportedWritingSystems &);
+Q_GUI_EXPORT bool operator!=(const QSupportedWritingSystems &, const QSupportedWritingSystems &);
+
+class QFontRequestPrivate;
+
+class Q_GUI_EXPORT QPlatformFontDatabase
+{
+public:
+ virtual void populateFontDatabase();
+ virtual QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle);
+ virtual QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const;
+ virtual QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName);
+ virtual void releaseHandle(void *handle);
+
+ virtual QString fontDir() const;
+
+ //callback
+ static void registerQPF2Font(const QByteArray &dataArray, void *handle);
+ static void registerFont(const QString &familyname, const QString &foundryname, int weight,
+ QFont::Style style, int stetch, bool antialiased, bool scalable, int pixelSize,
+ const QSupportedWritingSystems &writingSystems, void *handle);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QPLATFORMFONTDATABASE_QPA_H
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index 9506006..edf248a 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -445,7 +445,7 @@ namespace {
const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
QStaticTextItem currentItem;
- currentItem.fontEngine = ti.fontEngine;
+ currentItem.setFontEngine(ti.fontEngine);
currentItem.font = ti.font();
currentItem.charOffset = m_chars.size();
currentItem.numChars = ti.num_chars;
@@ -713,4 +713,24 @@ void QStaticTextPrivate::init()
needsRelayout = false;
}
+QStaticTextItem::~QStaticTextItem()
+{
+ if (m_userData != 0 && !m_userData->ref.deref())
+ delete m_userData;
+ if (!m_fontEngine->ref.deref())
+ delete m_fontEngine;
+}
+
+void QStaticTextItem::setFontEngine(QFontEngine *fe)
+{
+ if (m_fontEngine != 0) {
+ if (!m_fontEngine->ref.deref())
+ delete m_fontEngine;
+ }
+
+ m_fontEngine = fe;
+ if (m_fontEngine != 0)
+ m_fontEngine->ref.ref();
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h
index cb60626..87ef0d5 100644
--- a/src/gui/text/qstatictext_p.h
+++ b/src/gui/text/qstatictext_p.h
@@ -68,27 +68,60 @@ public:
OpenGLUserData
};
- QStaticTextUserData(Type t) : type(t) {}
+ QStaticTextUserData(Type t) : type(t) { ref = 0; }
virtual ~QStaticTextUserData() {}
+ QAtomicInt ref;
Type type;
};
class Q_GUI_EXPORT QStaticTextItem
{
public:
- QStaticTextItem() : chars(0), numChars(0), fontEngine(0), userData(0),
- useBackendOptimizations(false), userDataNeedsUpdate(0) {}
- ~QStaticTextItem() { delete userData; }
+ QStaticTextItem() : chars(0), numChars(0), useBackendOptimizations(false),
+ userDataNeedsUpdate(0), m_fontEngine(0), m_userData(0) {}
+
+ QStaticTextItem(const QStaticTextItem &other)
+ {
+ operator=(other);
+ }
+
+ void operator=(const QStaticTextItem &other)
+ {
+ glyphPositions = other.glyphPositions;
+ glyphs = other.glyphs;
+ chars = other.chars;
+ numGlyphs = other.numGlyphs;
+ numChars = other.numChars;
+ font = other.font;
+ color = other.color;
+ useBackendOptimizations = other.useBackendOptimizations;
+ userDataNeedsUpdate = other.userDataNeedsUpdate;
+
+ m_fontEngine = 0;
+ m_userData = 0;
+ setUserData(other.userData());
+ setFontEngine(other.fontEngine());
+ }
+
+ ~QStaticTextItem();
void setUserData(QStaticTextUserData *newUserData)
{
- if (userData == newUserData)
+ if (m_userData == newUserData)
return;
- delete userData;
- userData = newUserData;
+ if (m_userData != 0 && !m_userData->ref.deref())
+ delete m_userData;
+
+ m_userData = newUserData;
+ if (m_userData != 0)
+ m_userData->ref.ref();
}
+ QStaticTextUserData *userData() const { return m_userData; }
+
+ void setFontEngine(QFontEngine *fe);
+ QFontEngine *fontEngine() const { return m_fontEngine; }
union {
QFixedPoint *glyphPositions; // 8 bytes per glyph
@@ -108,14 +141,17 @@ public:
// 12 bytes for pointers
int numGlyphs; // 4 bytes per item
int numChars; // 4 bytes per item
- QFontEngine *fontEngine; // 4 bytes per item
QFont font; // 8 bytes per item
QColor color; // 10 bytes per item
- QStaticTextUserData *userData; // 8 bytes per item
char useBackendOptimizations : 1; // 1 byte per item
char userDataNeedsUpdate : 1; //
// ================
// 51 bytes per item
+
+private: // Needs special handling in setters, so private to avoid abuse
+ QFontEngine *m_fontEngine; // 4 bytes per item
+ QStaticTextUserData *m_userData; // 8 bytes per item
+
};
class QStaticText;
diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index d0f71ae..334246b 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -64,6 +64,7 @@
#include "qgraphicssceneevent.h"
#include "qprinter.h"
#include "qtextdocumentwriter.h"
+#include "private/qtextcursor_p.h"
#include <qtextformat.h>
#include <qdatetime.h>
@@ -1904,6 +1905,8 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
}
layout->setAdditionalFormats(overrides);
cursor.endEditBlock();
+ if (cursor.d)
+ cursor.d->setX();
}
QVariant QTextControl::inputMethodQuery(Qt::InputMethodQuery property) const
diff --git a/src/gui/text/qtextcursor.h b/src/gui/text/qtextcursor.h
index 251cb33..d34ee4e 100644
--- a/src/gui/text/qtextcursor.h
+++ b/src/gui/text/qtextcursor.h
@@ -230,6 +230,7 @@ private:
QSharedDataPointer<QTextCursorPrivate> d;
friend class QTextDocumentFragmentPrivate;
friend class QTextCopyHelper;
+ friend class QTextControlPrivate;
};
QT_END_NAMESPACE
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index 3aa6795..496accd 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -2612,8 +2612,8 @@ void QTextHtmlExporter::emitBlock(const QTextBlock &block)
if (format.hasProperty(QTextFormat::ListNumberPrefix)) {
QString numberPrefix = format.numberPrefix();
- numberPrefix.replace('"', "\\22");
- numberPrefix.replace('\'', "\\27"); // FIXME: There's a problem in the CSS parser the prevents this from being correctly restored
+ numberPrefix.replace(QLatin1Char('"'), QLatin1String("\\22"));
+ numberPrefix.replace(QLatin1Char('\''), QLatin1String("\\27")); // FIXME: There's a problem in the CSS parser the prevents this from being correctly restored
styleString += QLatin1String(" -qt-list-number-prefix: ");
styleString += QLatin1Char('\'');
styleString += numberPrefix;
@@ -2624,8 +2624,8 @@ void QTextHtmlExporter::emitBlock(const QTextBlock &block)
if (format.hasProperty(QTextFormat::ListNumberSuffix)) {
if (format.numberSuffix() != QLatin1String(".")) { // this is our default
QString numberSuffix = format.numberSuffix();
- numberSuffix.replace('"', "\\22");
- numberSuffix.replace('\'', "\\27"); // see above
+ numberSuffix.replace(QLatin1Char('"'), QLatin1String("\\22"));
+ numberSuffix.replace(QLatin1Char('\''), QLatin1String("\\27")); // see above
styleString += QLatin1String(" -qt-list-number-suffix: ");
styleString += QLatin1Char('\'');
styleString += numberSuffix;
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
index 213db7e..0bdd20d 100644
--- a/src/gui/text/qtextdocument_p.cpp
+++ b/src/gui/text/qtextdocument_p.cpp
@@ -320,7 +320,7 @@ void QTextDocumentPrivate::setLayout(QAbstractTextDocumentLayout *layout)
void QTextDocumentPrivate::insert_string(int pos, uint strPos, uint length, int format, QTextUndoCommand::Operation op)
{
- // ##### optimise when only appending to the fragment!
+ // ##### optimize when only appending to the fragment!
Q_ASSERT(noBlockInString(text.mid(strPos, length)));
split(pos);
@@ -1446,7 +1446,7 @@ void QTextDocumentPrivate::clearFrame(QTextFrame *f)
void QTextDocumentPrivate::scan_frames(int pos, int charsRemoved, int charsAdded)
{
- // ###### optimise
+ // ###### optimize
Q_UNUSED(pos);
Q_UNUSED(charsRemoved);
Q_UNUSED(charsAdded);
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 34d9fa6..06eed55 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -612,7 +612,7 @@ static bool bidiItemize(QTextEngine *engine, QScriptAnalysis *analysis, QBidiCon
} else {
eor = current;
}
- dir = QChar::DirON; status.eor = QChar::DirAN;
+ dir = QChar::DirAN; status.eor = QChar::DirAN;
break;
case QChar::DirCS:
if(status.eor == QChar::DirAN) {
@@ -1976,9 +1976,11 @@ void QTextEngine::justify(const QScriptLine &line)
if (kashida_pos >= 0) {
// qDebug("kashida position at %d in word", kashida_pos);
set(&justificationPoints[nPoints], kashida_type, g.mid(kashida_pos), fontEngine(si));
- minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
- maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
- ++nPoints;
+ if (justificationPoints[nPoints].kashidaWidth > 0) {
+ minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
+ maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
+ ++nPoints;
+ }
}
kashida_pos = -1;
kashida_type = HB_Arabic_Normal;
@@ -2002,9 +2004,11 @@ void QTextEngine::justify(const QScriptLine &line)
}
if (kashida_pos >= 0) {
set(&justificationPoints[nPoints], kashida_type, g.mid(kashida_pos), fontEngine(si));
- minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
- maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
- ++nPoints;
+ if (justificationPoints[nPoints].kashidaWidth > 0) {
+ minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
+ maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
+ ++nPoints;
+ }
}
}
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index fad6c3b2..dad5371 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1687,7 +1687,7 @@ void QTextLine::setLineWidth(qreal width)
if (line.length
&& line.textWidth <= line.width
&& line.from + line.length == eng->layoutData->string.length())
- // no need to do anything if the line is already layouted and the last one. This optimisation helps
+ // no need to do anything if the line is already layouted and the last one. This optimization helps
// when using things in a single line layout.
return;
line.length = 0;
diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri
index 102df4d..0040b54 100644
--- a/src/gui/text/text.pri
+++ b/src/gui/text/text.pri
@@ -25,7 +25,7 @@ HEADERS += \
text/qabstracttextdocumentlayout.h \
text/qtextdocumentlayout_p.h \
text/qtextcursor.h \
- text/qtextcursor_p.h \
+ text/qtextcursor_p.h \
text/qtextdocumentfragment.h \
text/qtextdocumentfragment_p.h \
text/qtextimagehandler_p.h \
@@ -92,7 +92,7 @@ unix:x11 {
text/qfontengine_ft.cpp
}
-!embedded:!x11:mac {
+!embedded:!qpa:!x11:mac {
SOURCES += \
text/qfont_mac.cpp
OBJECTIVE_SOURCES += text/qfontengine_mac.mm
@@ -113,6 +113,19 @@ embedded {
DEFINES += QT_NO_FONTCONFIG
}
+qpa {
+ SOURCES += \
+ text/qfont_qpa.cpp \
+ text/qfontengine_qpa.cpp \
+ text/qplatformfontdatabase_qpa.cpp
+
+ HEADERS += \
+ text/qplatformfontdatabase_qpa.h
+
+ DEFINES += QT_NO_FONTCONFIG
+ DEFINES += QT_NO_FREETYPE
+}
+
symbian {
SOURCES += \
text/qfont_s60.cpp
@@ -132,6 +145,7 @@ symbian {
}
}
+!qpa {
contains(QT_CONFIG, freetype) {
SOURCES += \
../3rdparty/freetype/src/base/ftbase.c \
@@ -205,6 +219,7 @@ contains(QT_CONFIG, freetype) {
contains(QT_CONFIG, fontconfig) {
CONFIG += opentype
}
+}#!qpa
DEFINES += QT_NO_OPENTYPE
INCLUDEPATH += ../3rdparty/harfbuzz/src
diff --git a/src/gui/util/qcompleter.cpp b/src/gui/util/qcompleter.cpp
index e718212..71a0171 100644
--- a/src/gui/util/qcompleter.cpp
+++ b/src/gui/util/qcompleter.cpp
@@ -220,7 +220,7 @@ QModelIndex QCompletionModel::mapToSource(const QModelIndex& index) const
{
Q_D(const QCompletionModel);
if (!index.isValid())
- return QModelIndex();
+ return engine->curParent;
int row;
QModelIndex parent = engine->curParent;
@@ -782,7 +782,8 @@ QMatchData QUnsortedModelEngine::filter(const QString& part, const QModelIndex&
///////////////////////////////////////////////////////////////////////////////
QCompleterPrivate::QCompleterPrivate()
: widget(0), proxy(0), popup(0), cs(Qt::CaseSensitive), role(Qt::EditRole), column(0),
- maxVisibleItems(7), sorting(QCompleter::UnsortedModel), wrap(true), eatFocusOut(true)
+ maxVisibleItems(7), sorting(QCompleter::UnsortedModel), wrap(true), eatFocusOut(true),
+ hiddenBecauseNoMatch(false)
{
}
@@ -921,12 +922,14 @@ void QCompleterPrivate::showPopup(const QRect& rect)
void QCompleterPrivate::_q_fileSystemModelDirectoryLoaded(const QString &path)
{
Q_Q(QCompleter);
-#ifndef QT_NO_LINEEDIT
- QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget);
- //the path given by QFileSystemModel does not end with /
- if (lineEdit && !lineEdit->text().isEmpty() && !q->completionPrefix().isEmpty() && q->completionPrefix() != path + QLatin1Char('/'))
+ // Slot called when QFileSystemModel has finished loading.
+ // If we hide the popup because there was no match because the model was not loaded yet,
+ // we re-start the completion when we get the results
+ if (hiddenBecauseNoMatch
+ && prefix.startsWith(path) && prefix != (path + '/')
+ && widget) {
q->complete();
-#endif
+ }
}
/*!
@@ -1200,6 +1203,7 @@ bool QCompleter::eventFilter(QObject *o, QEvent *e)
Q_D(QCompleter);
if (d->eatFocusOut && o == d->widget && e->type() == QEvent::FocusOut) {
+ d->hiddenBecauseNoMatch = false;
if (d->popup && d->popup->isVisible())
return true;
}
@@ -1378,6 +1382,7 @@ void QCompleter::complete(const QRect& rect)
{
Q_D(QCompleter);
QModelIndex idx = d->proxy->currentIndex(false);
+ d->hiddenBecauseNoMatch = false;
if (d->mode == QCompleter::InlineCompletion) {
if (idx.isValid())
d->_q_complete(idx, true);
@@ -1389,6 +1394,7 @@ void QCompleter::complete(const QRect& rect)
|| (d->mode == QCompleter::UnfilteredPopupCompletion && d->proxy->rowCount() == 0)) {
if (d->popup)
d->popup->hide(); // no suggestion, hide
+ d->hiddenBecauseNoMatch = true;
return;
}
diff --git a/src/gui/util/qcompleter_p.h b/src/gui/util/qcompleter_p.h
index 8f00793..19b76e5 100644
--- a/src/gui/util/qcompleter_p.h
+++ b/src/gui/util/qcompleter_p.h
@@ -93,6 +93,7 @@ public:
bool eatFocusOut;
QRect popupRect;
+ bool hiddenBecauseNoMatch;
void showPopup(const QRect&);
void _q_complete(QModelIndex, bool = false);
diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp
index 8b36b32..39a160e 100644
--- a/src/gui/util/qdesktopservices.cpp
+++ b/src/gui/util/qdesktopservices.cpp
@@ -45,7 +45,7 @@
#include <qdebug.h>
-#if defined(Q_WS_QWS)
+#if defined(Q_WS_QWS) || defined(Q_WS_QPA)
#include "qdesktopservices_qws.cpp"
#elif defined(Q_WS_X11)
#include "qdesktopservices_x11.cpp"
diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri
index bea520e..af6218a 100644
--- a/src/gui/util/util.pri
+++ b/src/gui/util/util.pri
@@ -33,12 +33,12 @@ unix:x11 {
util/qsystemtrayicon_x11.cpp
}
-embedded {
+embedded|qpa {
SOURCES += \
util/qsystemtrayicon_qws.cpp
}
-!embedded:!x11:mac {
+!embedded:!qpa:!x11:mac {
OBJECTIVE_SOURCES += util/qsystemtrayicon_mac.mm
}
diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp
index f38bae7..a8b39f4 100644
--- a/src/gui/widgets/qabstractslider.cpp
+++ b/src/gui/widgets/qabstractslider.cpp
@@ -722,7 +722,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb
#else
// Native UI-elements on Mac can scroll hundreds of lines at a time as
// a result of acceleration. So keep the same behaviour in Qt, and
- // dont restrict stepsToScroll to certain maximum (pageStep):
+ // don't restrict stepsToScroll to certain maximum (pageStep):
stepsToScroll = int(offset_accumulated);
#endif
offset_accumulated -= int(offset_accumulated);
diff --git a/src/gui/widgets/qcocoamenu_mac.mm b/src/gui/widgets/qcocoamenu_mac.mm
index 15fae23..b670186 100644
--- a/src/gui/widgets/qcocoamenu_mac.mm
+++ b/src/gui/widgets/qcocoamenu_mac.mm
@@ -156,10 +156,14 @@ QT_USE_NAMESPACE
// In every other case we return NO, which means that Cocoa can do as it pleases
// (i.e., fire the menu action).
NSMenuItem *whichItem;
+ // Change the private unicode keys to the ones used in setting the "Key Equivalents"
+ extern NSString *qt_mac_removePrivateUnicode(NSString* string);
+ NSString *characters = qt_mac_removePrivateUnicode([event characters]);
if ([self hasShortcut:menu
- forKey:[event characters]
- forModifiers:([event modifierFlags] & NSDeviceIndependentModifierFlagsMask)
- whichItem:&whichItem]) {
+ forKey:characters
+ // Interested only in Shift, Cmd, Ctrl & Alt Keys, so ignoring masks like, Caps lock, Num Lock ...
+ forModifiers:([event modifierFlags] & (NSShiftKeyMask | NSControlKeyMask | NSCommandKeyMask | NSAlternateKeyMask))
+ whichItem:&whichItem]) {
QWidget *widget = 0;
QAction *qaction = 0;
if (whichItem && [whichItem tag]) {
@@ -170,6 +174,9 @@ QT_USE_NAMESPACE
qApp->activePopupWidget()->focusWidget() : qApp->activePopupWidget());
else if (QApplicationPrivate::focus_widget)
widget = QApplicationPrivate::focus_widget;
+ // If we could not find any receivers, pass it to the active window
+ if (!widget)
+ widget = qApp->activeWindow();
if (qaction && widget) {
int key = qaction->shortcut();
QKeyEvent accel_ev(QEvent::ShortcutOverride, (key & (~Qt::KeyboardModifierMask)),
@@ -177,11 +184,10 @@ QT_USE_NAMESPACE
accel_ev.ignore();
qt_sendSpontaneousEvent(widget, &accel_ev);
if (accel_ev.isAccepted()) {
- if (qt_dispatchKeyEvent(event, widget)) {
- *target = nil;
- *action = nil;
- return YES;
- }
+ qt_dispatchKeyEvent(event, widget);
+ *target = nil;
+ *action = nil;
+ return YES;
}
}
}
diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp
index b857e94..ced0d73f 100644
--- a/src/gui/widgets/qcombobox.cpp
+++ b/src/gui/widgets/qcombobox.cpp
@@ -2486,7 +2486,7 @@ void QComboBox::showPopup()
listRect.setWidth(listRect.height());
//by default popup is centered on screen in landscape
listRect.moveCenter(screen.center());
- if (staConTopRect.IsEmpty()) {
+ if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) {
// landscape without stacon, menu should be at the right
(opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) :
listRect.setLeft(screen.left());
diff --git a/src/gui/widgets/qdatetimeedit.cpp b/src/gui/widgets/qdatetimeedit.cpp
index 36a3147..f2e8fd2 100644
--- a/src/gui/widgets/qdatetimeedit.cpp
+++ b/src/gui/widgets/qdatetimeedit.cpp
@@ -832,11 +832,11 @@ QString QDateTimeEdit::sectionText(Section section) const
This format is the same as the one used described in QDateTime::toString()
and QDateTime::fromString()
- Example format strings(assuming that the date is 2nd of July 1969):
+ Example format strings (assuming that the date is 2nd of July 1969):
\table
\header \i Format \i Result
- \row \i dd.MM.yyyy \i 02.07.1969
+ \row \i dd.MM.yyyy \i 02.07.1969
\row \i MMM d yy \i Jul 2 69
\row \i MMMM d yy \i July 2 69
\endtable
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index f338f40..a283da6 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -112,7 +112,7 @@ void QLineControl::updateDisplayText(bool forceUpdate)
Copies the currently selected text into the clipboard using the given
\a mode.
-
+
\note If the echo mode is set to a mode other than Normal then copy
will not work. This is to prevent using copy as a method of bypassing
password features of the line control.
@@ -486,7 +486,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
/*!
\internal
- Draws the display text for the line control using the given
+ Draws the display text for the line control using the given
\a painter, \a clip, and \a offset. Which aspects of the display text
are drawn is specified by the given \a flags.
diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp
index caaef68..0a33220 100644
--- a/src/gui/widgets/qlineedit.cpp
+++ b/src/gui/widgets/qlineedit.cpp
@@ -139,7 +139,10 @@ void QLineEdit::initStyleOption(QStyleOptionFrame *option) const
The length of the text can be constrained to maxLength(). The text
can be arbitrarily constrained using a validator() or an
- inputMask(), or both.
+ inputMask(), or both. When switching between a validator and an input mask
+ on the same line edit, it is best to clear the validator or input mask to
+ prevent undefined behavior.
+
A related class is QTextEdit which allows multi-line, rich text
editing.
diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index 4ca11b0..da902d5 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -78,6 +78,7 @@ public:
: layout(0), explicitIconSize(false), toolButtonStyle(Qt::ToolButtonIconOnly)
#ifdef Q_WS_MAC
, useHIToolBar(false)
+ , activateUnifiedToolbarAfterFullScreen(false)
#endif
#if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR)
, hasOldCursor(false) , cursorAdjusted(false)
@@ -89,6 +90,7 @@ public:
Qt::ToolButtonStyle toolButtonStyle;
#ifdef Q_WS_MAC
bool useHIToolBar;
+ bool activateUnifiedToolbarAfterFullScreen;
#endif
void init();
QList<int> hoverSeparator;
@@ -502,7 +504,7 @@ void QMainWindow::setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
*/
QMenuBar *QMainWindow::menuBar() const
{
- QMenuBar *menuBar = qobject_cast<QMenuBar *>(d_func()->layout->menuBar());
+ QMenuBar *menuBar = qobject_cast<QMenuBar *>(layout()->menuBar());
if (!menuBar) {
QMainWindow *self = const_cast<QMainWindow *>(this);
menuBar = new QMenuBar(self);
@@ -1501,8 +1503,6 @@ bool QMainWindow::event(QEvent *event)
\i Before Qt 4.5, if you called showFullScreen() on the main window, the QToolbar would
disappear since it is considered to be part of the title bar. Qt 4.5 and up will now work around this by pulling
the toolbars out and back into the regular toolbar and vice versa when you swap out.
- However, a good practice would be that turning off the unified toolbar before you call
- showFullScreen() and restoring it after you call showNormal().
\endlist
Setting this back to false will remove these restrictions.
@@ -1516,14 +1516,21 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3)
return;
- // ### Disable the unified toolbar when using anything but the native graphics system.
- // ### Disable when using alien widgets as well
- if (windowSurface() || testAttribute(Qt::WA_NativeWindow) == false)
+ // ### Disable when using alien widgets
+ if (testAttribute(Qt::WA_NativeWindow) == false) {
return;
+ }
d->useHIToolBar = set;
createWinId(); // We need the hiview for down below.
+#ifdef QT_MAC_USE_COCOA
+ // Activate the unified toolbar with the raster engine.
+ if (windowSurface()) {
+ d->layout->unifiedSurface = new QUnifiedToolbarSurface(this);
+ }
+#endif // QT_MAC_USE_COCOA
+
d->layout->updateHIToolBarStatus();
// Enabling the unified toolbar clears the opaque size grip setting, update it.
d->macUpdateOpaqueSizeGrip();
diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm
index 1bfc746..9e26423 100644
--- a/src/gui/widgets/qmainwindowlayout_mac.mm
+++ b/src/gui/widgets/qmainwindowlayout_mac.mm
@@ -43,6 +43,7 @@
#include <qtoolbar.h>
#include <private/qtoolbarlayout_p.h>
#include <private/qt_cocoa_helpers_mac_p.h>
+#include <private/qtoolbar_p.h>
#ifndef QT_MAC_USE_COCOA
#include <Carbon/Carbon.h>
@@ -408,6 +409,7 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
beforeIndex = qtoolbarsInUnifiedToolbarList.size();
int toolbarIndex = qtoolbarsInUnifiedToolbarList.indexOf(toolbar);
+
#ifndef QT_MAC_USE_COCOA
HIToolbarRef macToolbar = NULL;
if ((GetWindowToolbar(window, &macToolbar) == noErr) && !macToolbar) {
@@ -444,6 +446,18 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
#endif
}
qtoolbarsInUnifiedToolbarList.insert(beforeIndex, toolbar);
+
+ // Adding to the unified toolbar surface for the raster engine.
+ if (layoutState.mainWindow->windowSurface()) {
+ QPoint offset(0, 0);
+ for (int i = 0; i < beforeIndex; ++i) {
+ offset.setX(offset.x() + qtoolbarsInUnifiedToolbarList.at(i)->size().width());
+ }
+#ifdef QT_MAC_USE_COCOA
+ unifiedSurface->insertToolbar(toolbar, offset);
+#endif // QT_MAC_USE_COCOA
+ }
+
#ifndef QT_MAC_USE_COCOA
QCFType<HIToolbarItemRef> outItem;
const QObject *stupidArray[] = { toolbar, this };
@@ -460,6 +474,19 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
#endif
}
+#ifdef QT_MAC_USE_COCOA
+void QMainWindowLayout::updateUnifiedToolbarOffset()
+{
+ QPoint offset(0, 0);
+
+ for (int i = 1; i < qtoolbarsInUnifiedToolbarList.length(); ++i) {
+ offset.setX(offset.x() + qtoolbarsInUnifiedToolbarList.at(i - 1)->size().width());
+ qtoolbarsInUnifiedToolbarList.at(i)->d_func()->toolbar_offset = offset;
+ }
+}
+#endif // QT_MAC_USE_COCOA
+
+
void QMainWindowLayout::removeFromMacToolbar(QToolBar *toolbar)
{
QHash<void *, QToolBar *>::iterator it = unifiedToolbarHash.begin();
@@ -533,11 +560,11 @@ void QMainWindowLayout::fixSizeInUnifiedToolbar(QToolBar *tb) const
QMacCocoaAutoReleasePool pool;
QWidgetItem layoutItem(tb);
QSize size = layoutItem.maximumSize();
- NSSize nssize = NSMakeSize(size.width(), size.height() - 2);
+ NSSize nssize = NSMakeSize(size.width(), size.height());
[item setMaxSize:nssize];
size = layoutItem.minimumSize();
nssize.width = size.width();
- nssize.height = size.height() - 2;
+ nssize.height = size.height();
[item setMinSize:nssize];
}
#else
diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h
index e1b981c..661d49d 100644
--- a/src/gui/widgets/qmainwindowlayout_p.h
+++ b/src/gui/widgets/qmainwindowlayout_p.h
@@ -85,7 +85,11 @@ typedef HIObjectRef HIToolbarItemRef;
typedef const void * CFTypeRef;
typedef const struct __CFString * CFStringRef;
-#endif
+# ifdef QT_MAC_USE_COCOA
+#include <private/qunifiedtoolbarsurface_mac_p.h>
+# endif // QT_MAC_USE_COCOA
+
+#endif // Q_WS_MAC
QT_BEGIN_NAMESPACE
@@ -335,9 +339,16 @@ public:
void cleanUpMacToolbarItems();
void fixSizeInUnifiedToolbar(QToolBar *tb) const;
bool useHIToolBar;
+ bool activateUnifiedToolbarAfterFullScreen;
void syncUnifiedToolbarVisibility();
bool blockVisiblityCheck;
-#endif
+
+#ifdef QT_MAC_USE_COCOA
+ QUnifiedToolbarSurface *unifiedSurface;
+ void updateUnifiedToolbarOffset();
+#endif // QT_MAC_USE_COCOA
+
+#endif // Q_WS_MAC
};
QT_END_NAMESPACE
diff --git a/src/gui/widgets/qmenu.h b/src/gui/widgets/qmenu.h
index 7708e05..77f3b1a 100644
--- a/src/gui/widgets/qmenu.h
+++ b/src/gui/widgets/qmenu.h
@@ -51,6 +51,10 @@
#include <QtGui/qpixmap.h>
#endif
+#ifdef Q_WS_WINCE
+#include <windef.h> // for HMENU
+#endif
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp
index df16f7f..ae56fa5 100644
--- a/src/gui/widgets/qmenubar.cpp
+++ b/src/gui/widgets/qmenubar.cpp
@@ -1628,10 +1628,10 @@ bool QMenuBar::eventFilter(QObject *object, QEvent *event)
}
/*!
- \internal
+ Returns the QAction at \a pt. Returns 0 if there is no action at \a pt or if
+the location has a separator.
- Return the item at \a pt, or 0 if there is no item there or if it is
- a separator item.
+ \sa addAction(), addSeparator()
*/
QAction *QMenuBar::actionAt(const QPoint &pt) const
{
@@ -1640,9 +1640,9 @@ QAction *QMenuBar::actionAt(const QPoint &pt) const
}
/*!
- \internal
+ Returns the geometry of action \a act as a QRect.
- Returns the geometry of action \a act.
+ \sa actionAt()
*/
QRect QMenuBar::actionGeometry(QAction *act) const
{
@@ -1836,10 +1836,17 @@ void QMenuBarPrivate::_q_updateLayout()
}
/*!
- \internal
+ \fn void QMenuBar::setCornerWidget(QWidget *widget, Qt::Corner corner)
- This sets widget \a w to be shown directly on the left of the first or
- the right of the last menu item, depending on \a corner.
+ This sets the given \a widget to be shown directly on the left of the first
+ menu item, or on the right of the last menu item, depending on \a corner.
+
+ The menu bar takes ownership of \a widget, reparenting it into the menu bar.
+ However, if the \a corner already contains a widget, this previous widget
+ will no longer be managed and will still be a visible child of the menu bar.
+
+ \note Using a corner other than Qt::TopRightCorner or Qt::TopLeftCorner
+ will result in a warning.
*/
void QMenuBar::setCornerWidget(QWidget *w, Qt::Corner corner)
{
@@ -1869,10 +1876,11 @@ void QMenuBar::setCornerWidget(QWidget *w, Qt::Corner corner)
}
/*!
- \internal
+ Returns the widget on the left of the first or on the right of the last menu
+ item, depending on \a corner.
- Returns the widget in the left of the first or the right of the last menu
- item, depending on \a corner.
+ \note Using a corner other than Qt::TopRightCorner or Qt::TopLeftCorner
+ will result in a warning.
*/
QWidget *QMenuBar::cornerWidget(Qt::Corner corner) const
{
diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp
index 4541730..6b3f444 100644
--- a/src/gui/widgets/qtextedit.cpp
+++ b/src/gui/widgets/qtextedit.cpp
@@ -773,7 +773,7 @@ Qt::Alignment QTextEdit::alignment() const
is the document's parent object. The parent object of the provided document
remains the owner of the object.
- If the current document is a child of the text editor, then it is deleted.
+ The editor does not delete the current document, even if it is a child of the editor.
\sa document()
*/
diff --git a/src/gui/widgets/qvalidator.cpp b/src/gui/widgets/qvalidator.cpp
index b75db45..130d091 100644
--- a/src/gui/widgets/qvalidator.cpp
+++ b/src/gui/widgets/qvalidator.cpp
@@ -499,6 +499,8 @@ public:
}
QDoubleValidator::Notation notation;
+
+ QValidator::State validateWithLocale(QString & input, QLocalePrivate::NumberMode numMode, const QLocale &locale) const;
};
@@ -654,42 +656,49 @@ QValidator::State QDoubleValidator::validate(QString & input, int &) const
break;
}
+ State currentLocaleValidation = d->validateWithLocale(input, numMode, locale());
+ if (currentLocaleValidation == Acceptable || locale().language() == QLocale::C)
+ return currentLocaleValidation;
+ State cLocaleValidation = d->validateWithLocale(input, numMode, QLocale(QLocale::C));
+ return qMax(currentLocaleValidation, cLocaleValidation);
+}
+
+QValidator::State QDoubleValidatorPrivate::validateWithLocale(QString &input, QLocalePrivate::NumberMode numMode, const QLocale &locale) const
+{
+ Q_Q(const QDoubleValidator);
QByteArray buff;
- if (!locale().d()->validateChars(input, numMode, &buff, dec)) {
- QLocale cl(QLocale::C);
- if (!cl.d()->validateChars(input, numMode, &buff, dec))
- return Invalid;
- }
+ if (!locale.d()->validateChars(input, numMode, &buff, q->dec))
+ return QValidator::Invalid;
if (buff.isEmpty())
- return Intermediate;
+ return QValidator::Intermediate;
- if (b >= 0 && buff.startsWith('-'))
- return Invalid;
+ if (q->b >= 0 && buff.startsWith('-'))
+ return QValidator::Invalid;
- if (t < 0 && buff.startsWith('+'))
- return Invalid;
+ if (q->t < 0 && buff.startsWith('+'))
+ return QValidator::Invalid;
bool ok, overflow;
double i = QLocalePrivate::bytearrayToDouble(buff.constData(), &ok, &overflow);
if (overflow)
- return Invalid;
+ return QValidator::Invalid;
if (!ok)
- return Intermediate;
+ return QValidator::Intermediate;
- if (i >= b && i <= t)
- return Acceptable;
+ if (i >= q->b && i <= q->t)
+ return QValidator::Acceptable;
- if (d->notation == StandardNotation) {
- double max = qMax(qAbs(b), qAbs(t));
+ if (notation == QDoubleValidator::StandardNotation) {
+ double max = qMax(qAbs(q->b), qAbs(q->t));
if (max < LLONG_MAX) {
qlonglong n = pow10(numDigits(qlonglong(max))) - 1;
if (qAbs(i) > n)
- return Invalid;
+ return QValidator::Invalid;
}
}
- return Intermediate;
+ return QValidator::Intermediate;
}
diff --git a/src/gui/widgets/widgets.pri b/src/gui/widgets/widgets.pri
index 937b8d6..669b838 100644
--- a/src/gui/widgets/widgets.pri
+++ b/src/gui/widgets/widgets.pri
@@ -144,7 +144,7 @@ SOURCES += \
widgets/qplaintextedit.cpp \
widgets/qprintpreviewwidget.cpp
-!embedded:mac {
+!embedded:!qpa:mac {
HEADERS += widgets/qmacnativewidget_mac.h \
widgets/qmaccocoaviewcontainer_mac.h
OBJECTIVE_HEADERS += widgets/qcocoatoolbardelegate_mac_p.h \
diff --git a/src/imports/folderlistmodel/folderlistmodel.pro b/src/imports/folderlistmodel/folderlistmodel.pro
index b2e5360..44764a9 100644
--- a/src/imports/folderlistmodel/folderlistmodel.pro
+++ b/src/imports/folderlistmodel/folderlistmodel.pro
@@ -15,10 +15,9 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
symbian:{
TARGET.UID3 = 0x20021320
- include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/gestures/gestures.pro b/src/imports/gestures/gestures.pro
index 18ffcb9..ad872ba 100644
--- a/src/imports/gestures/gestures.pro
+++ b/src/imports/gestures/gestures.pro
@@ -15,10 +15,9 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
symbian:{
TARGET.UID3 = 0x2002131F
- include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
index a3eb0d1..90b50e4 100644
--- a/src/imports/particles/particles.pro
+++ b/src/imports/particles/particles.pro
@@ -19,10 +19,9 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
symbian:{
TARGET.UID3 = 0x2002131E
- include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/multimedia/audio/audio.pri b/src/multimedia/audio/audio.pri
index ae28a26..7b2f9ad 100644
--- a/src/multimedia/audio/audio.pri
+++ b/src/multimedia/audio/audio.pri
@@ -42,8 +42,8 @@ mac {
wince*:LIBS += -lcoredll
} else:symbian {
- INCLUDEPATH += /epoc32/include/mmf/common
- INCLUDEPATH += /epoc32/include/mmf/server
+ INCLUDEPATH += $${EPOCROOT}epoc32/include/mmf/common
+ INCLUDEPATH += $${EPOCROOT}epoc32/include/mmf/server
HEADERS += $$PWD/qaudio_symbian_p.h \
$$PWD/qaudiodeviceinfo_symbian_p.h \
diff --git a/src/multimedia/audio/qaudioengine.cpp b/src/multimedia/audio/qaudioengine.cpp
index 7f1f5d3..c379aff 100644
--- a/src/multimedia/audio/qaudioengine.cpp
+++ b/src/multimedia/audio/qaudioengine.cpp
@@ -133,7 +133,7 @@ QT_BEGIN_NAMESPACE
Uses the \a device as the QIODevice to transfer data. If \a device is null then the class
creates an internal QIODevice. Returns a pointer to the QIODevice being used to handle
the data transfer. This QIODevice can be used to write() audio data directly. Passing a
- QIODevice allows the data to be transfered without any extra code.
+ QIODevice allows the data to be transferred without any extra code.
*/
/*!
@@ -247,7 +247,7 @@ QT_BEGIN_NAMESPACE
Uses the \a device as the QIODevice to transfer data. If \a device is null
then the class creates an internal QIODevice. Returns a pointer to the
QIODevice being used to handle the data transfer. This QIODevice can be used to
- read() audio data directly. Passing a QIODevice allows the data to be transfered
+ read() audio data directly. Passing a QIODevice allows the data to be transferred
without any extra code.
*/
diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp
index 3676f64..6660c3f 100644
--- a/src/multimedia/audio/qaudioinput.cpp
+++ b/src/multimedia/audio/qaudioinput.cpp
@@ -201,7 +201,7 @@ QAudioInput::~QAudioInput()
/*!
Uses the \a device as the QIODevice to transfer data.
- Passing a QIODevice allows the data to be transfered without any extra code.
+ Passing a QIODevice allows the data to be transferred without any extra code.
All that is required is to open the QIODevice.
If able to successfully get audio data from the systems audio device the
diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp
index ddafa3d..5265915 100644
--- a/src/multimedia/audio/qaudioinput_alsa_p.cpp
+++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp
@@ -482,19 +482,18 @@ int QAudioInputPrivate::bytesReady() const
qint64 QAudioInputPrivate::read(char* data, qint64 len)
{
- Q_UNUSED(len)
-
// Read in some audio data and write it to QIODevice, pull mode
if ( !handle )
return 0;
- bytesAvailable = checkBytesReady();
+ // bytesAvaiable is saved as a side effect of checkBytesReady().
+ int bytesToRead = checkBytesReady();
- if (bytesAvailable < 0) {
+ if (bytesToRead < 0) {
// bytesAvailable as negative is error code, try to recover from it.
- xrun_recovery(bytesAvailable);
- bytesAvailable = checkBytesReady();
- if (bytesAvailable < 0) {
+ xrun_recovery(bytesToRead);
+ bytesToRead = checkBytesReady();
+ if (bytesToRead < 0) {
// recovery failed must stop and set error.
close();
errorState = QAudio::IOError;
@@ -504,9 +503,11 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
}
}
+ bytesToRead = qMin<qint64>(len, bytesToRead);
+ bytesToRead -= bytesToRead % period_size;
int count=0, err = 0;
while(count < 5) {
- int chunks = bytesAvailable/period_size;
+ int chunks = bytesToRead/period_size;
int frames = chunks*period_frames;
if(frames > (int)buffer_frames)
frames = buffer_frames;
@@ -554,6 +555,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
emit stateChanged(deviceState);
}
} else {
+ bytesAvailable -= err;
totalTimeValue += err;
resuming = false;
if (deviceState != QAudio::ActiveState) {
@@ -566,6 +568,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
} else {
memcpy(data,audioBuffer,err);
+ bytesAvailable -= err;
totalTimeValue += err;
resuming = false;
if (deviceState != QAudio::ActiveState) {
@@ -661,7 +664,7 @@ bool QAudioInputPrivate::deviceReady()
{
if(pullMode) {
// reads some audio data and writes it to QIODevice
- read(0,0);
+ read(0, buffer_size);
} else {
// emits readyRead() so user will call read() on QIODevice to get some audio data
InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp
index 1cde159..0ec2492 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.cpp
+++ b/src/multimedia/audio/qaudioinput_win32_p.cpp
@@ -400,9 +400,12 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
resuming = false;
}
} else {
+ l = qMin<qint64>(len, waveBlocks[header].dwBytesRecorded);
// push mode
- memcpy(p,waveBlocks[header].lpData,waveBlocks[header].dwBytesRecorded);
- l = waveBlocks[header].dwBytesRecorded;
+ memcpy(p, waveBlocks[header].lpData, l);
+
+ len -= l;
+
#ifdef DEBUG_AUDIO
qDebug()<<"IN: "<<waveBlocks[header].dwBytesRecorded<<", OUT: "<<l;
#endif
@@ -457,7 +460,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
mutex.lock();
if(!pullMode) {
- if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
+ if(len < period_size || waveFreeBlockCount == buffer_size/period_size)
done = true;
} else {
if(waveFreeBlockCount == buffer_size/period_size)
@@ -568,7 +571,7 @@ bool QAudioInputPrivate::deviceReady()
if(pullMode) {
// reads some audio data and writes it to QIODevice
- read(0,0);
+ read(0, buffer_size);
} else {
// emits readyRead() so user will call read() on QIODevice to get some audio data
InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);
diff --git a/src/multimedia/audio/qaudiooutput.cpp b/src/multimedia/audio/qaudiooutput.cpp
index cf3b79c..b71d48c 100644
--- a/src/multimedia/audio/qaudiooutput.cpp
+++ b/src/multimedia/audio/qaudiooutput.cpp
@@ -199,7 +199,7 @@ QAudioFormat QAudioOutput::format() const
/*!
Uses the \a device as the QIODevice to transfer data.
- Passing a QIODevice allows the data to be transfered without any extra code.
+ Passing a QIODevice allows the data to be transferred without any extra code.
All that is required is to open the QIODevice.
If able to successfully output audio data to the systems audio device the
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
index 1f304e3..1b054e5 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -586,7 +586,7 @@ bool QAudioOutputPrivate::deviceReady()
}
}
if ( out < l) {
- // Didnt write all data
+ // Didn't write all data
audioSource->seek(audioSource->pos()-(l-out));
}
if(startup)
diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp
index 13375f8..9c2f79a 100644
--- a/src/network/access/qhttp.cpp
+++ b/src/network/access/qhttp.cpp
@@ -2442,7 +2442,7 @@ void QHttpPrivate::_q_slotSendRequest()
if (proxy.hostName().isEmpty()) {
proxy.setType(QNetworkProxy::NoProxy);
} else if (sslInUse) {
- // Disallow use of cacheing proxy with HTTPS; instead fall back to
+ // Disallow use of caching proxy with HTTPS; instead fall back to
// transparent HTTP CONNECT proxying.
transparentProxyInUse = true;
} else {
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 2ab28c7..a1c7cf1 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -39,6 +39,7 @@
**
****************************************************************************/
+#include <private/qabstractsocket_p.h>
#include "qhttpnetworkconnection_p.h"
#include "qhttpnetworkconnectionchannel_p.h"
#include "private/qnoncontiguousbytedevice_p.h"
@@ -56,6 +57,7 @@
#ifndef QT_NO_HTTP
#ifndef QT_NO_OPENSSL
+# include <private/qsslsocket_p.h>
# include <QtNetwork/qsslkey.h>
# include <QtNetwork/qsslcipher.h>
# include <QtNetwork/qsslconfiguration.h>
@@ -79,9 +81,9 @@ const int QHttpNetworkConnectionPrivate::defaultRePipelineLength = 2;
QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &hostName, quint16 port, bool encrypt)
-: hostName(hostName), port(port), encrypt(encrypt),
- channelCount(defaultChannelCount),
- pendingAuthSignal(false), pendingProxyAuthSignal(false)
+: state(RunningState),
+ hostName(hostName), port(port), encrypt(encrypt),
+ channelCount(defaultChannelCount)
#ifndef QT_NO_NETWORKPROXY
, networkProxy(QNetworkProxy::NoProxy)
#endif
@@ -90,9 +92,9 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host
}
QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(quint16 channelCount, const QString &hostName, quint16 port, bool encrypt)
-: hostName(hostName), port(port), encrypt(encrypt),
- channelCount(channelCount),
- pendingAuthSignal(false), pendingProxyAuthSignal(false)
+: state(RunningState),
+ hostName(hostName), port(port), encrypt(encrypt),
+ channelCount(channelCount)
#ifndef QT_NO_NETWORKPROXY
, networkProxy(QNetworkProxy::NoProxy)
#endif
@@ -122,6 +124,42 @@ void QHttpNetworkConnectionPrivate::init()
}
}
+void QHttpNetworkConnectionPrivate::pauseConnection()
+{
+ state = PausedState;
+
+ // Disable all socket notifiers
+ for (int i = 0; i < channelCount; i++) {
+#ifndef QT_NO_OPENSSL
+ if (encrypt)
+ QSslSocketPrivate::pauseSocketNotifiers(static_cast<QSslSocket*>(channels[i].socket));
+ else
+#endif
+ QAbstractSocketPrivate::pauseSocketNotifiers(channels[i].socket);
+ }
+}
+
+void QHttpNetworkConnectionPrivate::resumeConnection()
+{
+ state = RunningState;
+ // Enable all socket notifiers
+ for (int i = 0; i < channelCount; i++) {
+#ifndef QT_NO_OPENSSL
+ if (encrypt)
+ QSslSocketPrivate::resumeSocketNotifiers(static_cast<QSslSocket*>(channels[i].socket));
+ else
+#endif
+ QAbstractSocketPrivate::resumeSocketNotifiers(channels[i].socket);
+
+ // Resume pending upload if needed
+ if (channels[i].state == QHttpNetworkConnectionChannel::WritingState)
+ QMetaObject::invokeMethod(&channels[i], "_q_uploadDataReadyRead", Qt::QueuedConnection);
+ }
+
+ // queue _q_startNextRequest
+ QMetaObject::invokeMethod(this->q_func(), "_q_startNextRequest", Qt::QueuedConnection);
+}
+
int QHttpNetworkConnectionPrivate::indexOf(QAbstractSocket *socket) const
{
for (int i = 0; i < channelCount; ++i)
@@ -258,6 +296,13 @@ void QHttpNetworkConnectionPrivate::copyCredentials(int fromChannel, QAuthentica
{
Q_ASSERT(auth);
+ // NTLM is a multi phase authentication. Copying credentials between authenticators would mess things up.
+ if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm)
+ return;
+ if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm)
+ return;
+
+
// select another channel
QAuthenticator* otherAuth = 0;
for (int i = 0; i < channelCount; ++i) {
@@ -283,8 +328,6 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
Q_ASSERT(socket);
Q_ASSERT(reply);
- Q_Q(QHttpNetworkConnection);
-
resend = false;
//create the response header to be used with QAuthenticatorPrivate.
QList<QPair<QByteArray, QByteArray> > fields = reply->header();
@@ -297,10 +340,10 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
QAuthenticator* auth = 0;
if (isProxy) {
auth = &channels[i].proxyAuthenticator;
- channels[i].proxyAuthMehtod = authMethod;
+ channels[i].proxyAuthMethod = authMethod;
} else {
auth = &channels[i].authenticator;
- channels[i].authMehtod = authMethod;
+ channels[i].authMethod = authMethod;
}
//proceed with the authentication.
if (auth->isNull())
@@ -309,46 +352,33 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
priv->parseHttpResponse(fields, isProxy);
if (priv->phase == QAuthenticatorPrivate::Done) {
- if ((isProxy && pendingProxyAuthSignal) ||(!isProxy && pendingAuthSignal)) {
- // drop the request
- reply->d_func()->eraseData();
- channels[i].close();
- channels[i].lastStatus = 0;
- channels[i].state = QHttpNetworkConnectionChannel::Wait4AuthState;
- return false;
- }
- // cannot use this socket until the slot returns
- channels[i].state = QHttpNetworkConnectionChannel::WaitingState;
- socket->blockSignals(true);
+ pauseConnection();
if (!isProxy) {
- pendingAuthSignal = true;
- emit q->authenticationRequired(reply->request(), auth, q);
- pendingAuthSignal = false;
+ emit reply->authenticationRequired(reply->request(), auth);
#ifndef QT_NO_NETWORKPROXY
} else {
- pendingProxyAuthSignal = true;
- emit q->proxyAuthenticationRequired(networkProxy, auth, q);
- pendingProxyAuthSignal = false;
+ emit reply->proxyAuthenticationRequired(networkProxy, auth);
#endif
}
- socket->blockSignals(false);
- // socket free to use
- channels[i].state = QHttpNetworkConnectionChannel::IdleState;
+ resumeConnection();
+
if (priv->phase != QAuthenticatorPrivate::Done) {
// send any pending requests
copyCredentials(i, auth, isProxy);
- QMetaObject::invokeMethod(q, "_q_restartAuthPendingRequests", Qt::QueuedConnection);
}
- } else if (priv->phase == QAuthenticatorPrivate::Start) {
- // If the url's authenticator has a 'user' set we will end up here (phase is only set to 'Done' by
- // parseHttpResponse above if 'user' is empty). So if credentials were supplied with the request,
- // such as in the case of an XMLHttpRequest, this is our only opportunity to cache them.
- emit q->cacheCredentials(reply->request(), auth, q);
}
- // - Changing values in QAuthenticator will reset the 'phase'.
+ // - Changing values in QAuthenticator will reset the 'phase'. Therefore if it is still "Done"
+ // then nothing was filled in by the user or the cache
// - If withCredentials has been set to false (e.g. by QtWebKit for a cross-origin XMLHttpRequest) then
// we need to bail out if authentication is required.
if (priv->phase == QAuthenticatorPrivate::Done || !reply->request().withCredentials()) {
+ // Reset authenticator so the next request on that channel does not get messed up
+ auth = 0;
+ if (isProxy)
+ channels[i].proxyAuthenticator = QAuthenticator();
+ else
+ channels[i].authenticator = QAuthenticator();
+
// authentication is cancelled, send the current contents to the user.
emit channels[i].reply->headerChanged();
emit channels[i].reply->readyRead();
@@ -357,15 +387,9 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket
? QNetworkReply::ProxyAuthenticationRequiredError
: QNetworkReply::AuthenticationRequiredError;
reply->d_func()->errorString = errorDetail(errorCode, socket);
- emit q->error(errorCode, reply->d_func()->errorString);
- emit channels[i].reply->finished();
+ emit reply->finishedWithError(errorCode, reply->d_func()->errorString);
// ### at this point the reply could be deleted
socket->close();
- // remove pending request on the other channels
- for (int j = 0; j < channelCount; ++j) {
- if (j != i && channels[j].state == QHttpNetworkConnectionChannel::Wait4AuthState)
- channels[j].state = QHttpNetworkConnectionChannel::IdleState;
- }
return true;
}
//resend the request
@@ -381,8 +405,9 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket,
int i = indexOf(socket);
- if (channels[i].authMehtod != QAuthenticatorPrivate::None) {
- if (!(channels[i].authMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 401)) {
+ // Send "Authorization" header, but not if it's NTLM and the socket is already authenticated.
+ if (channels[i].authMethod != QAuthenticatorPrivate::None) {
+ if (!(channels[i].authMethod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 401)) {
QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].authenticator);
if (priv && priv->method != QAuthenticatorPrivate::None) {
QByteArray response = priv->calculateResponse(request.d->methodName(), request.d->uri(false));
@@ -390,8 +415,10 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket,
}
}
}
- if (channels[i].proxyAuthMehtod != QAuthenticatorPrivate::None) {
- if (!(channels[i].proxyAuthMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 407)) {
+
+ // Send "Proxy-Authorization" header, but not if it's NTLM and the socket is already authenticated.
+ if (channels[i].proxyAuthMethod != QAuthenticatorPrivate::None) {
+ if (!(channels[i].proxyAuthMethod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 407)) {
QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].proxyAuthenticator);
if (priv && priv->method != QAuthenticatorPrivate::None) {
QByteArray response = priv->calculateResponse(request.d->methodName(), request.d->uri(false));
@@ -726,6 +753,10 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply)
// although it is called _q_startNextRequest, it will actually start multiple requests when possible
void QHttpNetworkConnectionPrivate::_q_startNextRequest()
{
+ // If the QHttpNetworkConnection is currently paused then bail out immediately
+ if (state == PausedState)
+ return;
+
//resend the necessary ones.
for (int i = 0; i < channelCount; ++i) {
if (channels[i].resendCurrent) {
@@ -776,17 +807,6 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
fillPipeline(channels[i].socket);
}
-void QHttpNetworkConnectionPrivate::_q_restartAuthPendingRequests()
-{
- // send the request using the idle socket
- for (int i = 0 ; i < channelCount; ++i) {
- if (channels[i].state == QHttpNetworkConnectionChannel::Wait4AuthState) {
- channels[i].state = QHttpNetworkConnectionChannel::IdleState;
- if (channels[i].reply)
- channels[i].sendRequest();
- }
- }
-}
void QHttpNetworkConnectionPrivate::readMoreLater(QHttpNetworkReply *reply)
{
@@ -835,33 +855,12 @@ QHttpNetworkReply* QHttpNetworkConnection::sendRequest(const QHttpNetworkRequest
return d->queueRequest(request);
}
-void QHttpNetworkConnection::enableEncryption()
-{
- Q_D(QHttpNetworkConnection);
- d->encrypt = true;
-}
-
bool QHttpNetworkConnection::isEncrypted() const
{
Q_D(const QHttpNetworkConnection);
return d->encrypt;
}
-void QHttpNetworkConnection::setProxyAuthentication(QAuthenticator *authenticator)
-{
- Q_D(QHttpNetworkConnection);
- for (int i = 0; i < d->channelCount; ++i)
- d->channels[i].proxyAuthenticator = *authenticator;
-}
-
-void QHttpNetworkConnection::setAuthentication(const QString &domain, QAuthenticator *authenticator)
-{
- Q_UNUSED(domain); // ### domain ?
- Q_D(QHttpNetworkConnection);
- for (int i = 0; i < d->channelCount; ++i)
- d->channels[i].authenticator = *authenticator;
-}
-
#ifndef QT_NO_NETWORKPROXY
void QHttpNetworkConnection::setCacheProxy(const QNetworkProxy &networkProxy)
{
@@ -954,8 +953,11 @@ void QHttpNetworkConnection::ignoreSslErrors(const QList<QSslError> &errors, int
// e.g. it is for SOCKS proxies which require authentication.
void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpNetworkConnectionChannel *chan, const QNetworkProxy &proxy, QAuthenticator* auth)
{
- Q_Q(QHttpNetworkConnection);
- emit q->proxyAuthenticationRequired(proxy, auth, q);
+ // Also pause the connection because socket notifiers may fire while an user
+ // dialog is displaying
+ pauseConnection();
+ emit chan->reply->proxyAuthenticationRequired(proxy, auth);
+ resumeConnection();
int i = indexOf(chan->socket);
copyCredentials(i, auth, true);
}
diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h
index 51666d6..8461426c 100644
--- a/src/network/access/qhttpnetworkconnection_p.h
+++ b/src/network/access/qhttpnetworkconnection_p.h
@@ -108,43 +108,22 @@ public:
QNetworkProxy transparentProxy() const;
#endif
- //enable encryption
- void enableEncryption();
bool isEncrypted() const;
- //authentication parameters
- void setProxyAuthentication(QAuthenticator *authenticator);
- void setAuthentication(const QString &domain, QAuthenticator *authenticator);
-
#ifndef QT_NO_OPENSSL
void setSslConfiguration(const QSslConfiguration &config);
void ignoreSslErrors(int channel = -1);
void ignoreSslErrors(const QList<QSslError> &errors, int channel = -1);
-
-Q_SIGNALS:
- void sslErrors(const QList<QSslError> &errors);
-#endif
-
-Q_SIGNALS:
-#ifndef QT_NO_NETWORKPROXY
- //cannot be used with queued connection.
- void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator,
- const QHttpNetworkConnection *connection = 0);
#endif
- void authenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *authenticator,
- const QHttpNetworkConnection *connection = 0);
- void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator,
- const QHttpNetworkConnection *connection = 0);
- void error(QNetworkReply::NetworkError errorCode, const QString &detail = QString());
private:
Q_DECLARE_PRIVATE(QHttpNetworkConnection)
Q_DISABLE_COPY(QHttpNetworkConnection)
friend class QHttpNetworkReply;
+ friend class QHttpNetworkReplyPrivate;
friend class QHttpNetworkConnectionChannel;
Q_PRIVATE_SLOT(d_func(), void _q_startNextRequest())
- Q_PRIVATE_SLOT(d_func(), void _q_restartAuthPendingRequests())
};
@@ -160,11 +139,20 @@ public:
static const int defaultPipelineLength;
static const int defaultRePipelineLength;
+ enum ConnectionState {
+ RunningState = 0,
+ PausedState = 1,
+ };
+
QHttpNetworkConnectionPrivate(const QString &hostName, quint16 port, bool encrypt);
QHttpNetworkConnectionPrivate(quint16 channelCount, const QString &hostName, quint16 port, bool encrypt);
~QHttpNetworkConnectionPrivate();
void init();
+ void pauseConnection();
+ void resumeConnection();
+ ConnectionState state;
+
enum { ChunkSize = 4096 };
int indexOf(QAbstractSocket *socket) const;
@@ -184,7 +172,6 @@ public:
// private slots
void _q_startNextRequest(); // send the next request from the queue
- void _q_restartAuthPendingRequests(); // send the currently blocked request
void createAuthorization(QAbstractSocket *socket, QHttpNetworkRequest &request);
@@ -203,9 +190,6 @@ public:
const int channelCount;
QHttpNetworkConnectionChannel *channels; // parallel connections to the server
- bool pendingAuthSignal; // there is an incomplete authentication signal
- bool pendingProxyAuthSignal; // there is an incomplete proxy authentication signal
-
qint64 uncompressedBytesAvailable(const QHttpNetworkReply &reply) const;
qint64 uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const;
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 617602d..fe5946a 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -69,8 +69,8 @@ QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel()
, lastStatus(0)
, pendingEncrypt(false)
, reconnectAttempts(2)
- , authMehtod(QAuthenticatorPrivate::None)
- , proxyAuthMehtod(QAuthenticatorPrivate::None)
+ , authMethod(QAuthenticatorPrivate::None)
+ , proxyAuthMethod(QAuthenticatorPrivate::None)
#ifndef QT_NO_OPENSSL
, ignoreAllSslErrors(false)
#endif
@@ -103,12 +103,22 @@ void QHttpNetworkConnectionChannel::init()
QObject::connect(socket, SIGNAL(readyRead()),
this, SLOT(_q_readyRead()),
Qt::DirectConnection);
+
+ // The disconnected() and error() signals may already come
+ // while calling connectToHost().
+ // In case of a cached hostname or an IP this
+ // will then emit a signal to the user of QNetworkReply
+ // but cannot be caught because the user did not have a chance yet
+ // to connect to QNetworkReply's signals.
+ qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError");
QObject::connect(socket, SIGNAL(disconnected()),
this, SLOT(_q_disconnected()),
- Qt::DirectConnection);
+ Qt::QueuedConnection);
QObject::connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(_q_error(QAbstractSocket::SocketError)),
- Qt::DirectConnection);
+ Qt::QueuedConnection);
+
+
#ifndef QT_NO_NETWORKPROXY
QObject::connect(socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
this, SLOT(_q_proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
@@ -179,6 +189,7 @@ bool QHttpNetworkConnectionChannel::sendRequest()
|| (!url.password().isEmpty() && url.password() != auth.password())) {
auth.setUser(url.userName());
auth.setPassword(url.password());
+ emit reply->cacheCredentials(request, &auth);
connection->d_func()->copyCredentials(connection->d_func()->indexOf(socket), &auth, false);
}
// clear the userinfo, since we use the same request for resending
@@ -298,7 +309,6 @@ bool QHttpNetworkConnectionChannel::sendRequest()
break;
}
case QHttpNetworkConnectionChannel::ReadingState:
- case QHttpNetworkConnectionChannel::Wait4AuthState:
// ignore _q_bytesWritten in these states
// fall through
default:
@@ -407,7 +417,9 @@ void QHttpNetworkConnectionChannel::_q_receiveReply()
}
case QHttpNetworkReplyPrivate::ReadingDataState: {
QHttpNetworkReplyPrivate *replyPrivate = reply->d_func();
- if (replyPrivate->downstreamLimited && !replyPrivate->responseData.isEmpty() && replyPrivate->shouldEmitSignals()) {
+ if (socket->state() == QAbstractSocket::ConnectedState &&
+ replyPrivate->downstreamLimited && !replyPrivate->responseData.isEmpty() && replyPrivate->shouldEmitSignals()) {
+ // (only do the following when still connected, not when we have already been disconnected and there is still data)
// We already have some HTTP body data. We don't read more from the socket until
// this is fetched by QHttpNetworkAccessHttpBackend. If we would read more,
// we could not limit our read buffer usage.
@@ -785,8 +797,7 @@ void QHttpNetworkConnectionChannel::handleStatus()
? QNetworkReply::ProxyAuthenticationRequiredError
: QNetworkReply::AuthenticationRequiredError;
reply->d_func()->errorString = connection->d_func()->errorDetail(errorCode, socket);
- emit connection->error(errorCode, reply->d_func()->errorString);
- emit reply->finished();
+ emit reply->finishedWithError(errorCode, reply->d_func()->errorString);
}
break;
default:
@@ -962,7 +973,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
{
if (!socket)
return;
- bool send2Reply = false;
QNetworkReply::NetworkError errorCode = QNetworkReply::UnknownNetworkError;
switch (socketError) {
@@ -980,7 +990,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
closeAndResendCurrentRequest();
return;
} else {
- send2Reply = true;
errorCode = QNetworkReply::RemoteHostClosedError;
}
} else {
@@ -993,7 +1002,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
closeAndResendCurrentRequest();
return;
}
- send2Reply = true;
errorCode = QNetworkReply::TimeoutError;
break;
case QAbstractSocket::ProxyAuthenticationRequiredError:
@@ -1009,18 +1017,14 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket
}
QPointer<QHttpNetworkConnection> that = connection;
QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString());
- if (send2Reply) {
- if (reply) {
- reply->d_func()->errorString = errorString;
- // this error matters only to this reply
- emit reply->finishedWithError(errorCode, errorString);
- }
- // send the next request
- QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection);
- } else {
- // the failure affects all requests.
- emit connection->error(errorCode, errorString);
+
+ if (reply) {
+ reply->d_func()->errorString = errorString;
+ emit reply->finishedWithError(errorCode, errorString);
}
+ // send the next request
+ QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection);
+
if (that) //signal emission triggered event loop
close();
}
@@ -1051,7 +1055,11 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList<QSslError> &errors)
if (!socket)
return;
//QNetworkReply::NetworkError errorCode = QNetworkReply::ProtocolFailure;
- emit connection->sslErrors(errors);
+ // Also pause the connection because socket notifiers may fire while an user
+ // dialog is displaying
+ connection->d_func()->pauseConnection();
+ emit reply->sslErrors(errors);
+ connection->d_func()->resumeConnection();
}
void QHttpNetworkConnectionChannel::_q_encryptedBytesWritten(qint64 bytes)
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index 4f3a65c..07bb4a6 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -95,8 +95,7 @@ public:
WritingState = 2, // writing the data
WaitingState = 4, // waiting for reply
ReadingState = 8, // reading the reply
- Wait4AuthState = 0x10, // blocked for send till the current authentication slot is done
- BusyState = (ConnectingState|WritingState|WaitingState|ReadingState|Wait4AuthState)
+ BusyState = (ConnectingState|WritingState|WaitingState|ReadingState)
};
QAbstractSocket *socket;
bool ssl;
@@ -109,8 +108,8 @@ public:
int lastStatus; // last status received on this channel
bool pendingEncrypt; // for https (send after encrypted)
int reconnectAttempts; // maximum 2 reconnection attempts
- QAuthenticatorPrivate::Method authMehtod;
- QAuthenticatorPrivate::Method proxyAuthMehtod;
+ QAuthenticatorPrivate::Method authMethod;
+ QAuthenticatorPrivate::Method proxyAuthMethod;
QAuthenticator authenticator;
QAuthenticator proxyAuthenticator;
#ifndef QT_NO_OPENSSL
diff --git a/src/network/access/qhttpnetworkheader.cpp b/src/network/access/qhttpnetworkheader.cpp
index 669f9cf..3eb2f3b 100644
--- a/src/network/access/qhttpnetworkheader.cpp
+++ b/src/network/access/qhttpnetworkheader.cpp
@@ -60,7 +60,17 @@ QHttpNetworkHeaderPrivate::QHttpNetworkHeaderPrivate(const QHttpNetworkHeaderPri
qint64 QHttpNetworkHeaderPrivate::contentLength() const
{
bool ok = false;
- QByteArray value = headerField("content-length");
+ // We are not using the headerField() method here because servers might send us multiple content-length
+ // headers which is crap (see QTBUG-15311). Therefore just take the first content-length header field.
+ QByteArray value;
+ QList<QPair<QByteArray, QByteArray> >::ConstIterator it = fields.constBegin(),
+ end = fields.constEnd();
+ for ( ; it != end; ++it)
+ if (qstricmp("content-length", it->first) == 0) {
+ value = it->second;
+ break;
+ }
+
qint64 length = value.toULongLong(&ok);
if (ok)
return length;
diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp
index 1c55482..3e98dcc 100644
--- a/src/network/access/qhttpnetworkreply.cpp
+++ b/src/network/access/qhttpnetworkreply.cpp
@@ -225,6 +225,11 @@ bool QHttpNetworkReply::isPipeliningUsed() const
return d_func()->pipeliningUsed;
}
+QHttpNetworkConnection* QHttpNetworkReply::connection()
+{
+ return d_func()->connection;
+}
+
QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl)
: QHttpNetworkHeaderPrivate(newUrl)
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h
index 02ce248..65d1887 100644
--- a/src/network/access/qhttpnetworkreply_p.h
+++ b/src/network/access/qhttpnetworkreply_p.h
@@ -136,6 +136,8 @@ public:
bool isPipeliningUsed() const;
+ QHttpNetworkConnection* connection();
+
#ifndef QT_NO_OPENSSL
QSslConfiguration sslConfiguration() const;
void setSslConfiguration(const QSslConfiguration &config);
@@ -154,7 +156,11 @@ Q_SIGNALS:
// FIXME we need to change this to qint64!
void dataReadProgress(int done, int total);
void dataSendProgress(qint64 done, qint64 total);
-
+ void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator);
+#ifndef QT_NO_NETWORKPROXY
+ void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
+#endif
+ void authenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *authenticator);
private:
Q_DECLARE_PRIVATE(QHttpNetworkReply)
friend class QHttpNetworkConnection;
diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp
index c3d765b..d4ecf43 100644
--- a/src/network/access/qnetworkaccessbackend.cpp
+++ b/src/network/access/qnetworkaccessbackend.cpp
@@ -88,18 +88,6 @@ QNetworkAccessBackendFactory::~QNetworkAccessBackendFactory()
QNetworkAccessBackend *QNetworkAccessManagerPrivate::findBackend(QNetworkAccessManager::Operation op,
const QNetworkRequest &request)
{
- QNetworkRequest::CacheLoadControl mode =
- static_cast<QNetworkRequest::CacheLoadControl>(
- request.attribute(QNetworkRequest::CacheLoadControlAttribute,
- QNetworkRequest::PreferNetwork).toInt());
- if (mode == QNetworkRequest::AlwaysCache
- && (op == QNetworkAccessManager::GetOperation
- || op == QNetworkAccessManager::HeadOperation)) {
- QNetworkAccessBackend *backend = new QNetworkAccessCacheBackend;
- backend->manager = this;
- return backend;
- }
-
if (!factoryDataShutdown) {
QMutexLocker locker(&factoryData()->mutex);
QNetworkAccessBackendFactoryData::ConstIterator it = factoryData()->constBegin(),
@@ -340,7 +328,7 @@ void QNetworkAccessBackend::authenticationRequired(QAuthenticator *authenticator
void QNetworkAccessBackend::cacheCredentials(QAuthenticator *authenticator)
{
- manager->addCredentials(this->reply->url, authenticator);
+ manager->cacheCredentials(this->reply->url, authenticator);
}
void QNetworkAccessBackend::metaDataChanged()
diff --git a/src/network/access/qnetworkaccessbackend_p.h b/src/network/access/qnetworkaccessbackend_p.h
index 9f8a01f..b9a832e 100644
--- a/src/network/access/qnetworkaccessbackend_p.h
+++ b/src/network/access/qnetworkaccessbackend_p.h
@@ -115,7 +115,6 @@ public:
virtual bool start();
#endif
virtual void closeDownstreamChannel() = 0;
- virtual bool waitForDownstreamReadyRead(int msecs) = 0;
// slot-like:
virtual void downstreamReadyWrite();
diff --git a/src/network/access/qnetworkaccesscachebackend.cpp b/src/network/access/qnetworkaccesscachebackend.cpp
index 73491a9..e78694e 100644
--- a/src/network/access/qnetworkaccesscachebackend.cpp
+++ b/src/network/access/qnetworkaccesscachebackend.cpp
@@ -132,18 +132,6 @@ void QNetworkAccessCacheBackend::closeUpstreamChannel()
Q_ASSERT_X(false, Q_FUNC_INFO, "This function show not have been called!");
}
-bool QNetworkAccessCacheBackend::waitForDownstreamReadyRead(int)
-{
- Q_ASSERT_X(false, Q_FUNC_INFO , "This function show not have been called!");
- return false;
-}
-
-bool QNetworkAccessCacheBackend::waitForUpstreamBytesWritten(int)
-{
- Q_ASSERT_X(false, Q_FUNC_INFO, "This function show not have been called!");
- return false;
-}
-
void QNetworkAccessCacheBackend::upstreamReadyRead()
{
Q_ASSERT_X(false, Q_FUNC_INFO, "This function show not have been called!");
diff --git a/src/network/access/qnetworkaccesscachebackend_p.h b/src/network/access/qnetworkaccesscachebackend_p.h
index df001ab..32581d5 100644
--- a/src/network/access/qnetworkaccesscachebackend_p.h
+++ b/src/network/access/qnetworkaccesscachebackend_p.h
@@ -69,8 +69,6 @@ public:
void open();
void closeDownstreamChannel();
void closeUpstreamChannel();
- bool waitForDownstreamReadyRead(int msecs);
- bool waitForUpstreamBytesWritten(int msecs);
void upstreamReadyRead();
void downstreamReadyWrite();
diff --git a/src/network/access/qnetworkaccessdebugpipebackend.cpp b/src/network/access/qnetworkaccessdebugpipebackend.cpp
index cd077e7..5f99f84 100644
--- a/src/network/access/qnetworkaccessdebugpipebackend.cpp
+++ b/src/network/access/qnetworkaccessdebugpipebackend.cpp
@@ -278,12 +278,6 @@ void QNetworkAccessDebugPipeBackend::socketConnected()
{
}
-bool QNetworkAccessDebugPipeBackend::waitForDownstreamReadyRead(int ms)
-{
- Q_UNUSED(ms);
- qCritical("QNetworkAccess: Debug pipe backend does not support waitForReadyRead()");
- return false;
-}
#endif
diff --git a/src/network/access/qnetworkaccessdebugpipebackend_p.h b/src/network/access/qnetworkaccessdebugpipebackend_p.h
index 58a4fd0..918a813 100644
--- a/src/network/access/qnetworkaccessdebugpipebackend_p.h
+++ b/src/network/access/qnetworkaccessdebugpipebackend_p.h
@@ -71,7 +71,6 @@ public:
virtual void open();
virtual void closeDownstreamChannel();
- virtual bool waitForDownstreamReadyRead(int msecs);
virtual void downstreamReadyWrite();
diff --git a/src/network/access/qnetworkaccessfilebackend.cpp b/src/network/access/qnetworkaccessfilebackend.cpp
index 710c258..cf4ce7c 100644
--- a/src/network/access/qnetworkaccessfilebackend.cpp
+++ b/src/network/access/qnetworkaccessfilebackend.cpp
@@ -208,12 +208,6 @@ void QNetworkAccessFileBackend::closeDownstreamChannel()
}
}
-bool QNetworkAccessFileBackend::waitForDownstreamReadyRead(int)
-{
- Q_ASSERT(operation() == QNetworkAccessManager::GetOperation);
- return readMoreFromFile();
-}
-
void QNetworkAccessFileBackend::downstreamReadyWrite()
{
Q_ASSERT_X(operation() == QNetworkAccessManager::GetOperation, "QNetworkAccessFileBackend",
diff --git a/src/network/access/qnetworkaccessfilebackend_p.h b/src/network/access/qnetworkaccessfilebackend_p.h
index 6df8710..d1dbe8d 100644
--- a/src/network/access/qnetworkaccessfilebackend_p.h
+++ b/src/network/access/qnetworkaccessfilebackend_p.h
@@ -69,7 +69,6 @@ public:
virtual void open();
virtual void closeDownstreamChannel();
- virtual bool waitForDownstreamReadyRead(int msecs);
virtual void downstreamReadyWrite();
diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp
index da336d0..1567d98 100644
--- a/src/network/access/qnetworkaccessftpbackend.cpp
+++ b/src/network/access/qnetworkaccessftpbackend.cpp
@@ -182,23 +182,6 @@ void QNetworkAccessFtpBackend::closeDownstreamChannel()
#endif
}
-bool QNetworkAccessFtpBackend::waitForDownstreamReadyRead(int ms)
-{
- if (!ftp)
- return false;
-
- if (ftp->bytesAvailable()) {
- ftpReadyRead();
- return true;
- }
-
- if (ms == 0)
- return false;
-
- qCritical("QNetworkAccess: FTP backend does not support waitForReadyRead()");
- return false;
-}
-
void QNetworkAccessFtpBackend::downstreamReadyWrite()
{
if (state == Transferring && ftp && ftp->bytesAvailable())
diff --git a/src/network/access/qnetworkaccessftpbackend_p.h b/src/network/access/qnetworkaccessftpbackend_p.h
index 737fa72..8a2bfc3 100644
--- a/src/network/access/qnetworkaccessftpbackend_p.h
+++ b/src/network/access/qnetworkaccessftpbackend_p.h
@@ -87,7 +87,6 @@ public:
virtual void open();
virtual void closeDownstreamChannel();
- virtual bool waitForDownstreamReadyRead(int msecs);
virtual void downstreamReadyWrite();
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index 8b9a99f..3c41d85 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -71,7 +71,7 @@ static QByteArray makeCacheKey(QNetworkAccessHttpBackend *backend, QNetworkProxy
QUrl copy = backend->url();
bool isEncrypted = copy.scheme().toLower() == QLatin1String("https");
copy.setPort(copy.port(isEncrypted ? DefaultHttpsPort : DefaultHttpPort));
- result = copy.toEncoded(QUrl::RemovePassword | QUrl::RemovePath |
+ result = copy.toEncoded(QUrl::RemoveUserInfo | QUrl::RemovePath |
QUrl::RemoveQuery | QUrl::RemoveFragment);
#ifndef QT_NO_NETWORKPROXY
@@ -338,24 +338,6 @@ void QNetworkAccessHttpBackend::finished()
QNetworkAccessBackend::finished();
}
-void QNetworkAccessHttpBackend::setupConnection()
-{
-#ifndef QT_NO_NETWORKPROXY
- connect(http, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
- SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
-#endif
- connect(http, SIGNAL(authenticationRequired(QHttpNetworkRequest,QAuthenticator*)),
- SLOT(httpAuthenticationRequired(QHttpNetworkRequest,QAuthenticator*)));
- connect(http, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)),
- SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*)));
- connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)),
- SLOT(httpError(QNetworkReply::NetworkError,QString)));
-#ifndef QT_NO_OPENSSL
- connect(http, SIGNAL(sslErrors(QList<QSslError>)),
- SLOT(sslErrors(QList<QSslError>)));
-#endif
-}
-
/*
For a given httpRequest
1) If AlwaysNetwork, return
@@ -367,10 +349,12 @@ void QNetworkAccessHttpBackend::validateCache(QHttpNetworkRequest &httpRequest,
QNetworkRequest::CacheLoadControl CacheLoadControlAttribute =
(QNetworkRequest::CacheLoadControl)request().attribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork).toInt();
if (CacheLoadControlAttribute == QNetworkRequest::AlwaysNetwork) {
- // forced reload from the network
- // tell any caching proxy servers to reload too
- httpRequest.setHeaderField("Cache-Control", "no-cache");
- httpRequest.setHeaderField("Pragma", "no-cache");
+ // If the request does not already specify preferred cache-control
+ // force reload from the network and tell any caching proxy servers to reload too
+ if (!request().rawHeaderList().contains("Cache-Control")) {
+ httpRequest.setHeaderField("Cache-Control", "no-cache");
+ httpRequest.setHeaderField("Pragma", "no-cache");
+ }
return;
}
@@ -596,12 +580,22 @@ void QNetworkAccessHttpBackend::postRequest()
if (pendingIgnoreAllSslErrors)
httpReply->ignoreSslErrors();
httpReply->ignoreSslErrors(pendingIgnoreSslErrorsList);
+ connect(httpReply, SIGNAL(sslErrors(QList<QSslError>)),
+ SLOT(sslErrors(QList<QSslError>)));
#endif
connect(httpReply, SIGNAL(finished()), SLOT(replyFinished()));
connect(httpReply, SIGNAL(finishedWithError(QNetworkReply::NetworkError,QString)),
SLOT(httpError(QNetworkReply::NetworkError,QString)));
connect(httpReply, SIGNAL(headerChanged()), SLOT(replyHeaderChanged()));
+ connect(httpReply, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)),
+ SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*)));
+#ifndef QT_NO_NETWORKPROXY
+ connect(httpReply, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
+ SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
+#endif
+ connect(httpReply, SIGNAL(authenticationRequired(const QHttpNetworkRequest,QAuthenticator*)),
+ SLOT(httpAuthenticationRequired(const QHttpNetworkRequest,QAuthenticator*)));
}
void QNetworkAccessHttpBackend::invalidateCache()
@@ -676,7 +670,6 @@ void QNetworkAccessHttpBackend::open()
cache->addEntry(cacheKey, http);
}
- setupConnection();
postRequest();
}
@@ -685,26 +678,6 @@ void QNetworkAccessHttpBackend::closeDownstreamChannel()
// this indicates that the user closed the stream while the reply isn't finished yet
}
-bool QNetworkAccessHttpBackend::waitForDownstreamReadyRead(int msecs)
-{
- Q_ASSERT(http);
-
- if (httpReply->bytesAvailable()) {
- readFromHttp();
- return true;
- }
-
- if (msecs == 0) {
- // no bytes available in the socket and no waiting
- return false;
- }
-
- // ### FIXME
- qCritical("QNetworkAccess: HTTP backend does not support waitForReadyRead()");
- return false;
-}
-
-
void QNetworkAccessHttpBackend::downstreamReadyWrite()
{
readFromHttp();
@@ -906,29 +879,6 @@ void QNetworkAccessHttpBackend::httpError(QNetworkReply::NetworkError errorCode,
#if defined(QNETWORKACCESSHTTPBACKEND_DEBUG)
qDebug() << "http error!" << errorCode << errorString;
#endif
-#if 0
- static const QNetworkReply::NetworkError conversionTable[] = {
- QNetworkReply::ConnectionRefusedError,
- QNetworkReply::RemoteHostClosedError,
- QNetworkReply::HostNotFoundError,
- QNetworkReply::UnknownNetworkError, // SocketAccessError
- QNetworkReply::UnknownNetworkError, // SocketResourceError
- QNetworkReply::TimeoutError, // SocketTimeoutError
- QNetworkReply::UnknownNetworkError, // DatagramTooLargeError
- QNetworkReply::UnknownNetworkError, // NetworkError
- QNetworkReply::UnknownNetworkError, // AddressInUseError
- QNetworkReply::UnknownNetworkError, // SocketAddressNotAvailableError
- QNetworkReply::UnknownNetworkError, // UnsupportedSocketOperationError
- QNetworkReply::UnknownNetworkError, // UnfinishedSocketOperationError
- QNetworkReply::ProxyAuthenticationRequiredError
- };
- QNetworkReply::NetworkError code;
- if (int(errorCode) >= 0 &&
- uint(errorCode) < (sizeof conversionTable / sizeof conversionTable[0]))
- code = conversionTable[errorCode];
- else
- code = QNetworkReply::UnknownNetworkError;
-#endif
error(errorCode, errorString);
finished();
}
diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h
index fb12781..fd3b2ec 100644
--- a/src/network/access/qnetworkaccesshttpbackend_p.h
+++ b/src/network/access/qnetworkaccesshttpbackend_p.h
@@ -79,7 +79,6 @@ public:
virtual void open();
virtual void closeDownstreamChannel();
- virtual bool waitForDownstreamReadyRead(int msecs);
virtual void downstreamReadyWrite();
virtual void setDownstreamLimited(bool b);
@@ -126,7 +125,6 @@ private:
quint64 resumeOffset;
void disconnectFromHttp();
- void setupConnection();
void validateCache(QHttpNetworkRequest &httpRequest, bool &loadedFromCache);
void invalidateCache();
void postRequest();
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index 8c17916..97e7928 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -53,6 +53,7 @@
#include "qnetworkaccessftpbackend_p.h"
#include "qnetworkaccessfilebackend_p.h"
#include "qnetworkaccessdebugpipebackend_p.h"
+#include "qnetworkaccesscachebackend_p.h"
#include "qnetworkreplydataimpl_p.h"
#include "qnetworkreplyfileimpl_p.h"
@@ -960,6 +961,26 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
return new QNetworkReplyDataImpl(this, req, op);
}
+ // A request with QNetworkRequest::AlwaysCache does not need any bearer management
+ QNetworkRequest::CacheLoadControl mode =
+ static_cast<QNetworkRequest::CacheLoadControl>(
+ req.attribute(QNetworkRequest::CacheLoadControlAttribute,
+ QNetworkRequest::PreferNetwork).toInt());
+ if (mode == QNetworkRequest::AlwaysCache
+ && (op == QNetworkAccessManager::GetOperation
+ || op == QNetworkAccessManager::HeadOperation)) {
+ // FIXME Implement a QNetworkReplyCacheImpl instead, see QTBUG-15106
+ QNetworkReplyImpl *reply = new QNetworkReplyImpl(this);
+ QNetworkReplyImplPrivate *priv = reply->d_func();
+ priv->manager = this;
+ priv->backend = new QNetworkAccessCacheBackend();
+ priv->backend->manager = this->d_func();
+ priv->backend->setParent(reply);
+ priv->backend->reply = priv;
+ priv->setup(op, req, outgoingData);
+ return reply;
+ }
+
#ifndef QT_NO_BEARERMANAGEMENT
// Return a disabled network reply if network access is disabled.
// Except if the scheme is empty or file://.
@@ -1014,16 +1035,8 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
priv->manager = this;
// second step: fetch cached credentials
- if (static_cast<QNetworkRequest::LoadControl>
- (request.attribute(QNetworkRequest::AuthenticationReuseAttribute,
- QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Automatic) {
- QNetworkAuthenticationCredential *cred = d->fetchCachedCredentials(url);
- if (cred) {
- url.setUserName(cred->user);
- url.setPassword(cred->password);
- priv->urlForLastAuthentication = url;
- }
- }
+ // This is not done for the time being, we should use signal emissions to request
+ // the credentials from cache.
// third step: find a backend
priv->backend = d->findBackend(op, request);
@@ -1105,7 +1118,9 @@ void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend
// don't try the cache for the same URL twice in a row
// being called twice for the same URL means the authentication failed
- if (url != backend->reply->urlForLastAuthentication) {
+ // also called when last URL is empty, e.g. on first call
+ if (backend->reply->urlForLastAuthentication.isEmpty()
+ || url != backend->reply->urlForLastAuthentication) {
QNetworkAuthenticationCredential *cred = fetchCachedCredentials(url, authenticator);
if (cred) {
authenticator->setUser(cred->user);
@@ -1117,7 +1132,7 @@ void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend
backend->reply->urlForLastAuthentication = url;
emit q->authenticationRequired(backend->reply->q_func(), authenticator);
- addCredentials(url, authenticator);
+ cacheCredentials(url, authenticator);
}
#ifndef QT_NO_NETWORKPROXY
@@ -1134,7 +1149,7 @@ void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBac
// possible solution: some tracking inside the authenticator
// or a new function proxyAuthenticationSucceeded(true|false)
if (proxy != backend->reply->lastProxyAuthentication) {
- QNetworkAuthenticationCredential *cred = fetchCachedCredentials(proxy);
+ QNetworkAuthenticationCredential *cred = fetchCachedProxyCredentials(proxy);
if (cred) {
authenticator->setUser(cred->user);
authenticator->setPassword(cred->password);
@@ -1144,10 +1159,10 @@ void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBac
backend->reply->lastProxyAuthentication = proxy;
emit q->proxyAuthenticationRequired(proxy, authenticator);
- addCredentials(proxy, authenticator);
+ cacheProxyCredentials(proxy, authenticator);
}
-void QNetworkAccessManagerPrivate::addCredentials(const QNetworkProxy &p,
+void QNetworkAccessManagerPrivate::cacheProxyCredentials(const QNetworkProxy &p,
const QAuthenticator *authenticator)
{
Q_ASSERT(authenticator);
@@ -1184,7 +1199,7 @@ void QNetworkAccessManagerPrivate::addCredentials(const QNetworkProxy &p,
}
QNetworkAuthenticationCredential *
-QNetworkAccessManagerPrivate::fetchCachedCredentials(const QNetworkProxy &p,
+QNetworkAccessManagerPrivate::fetchCachedProxyCredentials(const QNetworkProxy &p,
const QAuthenticator *authenticator)
{
QNetworkProxy proxy = p;
@@ -1236,7 +1251,7 @@ QList<QNetworkProxy> QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx
}
#endif
-void QNetworkAccessManagerPrivate::addCredentials(const QUrl &url,
+void QNetworkAccessManagerPrivate::cacheCredentials(const QUrl &url,
const QAuthenticator *authenticator)
{
Q_ASSERT(authenticator);
diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h
index 695842c..2c6ee10 100644
--- a/src/network/access/qnetworkaccessmanager_p.h
+++ b/src/network/access/qnetworkaccessmanager_p.h
@@ -91,15 +91,15 @@ public:
void createCookieJar() const;
void authenticationRequired(QNetworkAccessBackend *backend, QAuthenticator *authenticator);
- void addCredentials(const QUrl &url, const QAuthenticator *auth);
+ void cacheCredentials(const QUrl &url, const QAuthenticator *auth);
QNetworkAuthenticationCredential *fetchCachedCredentials(const QUrl &url,
const QAuthenticator *auth = 0);
#ifndef QT_NO_NETWORKPROXY
void proxyAuthenticationRequired(QNetworkAccessBackend *backend, const QNetworkProxy &proxy,
QAuthenticator *authenticator);
- void addCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth);
- QNetworkAuthenticationCredential *fetchCachedCredentials(const QNetworkProxy &proxy,
+ void cacheProxyCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth);
+ QNetworkAuthenticationCredential *fetchCachedProxyCredentials(const QNetworkProxy &proxy,
const QAuthenticator *auth = 0);
QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query);
#endif
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 4c4815c..010e904 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -64,10 +64,10 @@ inline QNetworkReplyImplPrivate::QNetworkReplyImplPrivate()
bytesDownloaded(0), lastBytesDownloaded(-1), bytesUploaded(-1), preMigrationDownloaded(-1),
httpStatusCode(0),
state(Idle)
- , downloadBuffer(0)
, downloadBufferReadPosition(0)
, downloadBufferCurrentSize(0)
, downloadBufferMaximumSize(0)
+ , downloadBuffer(0)
{
}
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp
index 09ec4c2..647eecb 100644
--- a/src/network/access/qnetworkrequest.cpp
+++ b/src/network/access/qnetworkrequest.cpp
@@ -194,16 +194,12 @@ QT_BEGIN_NAMESPACE
\value CookieLoadControlAttribute
Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic)
Indicates whether to send 'Cookie' headers in the request.
-
This attribute is set to false by QtWebKit when creating a cross-origin
XMLHttpRequest where withCredentials has not been set explicitly to true by the
Javascript that created the request.
-
See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag}{here} for more information.
-
(This value was introduced in 4.7.)
-
\value CookieSaveControlAttribute
Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic)
Indicates whether to save 'Cookie' headers received from the server in reply
@@ -211,9 +207,7 @@ QT_BEGIN_NAMESPACE
This attribute is set to false by QtWebKit when creating a cross-origin
XMLHttpRequest where withCredentials has not been set explicitly to true by the
Javascript that created the request.
-
See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag} {here} for more information.
-
(This value was introduced in 4.7.)
\value AuthenticationReuseAttribute
@@ -225,16 +219,12 @@ QT_BEGIN_NAMESPACE
This attribute is set to QNetworkRequest::Manual by QtWebKit when creating a cross-origin
XMLHttpRequest where withCredentials has not been set explicitly to true by the
Javascript that created the request.
-
See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag} {here} for more information.
-
(This value was introduced in 4.7.)
\omitvalue MaximumDownloadBufferSizeAttribute
- (This value was introduced in 4.7.)
\omitvalue DownloadBufferAttribute
- (This value was introduced in 4.7.)
\value User
Special type. Additional information can be passed in
@@ -909,10 +899,16 @@ void QNetworkHeadersPrivate::parseAndSetHeader(const QByteArray &key, const QByt
// is it a known header?
QNetworkRequest::KnownHeaders parsedKey = parseHeaderName(key);
if (parsedKey != QNetworkRequest::KnownHeaders(-1)) {
- if (value.isNull())
+ if (value.isNull()) {
cookedHeaders.remove(parsedKey);
- else
+ } else if (parsedKey == QNetworkRequest::ContentLengthHeader
+ && cookedHeaders.contains(QNetworkRequest::ContentLengthHeader)) {
+ // Only set the cooked header "Content-Length" once.
+ // See bug QTBUG-15311
+ } else {
cookedHeaders.insert(parsedKey, parseHeaderValue(parsedKey, value));
+ }
+
}
}
diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp
index 23d7800..4c149a2 100644
--- a/src/network/bearer/qnetworkconfigmanager.cpp
+++ b/src/network/bearer/qnetworkconfigmanager.cpp
@@ -229,8 +229,8 @@ QNetworkConfigurationManager::QNetworkConfigurationManager( QObject* parent )
QNetworkConfigurationManager::~QNetworkConfigurationManager()
{
QNetworkConfigurationManagerPrivate *priv = connManager();
-
- priv->disablePolling();
+ if (priv)
+ priv->disablePolling();
}
@@ -245,7 +245,11 @@ QNetworkConfigurationManager::~QNetworkConfigurationManager()
*/
QNetworkConfiguration QNetworkConfigurationManager::defaultConfiguration() const
{
- return connManager()->defaultConfiguration();
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ return priv->defaultConfiguration();
+
+ return QNetworkConfiguration();
}
/*!
@@ -275,7 +279,11 @@ QNetworkConfiguration QNetworkConfigurationManager::defaultConfiguration() const
*/
QList<QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(QNetworkConfiguration::StateFlags filter) const
{
- return connManager()->allConfigurations(filter);
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ return priv->allConfigurations(filter);
+
+ return QList<QNetworkConfiguration>();
}
/*!
@@ -286,7 +294,11 @@ QList<QNetworkConfiguration> QNetworkConfigurationManager::allConfigurations(QNe
*/
QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(const QString &identifier) const
{
- return connManager()->configurationFromIdentifier(identifier);
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ return priv->configurationFromIdentifier(identifier);
+
+ return QNetworkConfiguration();
}
/*!
@@ -301,7 +313,11 @@ QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier(
*/
bool QNetworkConfigurationManager::isOnline() const
{
- return connManager()->isOnline();
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ return priv->isOnline();
+
+ return false;
}
/*!
@@ -309,7 +325,11 @@ bool QNetworkConfigurationManager::isOnline() const
*/
QNetworkConfigurationManager::Capabilities QNetworkConfigurationManager::capabilities() const
{
- return connManager()->capabilities();
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ return priv->capabilities();
+
+ return QNetworkConfigurationManager::Capabilities(0);
}
/*!
@@ -328,7 +348,9 @@ QNetworkConfigurationManager::Capabilities QNetworkConfigurationManager::capabil
*/
void QNetworkConfigurationManager::updateConfigurations()
{
- connManager()->performAsyncConfigurationUpdate();
+ QNetworkConfigurationManagerPrivate *priv = connManager();
+ if (priv)
+ priv->performAsyncConfigurationUpdate();
}
#include "moc_qnetworkconfigmanager.cpp"
diff --git a/src/network/bearer/qnetworksession.cpp b/src/network/bearer/qnetworksession.cpp
index 65de539..226c3c5 100644
--- a/src/network/bearer/qnetworksession.cpp
+++ b/src/network/bearer/qnetworksession.cpp
@@ -489,15 +489,15 @@ QString QNetworkSession::errorString() const
configuration resolved to when \l open() was called; otherwise an empty string.
The purpose of this key is to determine the real QNetworkConfiguration that the
- session is using. This key is different to \i ActiveConfiguration in that
+ session is using. This key is different from \e ActiveConfiguration in that
this key may return an identifier for either a
\l {QNetworkConfiguration::ServiceNetwork}{service network} or a
- \l {QNetworkConfiguration::InternetAccessPoint}{Internet access points} configurations
- whereas \i ActiveConfiguration always returns identifiers to
+ \l {QNetworkConfiguration::InternetAccessPoint}{Internet access points} configurations,
+ whereas \e ActiveConfiguration always returns identifiers to
\l {QNetworkConfiguration::InternetAccessPoint}{Internet access points} configurations.
\row
\o ConnectInBackground
- \o Setting this property to \i true before calling \l open() implies that the connection attempt
+ \o Setting this property to \e true before calling \l open() implies that the connection attempt
is made but if no connection can be established, the user is not connsulted and asked to select
a suitable connection. This property is not set by default and support for it depends on the platform.
diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index f97d833..73f6b94 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -164,9 +164,13 @@ QAuthenticator &QAuthenticator::operator=(const QAuthenticator &other)
{
if (d == other.d)
return *this;
- detach();
- d->user = other.d->user;
- d->password = other.d->password;
+
+ if (d && !d->ref.deref())
+ delete d;
+
+ d = other.d;
+ if (d)
+ d->ref.ref();
return *this;
}
@@ -232,19 +236,21 @@ void QAuthenticator::setUser(const QString &user)
//domain name is present
d->realm.clear();
d->userDomain = user.left(separatorPosn);
- d->user = user.mid(separatorPosn + 1);
+ d->extractedUser = user.mid(separatorPosn + 1);
+ d->user = user;
} else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) {
//domain name is present
d->realm.clear();
d->userDomain = user.left(separatorPosn);
- d->user = user.left(separatorPosn);
+ d->extractedUser = user.left(separatorPosn);
+ d->user = user;
} else {
+ d->extractedUser = user;
d->user = user;
d->realm.clear();
d->userDomain.clear();
}
break;
- // For other auth mechanisms, domain name will be part of username
default:
d->user = user;
break;
@@ -1196,7 +1202,7 @@ static QByteArray qCreatev2Hash(const QAuthenticatorPrivate *ctx,
Q_ASSERT(hashKey.size() == 16);
// Assuming the user and domain is always unicode in challenge
QByteArray message =
- qStringAsUcs2Le(ctx->user.toUpper()) +
+ qStringAsUcs2Le(ctx->extractedUser.toUpper()) +
qStringAsUcs2Le(phase3->domainStr);
phase3->v2Hash = qEncodeHmacMd5(hashKey, message);
@@ -1401,8 +1407,8 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
pb.domainStr = ctx->userDomain;
}
- offset = qEncodeNtlmString(pb.user, offset, ctx->user, unicode);
- pb.userStr = ctx->user;
+ offset = qEncodeNtlmString(pb.user, offset, ctx->extractedUser, unicode);
+ pb.userStr = ctx->extractedUser;
offset = qEncodeNtlmString(pb.workstation, offset, ctx->workstation, unicode);
pb.workstationStr = ctx->workstation;
diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h
index 4e09360..9f2e607 100644
--- a/src/network/kernel/qauthenticator_p.h
+++ b/src/network/kernel/qauthenticator_p.h
@@ -71,6 +71,7 @@ public:
QAtomicInt ref;
QString user;
+ QString extractedUser;
QString password;
QVariantHash options;
Method method;
diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp
index bc5a025..84f9517 100644
--- a/src/network/kernel/qnetworkproxy.cpp
+++ b/src/network/kernel/qnetworkproxy.cpp
@@ -426,7 +426,8 @@ template<> void QSharedDataPointer<QNetworkProxyPrivate>::detach()
QNetworkProxy::QNetworkProxy()
: d(0)
{
- globalNetworkProxy()->init();
+ if (QGlobalNetworkProxy *globalProxy = globalNetworkProxy())
+ globalProxy->init();
}
/*!
@@ -441,7 +442,8 @@ QNetworkProxy::QNetworkProxy(ProxyType type, const QString &hostName, quint16 po
const QString &user, const QString &password)
: d(new QNetworkProxyPrivate(type, hostName, port, user, password))
{
- globalNetworkProxy()->init();
+ if (QGlobalNetworkProxy *globalProxy = globalNetworkProxy())
+ globalProxy->init();
}
/*!
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index 66cdffb..c638e2a 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -1210,6 +1210,36 @@ void QAbstractSocketPrivate::fetchConnectionParameters()
#endif
}
+
+void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket)
+{
+ QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
+ if (!socketEngine)
+ return;
+ socket->d_func()->prePauseReadSocketNotifierState = socketEngine->isReadNotificationEnabled();
+ socket->d_func()->prePauseWriteSocketNotifierState = socketEngine->isWriteNotificationEnabled();
+ socket->d_func()->prePauseExceptionSocketNotifierState = socketEngine->isExceptionNotificationEnabled();
+ socketEngine->setReadNotificationEnabled(false);
+ socketEngine->setWriteNotificationEnabled(false);
+ socketEngine->setExceptionNotificationEnabled(false);
+}
+
+void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket)
+{
+ QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
+ if (!socketEngine)
+ return;
+ socketEngine->setReadNotificationEnabled(socket->d_func()->prePauseReadSocketNotifierState);
+ socketEngine->setWriteNotificationEnabled(socket->d_func()->prePauseWriteSocketNotifierState);
+ socketEngine->setExceptionNotificationEnabled(socket->d_func()->prePauseExceptionSocketNotifierState);
+}
+
+QAbstractSocketEngine* QAbstractSocketPrivate::getSocketEngine(QAbstractSocket *socket)
+{
+ return socket->d_func()->socketEngine;
+}
+
+
/*! \internal
Constructs a new abstract socket of type \a socketType. The \a
diff --git a/src/network/socket/qabstractsocket.h b/src/network/socket/qabstractsocket.h
index f610db3..df09b92 100644
--- a/src/network/socket/qabstractsocket.h
+++ b/src/network/socket/qabstractsocket.h
@@ -64,6 +64,7 @@ class QAuthenticator;
class Q_NETWORK_EXPORT QAbstractSocket : public QIODevice
{
Q_OBJECT
+ Q_ENUMS(SocketType NetworkLayerProtocol SocketError SocketState SocketOption)
public:
enum SocketType {
TcpSocket,
diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h
index 6c333d3..8ca83fc 100644
--- a/src/network/socket/qabstractsocket_p.h
+++ b/src/network/socket/qabstractsocket_p.h
@@ -155,6 +155,13 @@ public:
QAbstractSocket::SocketState state;
QAbstractSocket::SocketError socketError;
+
+ bool prePauseReadSocketNotifierState;
+ bool prePauseWriteSocketNotifierState;
+ bool prePauseExceptionSocketNotifierState;
+ static void pauseSocketNotifiers(QAbstractSocket*);
+ static void resumeSocketNotifiers(QAbstractSocket*);
+ static QAbstractSocketEngine* getSocketEngine(QAbstractSocket*);
};
QT_END_NAMESPACE
diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp
index 560f5f6..c218d89 100644
--- a/src/network/socket/qlocalserver_unix.cpp
+++ b/src/network/socket/qlocalserver_unix.cpp
@@ -119,7 +119,7 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName)
// subsequent call to accept will not block in any case
//
// This change can be removed once more generic fix to select thread
- // syncronization problem is implemented.
+ // synchronization problem is implemented.
int flags = fcntl(listenSocket, F_GETFL, 0);
if (-1 == flags
|| -1 == (fcntl(listenSocket, F_SETFL, flags | O_NONBLOCK))) {
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index f952cee..dbf443e 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -714,6 +714,8 @@ bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &a, quint16 port)
address = QHostAddress(QHostAddress::Any);
}
break;
+ default:
+ break;
}
struct sockaddr_in sockAddrIPv4;
@@ -799,7 +801,7 @@ int QNativeSocketEnginePrivate::nativeAccept()
{
int acceptedDescriptor = WSAAccept(socketDescriptor, 0,0,0,0);
if (acceptedDescriptor != -1 && QAbstractEventDispatcher::instance()) {
- // Becuase of WSAAsyncSelect() WSAAccept returns a non blocking socket
+ // Because of WSAAsyncSelect() WSAAccept returns a non blocking socket
// with the same attributes as the listening socket including the current
// WSAAsyncSelect(). To be able to change the socket to blocking mode the
// WSAAsyncSelect() call must be cancled.
diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp
index f8f67bb..1760b53 100644
--- a/src/network/ssl/qsslconfiguration.cpp
+++ b/src/network/ssl/qsslconfiguration.cpp
@@ -485,9 +485,10 @@ void QSslConfiguration::setCiphers(const QList<QSslCipher> &ciphers)
/*!
Returns this connection's CA certificate database. The CA certificate
database is used by the socket during the handshake phase to
- validate the peer's certificate. It can be moodified prior to the
- handshake with addCaCertificate(), addCaCertificates(), and
- setCaCertificates().
+ validate the peer's certificate. It can be modified prior to the
+ handshake with setCaCertificates(), or with \l{QSslSocket}'s
+ \l{QSslSocket::}{addCaCertificate()} and
+ \l{QSslSocket::}{addCaCertificates()}.
\sa setCaCertificates()
*/
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index c9f421f..a752720 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -2035,6 +2035,20 @@ void QSslSocketPrivate::createPlainSocket(QIODevice::OpenMode openMode)
q->setReadBufferSize(readBufferMaxSize);
}
+void QSslSocketPrivate::pauseSocketNotifiers(QSslSocket *socket)
+{
+ if (!socket->d_func()->plainSocket)
+ return;
+ QAbstractSocketPrivate::pauseSocketNotifiers(socket->d_func()->plainSocket);
+}
+
+void QSslSocketPrivate::resumeSocketNotifiers(QSslSocket *socket)
+{
+ if (!socket->d_func()->plainSocket)
+ return;
+ QAbstractSocketPrivate::resumeSocketNotifiers(socket->d_func()->plainSocket);
+}
+
/*!
\internal
*/
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
index cd224df..70ef7ba 100644
--- a/src/network/ssl/qsslsocket_openssl.cpp
+++ b/src/network/ssl/qsslsocket_openssl.cpp
@@ -51,6 +51,7 @@
#include <QtCore/qdebug.h>
#include <QtCore/qdir.h>
#include <QtCore/qdiriterator.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qfile.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qmutex.h>
@@ -80,9 +81,6 @@ QT_BEGIN_NAMESPACE
bool QSslSocketPrivate::s_libraryLoaded = false;
bool QSslSocketPrivate::s_loadedCiphersAndCerts = false;
-// Useful defines
-#define SSL_ERRORSTR() QString::fromLocal8Bit(q_ERR_error_string(q_ERR_get_error(), NULL))
-
/* \internal
From OpenSSL's thread(3) manual page:
@@ -272,7 +270,7 @@ init_context:
}
// ### Bad error code
- q->setErrorString(QSslSocket::tr("Error creating SSL context (%1)").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error creating SSL context (%1)").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
@@ -297,7 +295,7 @@ init_context:
if (!q_SSL_CTX_set_cipher_list(ctx, cipherString.data())) {
// ### Bad error code
- q->setErrorString(QSslSocket::tr("Invalid or empty cipher list (%1)").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Invalid or empty cipher list (%1)").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
@@ -325,14 +323,14 @@ init_context:
if (!configuration.localCertificate.isNull()) {
// Require a private key as well.
if (configuration.privateKey.isNull()) {
- q->setErrorString(QSslSocket::tr("Cannot provide a certificate with no key, %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Cannot provide a certificate with no key, %1").arg(getErrorsFromOpenSsl()));
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
}
// Load certificate
if (!q_SSL_CTX_use_certificate(ctx, (X509 *)configuration.localCertificate.handle())) {
- q->setErrorString(QSslSocket::tr("Error loading local certificate, %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error loading local certificate, %1").arg(getErrorsFromOpenSsl()));
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
}
@@ -347,14 +345,14 @@ init_context:
else
q_EVP_PKEY_set1_DSA(pkey, (DSA *)configuration.privateKey.handle());
if (!q_SSL_CTX_use_PrivateKey(ctx, pkey)) {
- q->setErrorString(QSslSocket::tr("Error loading private key, %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error loading private key, %1").arg(getErrorsFromOpenSsl()));
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
}
// Check if the certificate matches the private key.
if (!q_SSL_CTX_check_private_key(ctx)) {
- q->setErrorString(QSslSocket::tr("Private key does not certify public key, %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Private key does not certify public key, %1").arg(getErrorsFromOpenSsl()));
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
}
@@ -374,7 +372,7 @@ init_context:
// Create and initialize SSL session
if (!(ssl = q_SSL_new(ctx))) {
// ### Bad error code
- q->setErrorString(QSslSocket::tr("Error creating SSL session, %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error creating SSL session, %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
@@ -389,7 +387,7 @@ init_context:
writeBio = q_BIO_new(q_BIO_s_mem());
if (!readBio || !writeBio) {
// ### Bad error code
- q->setErrorString(QSslSocket::tr("Error creating SSL session: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error creating SSL session: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return false;
@@ -574,7 +572,7 @@ void QSslSocketPrivate::resetDefaultCiphers()
#if defined(Q_OS_SYMBIAN)
CSymbianCertificateRetriever::CSymbianCertificateRetriever() : CActive(CActive::EPriorityStandard),
- iSequenceError(KErrNone)
+ iCertificatePtr(0,0,0), iSequenceError(KErrNone)
{
}
@@ -618,6 +616,11 @@ void CSymbianCertificateRetriever::doThreadEntryL()
iCertStore = CUnifiedCertStore::NewLC(qt_s60GetRFs(), EFalse);
iCertFilter = CCertAttributeFilter::NewLC();
+ // only interested in CA certs
+ iCertFilter->SetOwnerType(ECACertificate);
+ // only interested in X.509 format (we don't support WAP formats)
+ iCertFilter->SetFormat(EX509Certificate);
+
// Kick off the sequence by initializing the cert store
iState = Initializing;
iCertStore->Initialize(iStatus);
@@ -637,6 +640,7 @@ void CSymbianCertificateRetriever::doThreadEntryL()
TInt CSymbianCertificateRetriever::ThreadEntryPoint(TAny* aParams)
{
+ User::SetCritical(User::EProcessCritical);
CTrapCleanup* cleanupStack = CTrapCleanup::New();
CSymbianCertificateRetriever* self = (CSymbianCertificateRetriever*) aParams;
@@ -647,7 +651,7 @@ TInt CSymbianCertificateRetriever::ThreadEntryPoint(TAny* aParams)
if (err)
return err;
else
- return self->iSequenceError; // return any error that occured during the retrieval
+ return self->iSequenceError; // return any error that occurred during the retrieval
}
void CSymbianCertificateRetriever::ConstructL()
@@ -658,7 +662,17 @@ void CSymbianCertificateRetriever::ConstructL()
void CSymbianCertificateRetriever::DoCancel()
{
- // We never cancel the sequence
+ switch(iState) {
+ case Initializing:
+ iCertStore->CancelInitialize();
+ break;
+ case Listing:
+ iCertStore->CancelList();
+ break;
+ case RetrievingCertificates:
+ iCertStore->CancelGetCert();
+ break;
+ }
}
TInt CSymbianCertificateRetriever::RunError(TInt aError)
@@ -671,37 +685,51 @@ TInt CSymbianCertificateRetriever::RunError(TInt aError)
void CSymbianCertificateRetriever::GetCertificateL()
{
- CCTCertInfo* certInfo = iCertInfos[iCurrentCertIndex];
- iCertificateData.resize(certInfo->Size());
- TPtr8 des((TUint8*)iCertificateData.data(), 0, iCertificateData.size());
- iCertStore->Retrieve(*certInfo, des, iStatus);
- iState = RetrievingCertificates;
- SetActive();
+ if (iCurrentCertIndex < iCertInfos.Count()) {
+ CCTCertInfo* certInfo = iCertInfos[iCurrentCertIndex++];
+ iCertificateData = QByteArray();
+ QT_TRYCATCH_LEAVING(iCertificateData.resize(certInfo->Size()));
+ iCertificatePtr.Set((TUint8*)iCertificateData.data(), 0, iCertificateData.size());
+#ifdef QSSLSOCKET_DEBUG
+ qDebug() << "getting " << qt_TDesC2QString(certInfo->Label()) << " size=" << certInfo->Size();
+ qDebug() << "format=" << certInfo->CertificateFormat();
+ qDebug() << "ownertype=" << certInfo->CertificateOwnerType();
+ qDebug() << "type=" << hex << certInfo->Type().iUid;
+#endif
+ iCertStore->Retrieve(*certInfo, iCertificatePtr, iStatus);
+ iState = RetrievingCertificates;
+ SetActive();
+ } else {
+ //reached end of list
+ CActiveScheduler::Stop();
+ }
}
void CSymbianCertificateRetriever::RunL()
{
+#ifdef QSSLSOCKET_DEBUG
+ qDebug() << "CSymbianCertificateRetriever::RunL status " << iStatus.Int() << " count " << iCertInfos.Count() << " index " << iCurrentCertIndex;
+#endif
switch (iState) {
case Initializing:
+ User::LeaveIfError(iStatus.Int()); // initialise fail means pointless to continue
iState = Listing;
iCertStore->List(iCertInfos, *iCertFilter, iStatus);
SetActive();
break;
case Listing:
+ User::LeaveIfError(iStatus.Int()); // listing fail means pointless to continue
iCurrentCertIndex = 0;
GetCertificateL();
break;
case RetrievingCertificates:
- iCertificates->append(iCertificateData);
- iCertificateData = QByteArray();
- iCurrentCertIndex++;
- if (iCurrentCertIndex < iCertInfos.Count())
- GetCertificateL();
+ if (iStatus.Int() == KErrNone)
+ iCertificates->append(iCertificateData);
else
- // Stop the scheduler to return to the thread entry function
- CActiveScheduler::Stop();
+ qWarning() << "CSymbianCertificateRetriever: failed to retreive a certificate, error " << iStatus.Int();
+ GetCertificateL();
break;
}
}
@@ -710,6 +738,10 @@ void CSymbianCertificateRetriever::RunL()
QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates()
{
ensureInitialized();
+#ifdef QSSLSOCKET_DEBUG
+ QElapsedTimer timer;
+ timer.start();
+#endif
QList<QSslCertificate> systemCerts;
#if defined(Q_OS_MAC)
CFArrayRef cfCerts;
@@ -800,6 +832,7 @@ QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates()
systemCerts.append(QSslCertificate::fromPath(it.next()));
}
systemCerts.append(QSslCertificate::fromPath(QLatin1String("/etc/pki/tls/certs/ca-bundle.crt"), QSsl::Pem)); // Fedora, Mandriva
+ systemCerts.append(QSslCertificate::fromPath(QLatin1String("/usr/local/share/certs/ca-root-nss.crt"), QSsl::Pem)); // FreeBSD's ca_root_nss
#elif defined(Q_OS_SYMBIAN)
QList<QByteArray> certs;
@@ -808,10 +841,18 @@ QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates()
retriever->GetCertificates(certs);
foreach (const QByteArray &encodedCert, certs) {
QSslCertificate cert(encodedCert, QSsl::Der);
- if (!cert.isNull())
+ if (!cert.isNull()) {
+#ifdef QSSLSOCKET_DEBUG
+ qDebug() << "imported certificate: " << cert.issuerInfo(QSslCertificate::CommonName);
+#endif
systemCerts.append(cert);
+ }
}
#endif
+#ifdef QSSLSOCKET_DEBUG
+ qDebug() << "systemCaCertificates retrieval time " << timer.elapsed() << "ms";
+ qDebug() << "imported " << systemCerts.count() << " certificates";
+#endif
return systemCerts;
}
@@ -868,7 +909,7 @@ void QSslSocketBackendPrivate::transmit()
int writtenBytes = q_SSL_write(ssl, writeBuffer.readPointer(), nextDataBlockSize);
if (writtenBytes <= 0) {
// ### Better error handling.
- q->setErrorString(QSslSocket::tr("Unable to write data: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Unable to write data: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return;
@@ -931,7 +972,7 @@ void QSslSocketBackendPrivate::transmit()
plainSocket->read(data.data(), writtenToBio);
} else {
// ### Better error handling.
- q->setErrorString(QSslSocket::tr("Unable to decrypt data: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Unable to decrypt data: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return;
@@ -1009,7 +1050,7 @@ void QSslSocketBackendPrivate::transmit()
case SSL_ERROR_SSL: // error in the SSL library
// we do not know exactly what the error is, nor whether we can recover from it,
// so just return to prevent an endless loop in the outer "while" statement
- q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
return;
@@ -1019,7 +1060,7 @@ void QSslSocketBackendPrivate::transmit()
// SSL_ERROR_WANT_X509_LOOKUP: can only happen with a
// SSL_CTX_set_client_cert_cb(), which we do not call.
// So this default case should never be triggered.
- q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::UnknownSocketError);
emit q->error(QAbstractSocket::UnknownSocketError);
break;
@@ -1114,8 +1155,7 @@ bool QSslSocketBackendPrivate::startHandshake()
// The handshake is not yet complete.
break;
default:
- // ### Handle errors better
- q->setErrorString(QSslSocket::tr("Error during SSL handshake: %1").arg(SSL_ERRORSTR()));
+ q->setErrorString(QSslSocket::tr("Error during SSL handshake: %1").arg(getErrorsFromOpenSsl()));
q->setSocketError(QAbstractSocket::SslHandshakeFailedError);
#ifdef QSSLSOCKET_DEBUG
qDebug() << "QSslSocketBackendPrivate::startHandshake: error!" << q->errorString();
@@ -1291,6 +1331,19 @@ QList<QSslCertificate> QSslSocketBackendPrivate::STACKOFX509_to_QSslCertificates
return certificates;
}
+QString QSslSocketBackendPrivate::getErrorsFromOpenSsl()
+{
+ QString errorString;
+ unsigned long errNum;
+ while((errNum = q_ERR_get_error())) {
+ if (! errorString.isEmpty())
+ errorString.append(QLatin1String(", "));
+ const char *error = q_ERR_error_string(errNum, NULL);
+ errorString.append(QString::fromAscii(error)); // error is ascii according to man ERR_error_string
+ }
+ return errorString;
+}
+
bool QSslSocketBackendPrivate::isMatchingHostname(const QString &cn, const QString &hostname)
{
int wildcard = cn.indexOf(QLatin1Char('*'));
diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h
index dec98ae..878c654 100644
--- a/src/network/ssl/qsslsocket_openssl_p.h
+++ b/src/network/ssl/qsslsocket_openssl_p.h
@@ -117,6 +117,7 @@ public:
static QSslCipher QSslCipher_from_SSL_CIPHER(SSL_CIPHER *cipher);
static QList<QSslCertificate> STACKOFX509_to_QSslCertificates(STACK_OF(X509) *x509);
Q_AUTOTEST_EXPORT static bool isMatchingHostname(const QString &cn, const QString &hostname);
+ static QString getErrorsFromOpenSsl();
};
#if defined(Q_OS_SYMBIAN)
@@ -165,6 +166,7 @@ private:
CCertAttributeFilter* iCertFilter;
TInt iCurrentCertIndex;
QByteArray iCertificateData;
+ TPtr8 iCertificatePtr;
QList<QByteArray>* iCertificates;
TInt iSequenceError;
};
diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h
index 72b3ef7..94f5f39 100644
--- a/src/network/ssl/qsslsocket_p.h
+++ b/src/network/ssl/qsslsocket_p.h
@@ -142,6 +142,8 @@ public:
// The socket itself, including private slots.
QTcpSocket *plainSocket;
void createPlainSocket(QIODevice::OpenMode openMode);
+ static void pauseSocketNotifiers(QSslSocket*);
+ static void resumeSocketNotifiers(QSslSocket*);
void _q_connectedSlot();
void _q_hostFoundSlot();
void _q_disconnectedSlot();
diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
index 559a6fd..167a7d2 100644
--- a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
+++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
@@ -63,8 +63,9 @@ QGLRect QGL2PEXVertexArray::boundingRect() const
void QGL2PEXVertexArray::addClosingLine(int index)
{
- if (QPointF(vertexArray.at(index)) != QPointF(vertexArray.last()))
- vertexArray.add(vertexArray.at(index));
+ QPointF point(vertexArray.at(index));
+ if (point != QPointF(vertexArray.last()))
+ vertexArray.add(point);
}
void QGL2PEXVertexArray::addCentroid(const QVectorPath &path, int subPathIndex)
diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h b/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
index 46029b9..b8c1018 100644
--- a/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
+++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
@@ -93,7 +93,7 @@ struct QGLRect
GLfloat right;
GLfloat bottom;
- operator QRectF() {return QRectF(left, top, right-left, bottom-top);}
+ operator QRectF() const {return QRectF(left, top, right-left, bottom-top);}
};
class QGL2PEXVertexArray
diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h
index e5ababf..fa11dd7 100644
--- a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h
+++ b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h
@@ -72,7 +72,7 @@
The position shaders for brushes look scary. This is because many of the
calculations which logically belong in the fragment shader have been moved
into the vertex shader to improve performance. This is why the position
- calculation is in a seperate shader. Not only does it calculate the
+ calculation is in a separate shader. Not only does it calculate the
position, but it also calculates some data to be passed to the fragment
shader as a varying. It is optimal to move as much of the calculation as
possible into the vertex shader as this is executed less often.
@@ -455,7 +455,7 @@ public:
AttributeOpacity
};
- // There are optimisations we can do, depending on the brush transform:
+ // There are optimizations we can do, depending on the brush transform:
// 1) May not have to apply perspective-correction
// 2) Can use lower precision for matrix
void optimiseForBrushTransform(QTransform::TransformationType transformType);
diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h
index a7ece0f..0d30f9a 100644
--- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h
+++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h
@@ -340,12 +340,7 @@ static const char* const qglslImageSrcFragmentShader = "\n\
uniform lowp sampler2D imageTexture; \n\
lowp vec4 srcPixel() \n\
{ \n"
-#ifdef QT_OPENGL_ES_2
- // work-around for driver bug
- "return 1.0 * texture2D(imageTexture, textureCoords); \n"
-#else
"return texture2D(imageTexture, textureCoords); \n"
-#endif
"}\n";
static const char* const qglslCustomSrcFragmentShader = "\n\
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 025731d..85e4eab 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -102,7 +102,7 @@ extern Q_GUI_EXPORT bool qt_cleartype_enabled;
extern bool qt_applefontsmoothing_enabled;
#endif
-extern QImage qt_imageForBrush(int brushStyle, bool invert);
+Q_DECL_IMPORT extern QImage qt_imageForBrush(int brushStyle, bool invert);
////////////////////////////////// Private Methods //////////////////////////////////////////
@@ -825,7 +825,7 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cache->ibo);
- if (glSupportsElementIndexUint)
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quint32) * polys.indices.size(), polys.indices.data(), GL_STATIC_DRAW);
else
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quint16) * polys.indices.size(), polys.indices.data(), GL_STATIC_DRAW);
@@ -836,7 +836,7 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vertices.size(), vertices.data(), GL_STATIC_DRAW);
#else
cache->vertices = (float *) qMalloc(sizeof(float) * polys.vertices.size());
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
cache->indices = (quint32 *) qMalloc(sizeof(quint32) * polys.indices.size());
memcpy(cache->indices, polys.indices.data(), sizeof(quint32) * polys.indices.size());
} else {
@@ -853,7 +853,7 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cache->ibo);
setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, 0);
- if (glSupportsElementIndexUint)
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint)
glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, 0);
else
glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_SHORT, 0);
@@ -861,7 +861,7 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBindBuffer(GL_ARRAY_BUFFER, 0);
#else
setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, cache->vertices);
- if (glSupportsElementIndexUint)
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint)
glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, (qint32 *)cache->indices);
else
glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_SHORT, (qint16 *)cache->indices);
@@ -872,6 +872,35 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
// Tag it for later so that if the same path is drawn twice, it is assumed to be static and thus cachable
path.makeCacheable();
+ if (!device->format().stencil()) {
+ // If there is no stencil buffer, triangulate the path instead.
+
+ QRectF bbox = path.controlPointRect();
+ // If the path doesn't fit within these limits, it is possible that the triangulation will fail.
+ bool withinLimits = (bbox.left() > -0x8000 * inverseScale)
+ && (bbox.right() < 0x8000 * inverseScale)
+ && (bbox.top() > -0x8000 * inverseScale)
+ && (bbox.bottom() < 0x8000 * inverseScale);
+ if (withinLimits) {
+ QTriangleSet polys = qTriangulate(path, QTransform().scale(1 / inverseScale, 1 / inverseScale));
+
+ QVarLengthArray<float> vertices(polys.vertices.size());
+ for (int i = 0; i < polys.vertices.size(); ++i)
+ vertices[i] = float(inverseScale * polys.vertices.at(i));
+
+ prepareForDraw(currentBrush.isOpaque());
+ setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, vertices.constData());
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint)
+ glDrawElements(GL_TRIANGLES, polys.indices.size(), GL_UNSIGNED_INT, polys.indices.data());
+ else
+ glDrawElements(GL_TRIANGLES, polys.indices.size(), GL_UNSIGNED_SHORT, polys.indices.data());
+ } else {
+ // We can't handle big, concave painter paths with OpenGL without stencil buffer.
+ qWarning("Painter path exceeds +/-32767 pixels.");
+ }
+ return;
+ }
+
// The path is too complicated & needs the stencil technique
vertexCoordinateArray.clear();
vertexCoordinateArray.addPath(path, inverseScale, false);
@@ -1350,8 +1379,8 @@ void QGL2PaintEngineEx::drawStaticTextItem(QStaticTextItem *textItem)
ensureActive();
- QFontEngineGlyphCache::Type glyphType = textItem->fontEngine->glyphFormat >= 0
- ? QFontEngineGlyphCache::Type(textItem->fontEngine->glyphFormat)
+ QFontEngineGlyphCache::Type glyphType = textItem->fontEngine()->glyphFormat >= 0
+ ? QFontEngineGlyphCache::Type(textItem->fontEngine()->glyphFormat)
: d->glyphCacheType;
if (glyphType == QFontEngineGlyphCache::Raster_RGBMask) {
if (d->device->alphaRequested() || state()->matrix.type() > QTransform::TxTranslate
@@ -1430,7 +1459,7 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
{
QStaticTextItem staticTextItem;
staticTextItem.chars = const_cast<QChar *>(ti.chars);
- staticTextItem.fontEngine = ti.fontEngine;
+ staticTextItem.setFontEngine(ti.fontEngine);
staticTextItem.glyphs = glyphs.data();
staticTextItem.numChars = ti.num_chars;
staticTextItem.numGlyphs = glyphs.size();
@@ -1476,18 +1505,19 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
void *cacheKey = const_cast<QGLContext *>(QGLContextPrivate::contextGroup(ctx)->context());
QGLTextureGlyphCache *cache =
- (QGLTextureGlyphCache *) staticTextItem->fontEngine->glyphCache(cacheKey, glyphType, QTransform());
- if (!cache || cache->cacheType() != glyphType) {
+ (QGLTextureGlyphCache *) staticTextItem->fontEngine()->glyphCache(cacheKey, glyphType, QTransform());
+ if (!cache || cache->cacheType() != glyphType || cache->context() == 0) {
cache = new QGLTextureGlyphCache(ctx, glyphType, QTransform());
- staticTextItem->fontEngine->setGlyphCache(cacheKey, cache);
+ staticTextItem->fontEngine()->setGlyphCache(cacheKey, cache);
+ cache->insert(ctx, cache);
}
bool recreateVertexArrays = false;
if (staticTextItem->userDataNeedsUpdate)
recreateVertexArrays = true;
- else if (staticTextItem->userData == 0)
+ else if (staticTextItem->userData() == 0)
recreateVertexArrays = true;
- else if (staticTextItem->userData->type != QStaticTextUserData::OpenGLUserData)
+ else if (staticTextItem->userData()->type != QStaticTextUserData::OpenGLUserData)
recreateVertexArrays = true;
// We only need to update the cache with new glyphs if we are actually going to recreate the vertex arrays.
@@ -1495,8 +1525,8 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
// cache so this text is performed before we test if the cache size has changed.
if (recreateVertexArrays) {
cache->setPaintEnginePrivate(this);
- cache->populate(staticTextItem->fontEngine, staticTextItem->numGlyphs, staticTextItem->glyphs,
- staticTextItem->glyphPositions);
+ cache->populate(staticTextItem->fontEngine(), staticTextItem->numGlyphs,
+ staticTextItem->glyphs, staticTextItem->glyphPositions);
cache->fillInPendingGlyphs();
}
@@ -1517,14 +1547,14 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
if (staticTextItem->useBackendOptimizations) {
QOpenGLStaticTextUserData *userData = 0;
- if (staticTextItem->userData == 0
- || staticTextItem->userData->type != QStaticTextUserData::OpenGLUserData) {
+ if (staticTextItem->userData() == 0
+ || staticTextItem->userData()->type != QStaticTextUserData::OpenGLUserData) {
userData = new QOpenGLStaticTextUserData();
staticTextItem->setUserData(userData);
} else {
- userData = static_cast<QOpenGLStaticTextUserData*>(staticTextItem->userData);
+ userData = static_cast<QOpenGLStaticTextUserData*>(staticTextItem->userData());
}
// Use cache if backend optimizations is turned on
@@ -1543,7 +1573,7 @@ void QGL2PaintEngineExPrivate::drawCachedGlyphs(QFontEngineGlyphCache::Type glyp
vertexCoordinates->clear();
textureCoordinates->clear();
- bool supportsSubPixelPositions = staticTextItem->fontEngine->supportsSubPixelPositions();
+ bool supportsSubPixelPositions = staticTextItem->fontEngine()->supportsSubPixelPositions();
for (int i=0; i<staticTextItem->numGlyphs; ++i) {
QFixed subPixelPosition;
if (supportsSubPixelPositions)
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index b8576cb..7954d77 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -54,11 +54,11 @@ extern Q_GUI_EXPORT bool qt_cleartype_enabled;
#endif
QGLTextureGlyphCache::QGLTextureGlyphCache(const QGLContext *context, QFontEngineGlyphCache::Type type, const QTransform &matrix)
- : QImageTextureGlyphCache(type, matrix)
+ : QImageTextureGlyphCache(type, matrix), QGLContextGroupResourceBase()
, ctx(context)
, pex(0)
- , m_filterMode(Nearest)
, m_blitProgram(0)
+ , m_filterMode(Nearest)
{
#ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG
qDebug(" -> QGLTextureGlyphCache() %p for context %p.", this, ctx);
@@ -208,8 +208,8 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
{
QString source;
- source.append(qglslMainWithTexCoordsVertexShader);
- source.append(qglslUntransformedPositionVertexShader);
+ source.append(QLatin1String(qglslMainWithTexCoordsVertexShader));
+ source.append(QLatin1String(qglslUntransformedPositionVertexShader));
QGLShader *vertexShader = new QGLShader(QGLShader::Vertex, m_blitProgram);
vertexShader->compileSourceCode(source);
@@ -219,8 +219,8 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
{
QString source;
- source.append(qglslMainFragmentShader);
- source.append(qglslImageSrcFragmentShader);
+ source.append(QLatin1String(qglslMainFragmentShader));
+ source.append(QLatin1String(qglslImageSrcFragmentShader));
QGLShader *fragmentShader = new QGLShader(QGLShader::Fragment, m_blitProgram);
fragmentShader->compileSourceCode(source);
@@ -238,10 +238,10 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
glVertexAttribPointer(QT_TEXTURE_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, m_textureCoordinateArray);
m_blitProgram->bind();
- QGLContextPrivate* ctx_d = const_cast<QGLContextPrivate *>(ctx->d_func());
- ctx_d->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, true);
- ctx_d->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, true);
- ctx_d->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, false);
+ m_blitProgram->enableAttributeArray(int(QT_VERTEX_COORDS_ATTR));
+ m_blitProgram->enableAttributeArray(int(QT_TEXTURE_COORDS_ATTR));
+ m_blitProgram->disableAttributeArray(int(QT_OPACITY_ATTR));
+
blitProgram = m_blitProgram;
} else {
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index f75cf68..572da82 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -98,7 +98,7 @@ struct QGLGlyphTexture
int m_height;
};
-class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QImageTextureGlyphCache
+class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QImageTextureGlyphCache, public QGLContextGroupResourceBase
{
public:
QGLTextureGlyphCache(const QGLContext *context, QFontEngineGlyphCache::Type type, const QTransform &matrix);
@@ -140,6 +140,8 @@ public:
FilterMode filterMode() const { return m_filterMode; }
void setFilterMode(FilterMode m) { m_filterMode = m; }
+ void freeResource(void *) { ctx = 0; }
+
private:
QGLContextGroupResource<QGLGlyphTexture> m_textureResource;
diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp
index b839b00..85f604a 100644
--- a/src/opengl/gl2paintengineex/qtriangulator.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulator.cpp
@@ -58,7 +58,6 @@
#include <math.h>
#include <private/qgl_p.h>
-#include <private/qglextensions_p.h>
QT_BEGIN_NAMESPACE
@@ -3014,10 +3013,8 @@ void QTriangulator<T>::MonotoneToTriangles::decompose()
QTriangleSet qTriangulate(const qreal *polygon,
int count, uint hint, const QTransform &matrix)
{
- QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
-
QTriangleSet triangleSet;
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
QTriangulator<quint32> triangulator;
triangulator.initialize(polygon, count, hint, matrix);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
@@ -3037,10 +3034,8 @@ QTriangleSet qTriangulate(const qreal *polygon,
QTriangleSet qTriangulate(const QVectorPath &path,
const QTransform &matrix, qreal lod)
{
- QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
-
QTriangleSet triangleSet;
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
@@ -3059,10 +3054,8 @@ QTriangleSet qTriangulate(const QVectorPath &path,
QTriangleSet qTriangulate(const QPainterPath &path,
const QTransform &matrix, qreal lod)
{
- QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
-
QTriangleSet triangleSet;
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.triangulate();
@@ -3081,10 +3074,8 @@ QTriangleSet qTriangulate(const QPainterPath &path,
QPolylineSet qPolyline(const QVectorPath &path,
const QTransform &matrix, qreal lod)
{
- QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
-
QPolylineSet polyLineSet;
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.polyline();
@@ -3103,10 +3094,8 @@ QPolylineSet qPolyline(const QVectorPath &path,
QPolylineSet qPolyline(const QPainterPath &path,
const QTransform &matrix, qreal lod)
{
- QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
-
QPolylineSet polyLineSet;
- if (glSupportsElementIndexUint) {
+ if (QGLExtensions::glExtensions() & QGLExtensions::ElementIndexUint) {
QTriangulator<quint32> triangulator;
triangulator.initialize(path, matrix, lod);
QVertexSet<quint32> vertexSet = triangulator.polyline();
diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro
index c7ca4bc..682e620 100644
--- a/src/opengl/opengl.pro
+++ b/src/opengl/opengl.pro
@@ -11,7 +11,7 @@ unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
include(../qbase.pri)
-!win32:!embedded:!mac:!symbian:CONFIG += x11
+!win32:!embedded:!mac:!symbian:!qpa:CONFIG += x11
contains(QT_CONFIG, opengl):CONFIG += opengl
contains(QT_CONFIG, opengles1):CONFIG += opengles1
contains(QT_CONFIG, opengles2):CONFIG += opengles2
@@ -79,6 +79,11 @@ SOURCES += qgl.cpp \
}
+qpa {
+ SOURCES += qgl_qpa.cpp \
+ qglpixelbuffer_stub.cpp
+}
+
x11 {
contains(QT_CONFIG, egl) {
SOURCES += qgl_x11egl.cpp \
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index cb31491..cf45239 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -93,12 +93,15 @@
#include "qlibrary.h"
#include <qmutex.h>
+#ifdef QT_OPENGL_ES
+#include <EGL/egl.h>
+#endif
// #define QT_GL_CONTEXT_RESOURCE_DEBUG
QT_BEGIN_NAMESPACE
-#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs;
#endif
@@ -133,7 +136,12 @@ Q_GLOBAL_STATIC(QGLDefaultOverlayFormat, defaultOverlayFormatInstance)
Q_GLOBAL_STATIC(QGLSignalProxy, theSignalProxy)
QGLSignalProxy *QGLSignalProxy::instance()
{
- return theSignalProxy();
+ QGLSignalProxy *proxy = theSignalProxy();
+ if (proxy && proxy->thread() != qApp->thread()) {
+ if (proxy->thread() == QThread::currentThread())
+ proxy->moveToThread(qApp->thread());
+ }
+ return proxy;
}
@@ -1406,6 +1414,10 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags()
}
}
+#ifdef Q_WS_QPA
+ hasOpenGL(); // ### I have no idea why this is needed here, but it makes things work for testlite
+#endif
+
QString versionString(QLatin1String(reinterpret_cast<const char*>(glGetString(GL_VERSION))));
OpenGLVersionFlags versionFlags = qOpenGLVersionFlagsFromString(versionString);
if (currentCtx) {
@@ -1643,12 +1655,23 @@ const QGLContext *qt_gl_transfer_context(const QGLContext *ctx)
return 0;
}
+QGLContextPrivate::QGLContextPrivate(QGLContext *context)
+ : internal_context(false)
+ , q_ptr(context)
+{
+ group = new QGLContextGroup(context);
+ texture_destroyer = new QGLTextureDestroyer;
+ texture_destroyer->moveToThread(qApp->thread());
+}
+
QGLContextPrivate::~QGLContextPrivate()
{
if (!group->m_refs.deref()) {
Q_ASSERT(group->context() == q_ptr);
delete group;
}
+
+ delete texture_destroyer;
}
void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format)
@@ -1678,7 +1701,10 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format)
# endif
vi = 0;
#endif
-#ifndef QT_NO_EGL
+#if defined(Q_WS_QPA)
+ platformContext = 0;
+#endif
+#if !defined(QT_NO_EGL)
ownsEglContext = false;
eglContext = 0;
eglSurface = EGL_NO_SURFACE;
@@ -2118,7 +2144,7 @@ void QGLContextPrivate::syncGlState()
#undef ctx
#ifdef QT_NO_EGL
-void QGLContextPrivate::swapRegion(const QRegion *)
+void QGLContextPrivate::swapRegion(const QRegion &)
{
Q_Q(QGLContext);
q->swapBuffers();
@@ -2268,7 +2294,7 @@ static void convertToGLFormatHelper(QImage &dst, const QImage &img, GLenum textu
}
}
-#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
QGLExtensionFuncs& QGLContextPrivate::extensionFuncs(const QGLContext *)
{
return qt_extensionFuncs;
@@ -4189,7 +4215,7 @@ void QGLWidget::resizeOverlayGL(int, int)
/*! \fn bool QGLWidget::event(QEvent *e)
\reimp
*/
-#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS)
+#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
bool QGLWidget::event(QEvent *e)
{
Q_D(QGLWidget);
@@ -5325,8 +5351,6 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions()
glExtensions |= FragmentShader;
if (extensions.match("GL_ARB_shader_objects"))
glExtensions |= FragmentShader;
- if (extensions.match("GL_ARB_ES2_compatibility"))
- glExtensions |= ES2Compatibility;
if (extensions.match("GL_ARB_texture_mirrored_repeat"))
glExtensions |= MirroredRepeat;
if (extensions.match("GL_EXT_framebuffer_object"))
@@ -5347,7 +5371,6 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions()
glExtensions |= FramebufferObject;
glExtensions |= GenerateMipmap;
glExtensions |= FragmentShader;
- glExtensions |= ES2Compatibility;
#endif
#if defined(QT_OPENGL_ES_1)
if (extensions.match("GL_OES_framebuffer_object"))
@@ -5356,6 +5379,12 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions()
#if defined(QT_OPENGL_ES)
if (extensions.match("GL_OES_packed_depth_stencil"))
glExtensions |= PackedDepthStencil;
+ if (extensions.match("GL_OES_element_index_uint"))
+ glExtensions |= ElementIndexUint;
+ if (extensions.match("GL_OES_depth24"))
+ glExtensions |= Depth24;
+#else
+ glExtensions |= ElementIndexUint;
#endif
if (extensions.match("GL_ARB_framebuffer_object")) {
// ARB_framebuffer_object also includes EXT_framebuffer_blit.
@@ -5432,7 +5461,7 @@ void QGLWidgetPrivate::initContext(QGLContext *context, const QGLWidget* shareWi
glcx = new QGLContext(QGLFormat::defaultFormat(), q);
}
-#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS)
+#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA)
Q_GLOBAL_STATIC(QString, qt_gl_lib_name)
Q_OPENGL_EXPORT void qt_set_gl_library_name(const QString& name)
diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h
index 2ac4cb6..4f10e5c 100644
--- a/src/opengl/qgl.h
+++ b/src/opengl/qgl.h
@@ -425,6 +425,7 @@ private:
friend class QGLSharedResourceGuard;
friend class QGLPixmapBlurFilter;
friend class QGLExtensions;
+ friend class QGLTexture;
friend QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags();
#ifdef Q_WS_MAC
public:
diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp
index c79c4cd..8902099 100644
--- a/src/opengl/qgl_egl.cpp
+++ b/src/opengl/qgl_egl.cpp
@@ -88,7 +88,7 @@ void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLForma
// put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit,
// we must set the red/green/blue sizes to zero. This has an unfortunate consequence that
// if the application sets the red/green/blue size to 5/6/5 on the QGLFormat, they will
- // probably get a 32-bit config, even when there's an RGB565 config avaliable. Oh well.
+ // probably get a 32-bit config, even when there's an RGB565 config available. Oh well.
// Now normalize the values so -1 becomes 0
redSize = redSize > 0 ? redSize : 0;
@@ -276,12 +276,12 @@ EGLSurface QGLContextPrivate::eglSurfaceForDevice() const
return eglSurface;
}
-void QGLContextPrivate::swapRegion(const QRegion *region)
+void QGLContextPrivate::swapRegion(const QRegion &region)
{
if (!valid || !eglContext)
return;
- eglContext->swapBuffersRegion2NOK(eglSurfaceForDevice(), region);
+ eglContext->swapBuffersRegion2NOK(eglSurfaceForDevice(), &region);
}
void QGLWidget::setMouseTracking(bool enable)
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 78f888a..8285f06 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -68,6 +68,10 @@
#include <QtGui/private/qegl_p.h>
#endif
+#if defined(Q_WS_QPA)
+#include <QtGui/QPlatformGLContext>
+#endif
+
QT_BEGIN_NAMESPACE
class QGLContext;
@@ -161,7 +165,7 @@ class QGLWidgetPrivate : public QWidgetPrivate
public:
QGLWidgetPrivate() : QWidgetPrivate()
, disable_clear_on_painter_begin(false)
-#ifdef Q_WS_QWS
+#if defined(Q_WS_QWS)
, wsurf(0)
#endif
#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
@@ -283,7 +287,8 @@ public:
ETC1TextureCompression = 0x00010000,
PVRTCTextureCompression = 0x00020000,
FragmentShader = 0x00040000,
- ES2Compatibility = 0x00080000
+ ElementIndexUint = 0x00080000,
+ Depth24 = 0x00100000
};
Q_DECLARE_FLAGS(Extensions, Extension)
@@ -314,6 +319,7 @@ private:
};
class QGLTexture;
+class QGLTextureDestroyer;
// This probably needs to grow to GL_MAX_VERTEX_ATTRIBS, but 3 is ok for now as that's
// all the GL2 engine uses:
@@ -325,7 +331,7 @@ class QGLContextPrivate
{
Q_DECLARE_PUBLIC(QGLContext)
public:
- explicit QGLContextPrivate(QGLContext *context) : internal_context(false), q_ptr(context) {group = new QGLContextGroup(context);}
+ explicit QGLContextPrivate(QGLContext *context);
~QGLContextPrivate();
QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format,
QGLContext::BindOptions options);
@@ -342,7 +348,7 @@ public:
void setVertexAttribArrayEnabled(int arrayIndex, bool enabled = true);
void syncGlState(); // Makes sure the GL context's state is what we think it is
- void swapRegion(const QRegion *region);
+ void swapRegion(const QRegion &region);
#if defined(Q_WS_WIN)
void updateFormatVersion();
@@ -359,11 +365,14 @@ public:
Qt::HANDLE threadId;
#endif
#ifndef QT_NO_EGL
- uint ownsEglContext : 1;
QEglContext *eglContext;
EGLSurface eglSurface;
void destroyEglSurfaceForDevice();
EGLSurface eglSurfaceForDevice() const;
+#endif
+
+#if defined(Q_WS_QPA)
+ QPlatformGLContext *platformContext;
#elif defined(Q_WS_X11) || defined(Q_WS_MAC)
void* cx;
#endif
@@ -405,6 +414,10 @@ public:
uint workaround_brokenTextureFromPixmap : 1;
uint workaround_brokenTextureFromPixmap_init : 1;
+#ifndef QT_NO_EGL
+ uint ownsEglContext : 1;
+#endif
+
QPaintDevice *paintDevice;
QColor transpColor;
QGLContext *q_ptr;
@@ -418,6 +431,7 @@ public:
GLuint default_fbo;
QPaintEngine *active_engine;
QHash<QGLContextResourceBase *, void *> m_resources;
+ QGLTextureDestroyer *texture_destroyer;
bool vertexAttributeArraysEnabledState[QT_GL_VERTEX_ARRAY_TRACKED_COUNT];
@@ -427,7 +441,7 @@ public:
static inline QGLExtensionFuncs& extensionFuncs(const QGLContext *ctx) { return ctx->d_ptr->group->extensionFuncs(); }
#endif
-#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)
static Q_OPENGL_EXPORT QGLExtensionFuncs qt_extensionFuncs;
static Q_OPENGL_EXPORT QGLExtensionFuncs& extensionFuncs(const QGLContext *);
#endif
@@ -435,20 +449,6 @@ public:
static void setCurrentContext(QGLContext *context);
};
-// ### make QGLContext a QObject in 5.0 and remove the proxy stuff
-class Q_OPENGL_EXPORT QGLSignalProxy : public QObject
-{
- Q_OBJECT
-public:
- QGLSignalProxy() : QObject() {}
- void emitAboutToDestroyContext(const QGLContext *context) {
- emit aboutToDestroyContext(context);
- }
- static QGLSignalProxy *instance();
-Q_SIGNALS:
- void aboutToDestroyContext(const QGLContext *context);
-};
-
Q_DECLARE_OPERATORS_FOR_FLAGS(QGLExtensions::Extensions)
// Temporarily make a context current if not already current or
@@ -491,6 +491,56 @@ private:
QGLContext *m_ctx;
};
+class QGLTextureDestroyer : public QObject
+{
+ Q_OBJECT
+public:
+ QGLTextureDestroyer() : QObject() {
+ qRegisterMetaType<GLuint>("GLuint");
+ connect(this, SIGNAL(freeTexture(QGLContext *, QPixmapData *, GLuint)),
+ this, SLOT(freeTexture_slot(QGLContext *, QPixmapData *, GLuint)));
+ }
+ void emitFreeTexture(QGLContext *context, QPixmapData *boundPixmap, GLuint id) {
+ emit freeTexture(context, boundPixmap, id);
+ }
+
+Q_SIGNALS:
+ void freeTexture(QGLContext *context, QPixmapData *boundPixmap, GLuint id);
+
+private slots:
+ void freeTexture_slot(QGLContext *context, QPixmapData *boundPixmap, GLuint id) {
+#if defined(Q_WS_X11)
+ if (boundPixmap) {
+ QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext());
+ context->makeCurrent();
+ // Although glXReleaseTexImage is a glX call, it must be called while there
+ // is a current context - the context the pixmap was bound to a texture in.
+ // Otherwise the release doesn't do anything and you get BadDrawable errors
+ // when you come to delete the context.
+ QGLContextPrivate::unbindPixmapFromTexture(boundPixmap);
+ glDeleteTextures(1, &id);
+ oldContext->makeCurrent();
+ return;
+ }
+#endif
+ QGLShareContextScope scope(context);
+ glDeleteTextures(1, &id);
+ }
+};
+
+// ### make QGLContext a QObject in 5.0 and remove the proxy stuff
+class Q_OPENGL_EXPORT QGLSignalProxy : public QObject
+{
+ Q_OBJECT
+public:
+ void emitAboutToDestroyContext(const QGLContext *context) {
+ emit aboutToDestroyContext(context);
+ }
+ static QGLSignalProxy *instance();
+Q_SIGNALS:
+ void aboutToDestroyContext(const QGLContext *context);
+};
+
class QGLTexture {
public:
QGLTexture(QGLContext *ctx = 0, GLuint tx_id = 0, GLenum tx_target = GL_TEXTURE_2D,
@@ -507,16 +557,10 @@ public:
~QGLTexture() {
if (options & QGLContext::MemoryManagedBindOption) {
Q_ASSERT(context);
- QGLShareContextScope scope(context);
-#if defined(Q_WS_X11)
- // Although glXReleaseTexImage is a glX call, it must be called while there
- // is a current context - the context the pixmap was bound to a texture in.
- // Otherwise the release doesn't do anything and you get BadDrawable errors
- // when you come to delete the context.
- if (boundPixmap)
- QGLContextPrivate::unbindPixmapFromTexture(boundPixmap);
+#if !defined(Q_WS_X11)
+ QPixmapData *boundPixmap = 0;
#endif
- glDeleteTextures(1, &id);
+ context->d_ptr->texture_destroyer->emitFreeTexture(context, boundPixmap, id);
}
}
diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp
new file mode 100644
index 0000000..49c0860
--- /dev/null
+++ b/src/opengl/qgl_qpa.cpp
@@ -0,0 +1,345 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtOpenGL module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QtGui/private/qapplication_p.h>
+#include <QPixmap>
+#include <QDebug>
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/QPlatformWindow>
+
+#include "qgl.h"
+#include "qgl_p.h"
+
+QT_BEGIN_NAMESPACE
+
+static QGLFormat qt_platformwindowformat_to_glformat(const QPlatformWindowFormat &format)
+{
+ QGLFormat retFormat;
+ retFormat.setAccum(format.accum());
+ if (format.accumBufferSize() >= 0)
+ retFormat.setAccumBufferSize(format.accumBufferSize());
+ retFormat.setAlpha(format.alpha());
+ if (format.alphaBufferSize() >= 0)
+ retFormat.setAlphaBufferSize(format.alphaBufferSize());
+ if (format.blueBufferSize() >= 0)
+ retFormat.setBlueBufferSize(format.blueBufferSize());
+ retFormat.setDepth(format.depth());
+ if (format.depthBufferSize() >= 0)
+ retFormat.setDepthBufferSize(format.depthBufferSize());
+ retFormat.setDirectRendering(format.directRendering());
+ retFormat.setDoubleBuffer(format.doubleBuffer());
+ if (format.greenBufferSize() >= 0)
+ retFormat.setGreenBufferSize(format.greenBufferSize());
+ if (format.redBufferSize() >= 0)
+ retFormat.setRedBufferSize(format.redBufferSize());
+ retFormat.setRgba(format.rgba());
+ retFormat.setSampleBuffers(format.sampleBuffers());
+ retFormat.setSamples(format.sampleBuffers());
+ retFormat.setStencil(format.stencil());
+ if (format.stencilBufferSize() >= 0)
+ retFormat.setStencilBufferSize(format.stencilBufferSize());
+ retFormat.setStereo(format.stereo());
+ retFormat.setSwapInterval(format.swapInterval());
+ return retFormat;
+}
+
+static QPlatformWindowFormat qt_glformat_to_platformwindowformat(const QGLFormat &format)
+{
+ QPlatformWindowFormat retFormat;
+ retFormat.setAccum(format.accum());
+ if (format.accumBufferSize() >= 0)
+ retFormat.setAccumBufferSize(format.accumBufferSize());
+ retFormat.setAlpha(format.alpha());
+ if (format.alphaBufferSize() >= 0)
+ retFormat.setAlphaBufferSize(format.alphaBufferSize());
+ if (format.blueBufferSize() >= 0)
+ retFormat.setBlueBufferSize(format.blueBufferSize());
+ retFormat.setDepth(format.depth());
+ if (format.depthBufferSize() >= 0)
+ retFormat.setDepthBufferSize(format.depthBufferSize());
+ retFormat.setDirectRendering(format.directRendering());
+ retFormat.setDoubleBuffer(format.doubleBuffer());
+ if (format.greenBufferSize() >= 0)
+ retFormat.setGreenBufferSize(format.greenBufferSize());
+ if (format.redBufferSize() >= 0)
+ retFormat.setRedBufferSize(format.redBufferSize());
+ retFormat.setRgba(format.rgba());
+ retFormat.setSampleBuffers(format.sampleBuffers());
+ if (format.samples() >= 0)
+ retFormat.setSamples(format.samples());
+ retFormat.setStencil(format.stencil());
+ if (format.stencilBufferSize() >= 0)
+ retFormat.setStencilBufferSize(format.stencilBufferSize());
+ retFormat.setStereo(format.stereo());
+ retFormat.setSwapInterval(format.swapInterval());
+ return retFormat;
+}
+
+bool QGLFormat::hasOpenGL()
+{
+ return QApplicationPrivate::platformIntegration()->hasOpenGL();
+}
+
+bool QGLContext::chooseContext(const QGLContext* shareContext)
+{
+ Q_D(QGLContext);
+ if (!d->paintDevice || d->paintDevice->devType() != QInternal::Widget) {
+ d->valid = false;
+ }else {
+ QWidget *widget = static_cast<QWidget *>(d->paintDevice);
+ if (!widget->platformWindow()){
+ QGLFormat glformat = format();
+ QPlatformWindowFormat winFormat = qt_glformat_to_platformwindowformat(glformat);
+ if (shareContext) {
+ winFormat.setSharedContext(shareContext->d_func()->platformContext);
+ }
+ winFormat.setWindowApi(QPlatformWindowFormat::OpenGL);
+ widget->setPlatformWindowFormat(winFormat);
+ widget->winId();//make window
+ }
+ d->platformContext = widget->platformWindow()->glContext();
+ Q_ASSERT(d->platformContext);
+ d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat());
+ d->valid =(bool) d->platformContext;
+ }
+
+ return d->valid;
+}
+
+void QGLContext::reset()
+{
+ Q_D(QGLContext);
+ if (!d->valid)
+ return;
+ d->cleanup();
+
+ d->crWin = false;
+ d->sharing = false;
+ d->valid = false;
+ d->transpColor = QColor();
+ d->initDone = false;
+ QGLContextGroup::removeShare(this);
+}
+
+void QGLContext::makeCurrent()
+{
+ Q_D(QGLContext);
+ d->platformContext->makeCurrent();
+ QGLContextPrivate::setCurrentContext(this);
+}
+
+void QGLContext::doneCurrent()
+{
+ Q_D(QGLContext);
+ d->platformContext->doneCurrent();
+ QGLContextPrivate::setCurrentContext(0);
+}
+
+void QGLContext::swapBuffers() const
+{
+ Q_D(const QGLContext);
+ d->platformContext->swapBuffers();
+}
+
+void *QGLContext::getProcAddress(const QString &procName) const
+{
+ Q_D(const QGLContext);
+ return d->platformContext->getProcAddress(procName);
+}
+
+void QGLWidget::setContext(QGLContext *context,
+ const QGLContext* shareContext,
+ bool deleteOldContext)
+{
+ Q_D(QGLWidget);
+ if (context == 0) {
+ qWarning("QGLWidget::setContext: Cannot set null context");
+ return;
+ }
+ if (!context->deviceIsPixmap() && context->device() != this) {
+ qWarning("QGLWidget::setContext: Context must refer to this widget");
+ return;
+ }
+
+ QGLContext* oldcx = d->glcx;
+ d->glcx = context;
+
+ if (!d->glcx->isValid())
+ d->glcx->create(shareContext ? shareContext : oldcx);
+
+ if (deleteOldContext)
+ delete oldcx;
+}
+
+void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget)
+{
+ initContext(context, shareWidget);
+}
+
+bool QGLFormat::hasOpenGLOverlays()
+{
+ return false;
+}
+
+QColor QGLContext::overlayTransparentColor() const
+{
+ return QColor(); // Invalid color
+}
+
+uint QGLContext::colorIndex(const QColor&) const
+{
+ return 0;
+}
+
+void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase)
+{
+ Q_UNUSED(fnt);
+ Q_UNUSED(listBase);
+}
+
+/*
+ QGLTemporaryContext implementation
+*/
+class QGLTemporaryContextPrivate
+{
+public:
+ QWidget *widget;
+ QGLContext *context;
+};
+
+QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *)
+ : d(new QGLTemporaryContextPrivate)
+{
+ d->context = const_cast<QGLContext *>(QGLContext::currentContext());
+ if (d->context)
+ d->context->doneCurrent();
+ d->widget = new QWidget;
+ d->widget->setGeometry(0,0,3,3);
+ QPlatformWindowFormat format = d->widget->platformWindowFormat();
+ format.setWindowApi(QPlatformWindowFormat::OpenGL);
+ d->widget->winId();
+
+
+ d->widget->platformWindow()->glContext()->makeCurrent();
+}
+
+QGLTemporaryContext::~QGLTemporaryContext()
+{
+ d->widget->platformWindow()->glContext()->doneCurrent();
+ if (d->context)
+ d->context->makeCurrent();
+ delete d->widget;
+}
+
+
+bool QGLWidgetPrivate::renderCxPm(QPixmap*)
+{
+ return false;
+}
+
+/*! \internal
+ Free up any allocated colormaps. This fn is only called for
+ top-level widgets.
+*/
+void QGLWidgetPrivate::cleanupColormaps()
+{
+}
+
+void QGLWidget::setMouseTracking(bool enable)
+{
+ Q_UNUSED(enable);
+}
+
+bool QGLWidget::event(QEvent *e)
+{
+ Q_D(QGLWidget);
+ if (e->type() == QEvent::WinIdChange) {
+ if (d->glcx->isValid()) {
+ if (QGLContext::currentContext() == d->glcx)
+ QGLContextPrivate::setCurrentContext(0); //Its not valid anymore
+ setContext(new QGLContext(d->glcx->requestedFormat(), this));
+
+ }
+ }
+ return QWidget::event(e);
+}
+
+void QGLWidget::resizeEvent(QResizeEvent *e)
+{
+ Q_D(QGLWidget);
+ if (!isValid())
+ return;
+ makeCurrent();
+ if (!d->glcx->initialized())
+ glInit();
+ resizeGL(width(), height());
+ return QWidget::resizeEvent(e);
+}
+
+
+const QGLContext* QGLWidget::overlayContext() const
+{
+ return 0;
+}
+
+void QGLWidget::makeOverlayCurrent()
+{
+}
+
+
+void QGLWidget::updateOverlayGL()
+{
+}
+
+const QGLColormap & QGLWidget::colormap() const
+{
+ Q_D(const QGLWidget);
+ return d->cmap;
+}
+
+void QGLWidget::setColormap(const QGLColormap & c)
+{
+ Q_UNUSED(c);
+}
+
+QT_END_NAMESPACE
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index 1f7e60a..21b1ab6 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -376,7 +376,7 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pixmap, cons
checkedForEglImageTFP = true;
// We need to be able to create an EGLImage from a native pixmap, which was split
- // into a seperate EGL extension, EGL_KHR_image_pixmap. It is possible to have
+ // into a separate EGL extension, EGL_KHR_image_pixmap. It is possible to have
// eglCreateImageKHR & eglDestroyImageKHR without support for pixmaps, so we must
// check we have the EGLImage from pixmap functionality.
if (QEgl::hasExtension("EGL_KHR_image") || QEgl::hasExtension("EGL_KHR_image_pixmap")) {
diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h
index bf1dbbc..ffbc472 100644
--- a/src/opengl/qglextensions_p.h
+++ b/src/opengl/qglextensions_p.h
@@ -346,17 +346,6 @@ struct QGLExtensionFuncs
qt_glEGLImageTargetTexture2DOES = 0;
qt_glEGLImageTargetRenderbufferStorageOES = 0;
#endif
-
- // OES_element_index_uint
-#if !defined(QT_OPENGL_ES)
- qt_glSupportsElementIndexUint = true;
-#else
- QString extensions = reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS));
- if (extensions.contains("GL_OES_element_index_uint"))
- qt_glSupportsElementIndexUint = true;
- else
- qt_glSupportsElementIndexUint = false;
-#endif
}
@@ -483,8 +472,6 @@ struct QGLExtensionFuncs
_glEGLImageTargetTexture2DOES qt_glEGLImageTargetTexture2DOES;
_glEGLImageTargetRenderbufferStorageOES qt_glEGLImageTargetRenderbufferStorageOES;
#endif
-
- bool qt_glSupportsElementIndexUint;
};
@@ -576,6 +563,14 @@ struct QGLExtensionFuncs
#define GL_TEXTURE1 0x84C1
#endif
+#ifndef GL_DEPTH_COMPONENT16
+#define GL_DEPTH_COMPONENT16 0x81A5
+#endif
+
+#ifndef GL_DEPTH_COMPONENT24_OES
+#define GL_DEPTH_COMPONENT24_OES 0x81A6
+#endif
+
#ifndef GL_EXT_framebuffer_object
#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
@@ -883,8 +878,6 @@ struct QGLExtensionFuncs
#define glEGLImageTargetRenderbufferStorageOES QGLContextPrivate::extensionFuncs(ctx).qt_glEGLImageTargetRenderbufferStorageOES
#endif
-#define glSupportsElementIndexUint QGLContextPrivate::extensionFuncs(ctx).qt_glSupportsElementIndexUint
-
extern bool qt_resolve_framebufferobject_extensions(QGLContext *ctx);
bool Q_OPENGL_EXPORT qt_resolve_buffer_extensions(QGLContext *ctx);
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index 5d78ac0..8915b5e 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -324,6 +324,10 @@ void QGLFBOGLPaintDevice::setFBO(QGLFramebufferObject* f,
fboFormat.setStencil(true);
} else if (attachment == QGLFramebufferObject::Depth) {
fboFormat.setDepth(true);
+ fboFormat.setStencil(false);
+ } else {
+ fboFormat.setDepth(false);
+ fboFormat.setStencil(false);
}
GLenum format = f->format().internalTextureFormat();
@@ -508,17 +512,26 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz,
Q_ASSERT(glIsRenderbuffer(depth_buffer));
if (samples != 0 && glRenderbufferStorageMultisampleEXT) {
#ifdef QT_OPENGL_ES
-#define GL_DEPTH_COMPONENT16 0x81A5
- glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
- GL_DEPTH_COMPONENT16, size.width(), size.height());
+ if (QGLExtensions::glExtensions() & QGLExtensions::Depth24) {
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
+ GL_DEPTH_COMPONENT24_OES, size.width(), size.height());
+ } else {
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
+ GL_DEPTH_COMPONENT16, size.width(), size.height());
+ }
#else
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
GL_DEPTH_COMPONENT, size.width(), size.height());
#endif
} else {
#ifdef QT_OPENGL_ES
-#define GL_DEPTH_COMPONENT16 0x81A5
- glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, size.width(), size.height());
+ if (QGLExtensions::glExtensions() & QGLExtensions::Depth24) {
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24_OES,
+ size.width(), size.height());
+ } else {
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16,
+ size.width(), size.height());
+ }
#else
glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, size.width(), size.height());
#endif
@@ -1169,8 +1182,8 @@ void QGLFramebufferObject::drawTexture(const QPointF &point, QMacCompatGLuint te
}
#endif
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_DECL_IMPORT extern int qt_defaultDpiX();
+Q_DECL_IMPORT extern int qt_defaultDpiY();
/*! \reimp */
int QGLFramebufferObject::metric(PaintDeviceMetric metric) const
diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp
index 2ec345d..261d567 100644
--- a/src/opengl/qglpixelbuffer.cpp
+++ b/src/opengl/qglpixelbuffer.cpp
@@ -424,8 +424,8 @@ QPaintEngine *QGLPixelBuffer::paintEngine() const
#endif
}
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_DECL_IMPORT extern int qt_defaultDpiX();
+Q_DECL_IMPORT extern int qt_defaultDpiY();
/*! \reimp */
int QGLPixelBuffer::metric(PaintDeviceMetric metric) const
diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h
index 2a1f671..69678d0 100644
--- a/src/opengl/qglpixelbuffer_p.h
+++ b/src/opengl/qglpixelbuffer_p.h
@@ -197,6 +197,10 @@ public:
EGLSurface pbuf;
QEglContext *ctx;
int textureFormat;
+#elif defined(Q_WS_QPA)
+ //stubs
+ void *pbuf;
+ void *ctx;
#endif
};
diff --git a/src/opengl/qglpixelbuffer_stub.cpp b/src/opengl/qglpixelbuffer_stub.cpp
new file mode 100644
index 0000000..2caef6b
--- /dev/null
+++ b/src/opengl/qglpixelbuffer_stub.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtOpenGL module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qdebug.h>
+#include "qglpixelbuffer.h"
+#include "qglpixelbuffer_p.h"
+
+#include <qimage.h>
+#include <private/qgl_p.h>
+
+QT_BEGIN_NAMESPACE
+
+bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget)
+{
+ Q_UNUSED(size);
+ Q_UNUSED(f);
+ Q_UNUSED(shareWidget);
+ return false;
+}
+
+bool QGLPixelBufferPrivate::cleanup()
+{
+ return false;
+}
+
+bool QGLPixelBuffer::bindToDynamicTexture(GLuint texture_id)
+{
+ Q_UNUSED(texture_id);
+ return false;
+}
+
+void QGLPixelBuffer::releaseFromDynamicTexture()
+{
+}
+
+GLuint QGLPixelBuffer::generateDynamicTexture() const
+{
+ return 0;
+}
+
+bool QGLPixelBuffer::hasOpenGLPbuffers()
+{
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp
index 68586c1..73d698c 100644
--- a/src/opengl/qglpixmapfilter.cpp
+++ b/src/opengl/qglpixmapfilter.cpp
@@ -63,8 +63,8 @@
QT_BEGIN_NAMESPACE
// qpixmapfilter.cpp
-void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed = 0);
-QImage qt_halfScaled(const QImage &source);
+Q_DECL_IMPORT void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed = 0);
+Q_DECL_IMPORT QImage qt_halfScaled(const QImage &source);
void QGLPixmapFilterBase::bindTexture(const QPixmap &src) const
{
@@ -425,7 +425,7 @@ static inline uint nextMultiple(uint x, uint multiplier)
return x + multiplier - mod;
}
-void qt_memrotate90_gl(const quint32 *src, int srcWidth, int srcHeight, int srcStride,
+Q_DECL_IMPORT void qt_memrotate90_gl(const quint32 *src, int srcWidth, int srcHeight, int srcStride,
quint32 *dest, int dstStride);
bool QGLPixmapBlurFilter::processGL(QPainter *painter, const QPointF &pos, const QPixmap &src, const QRectF &) const
diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp
index bc1c009..74382b0 100644
--- a/src/opengl/qglshaderprogram.cpp
+++ b/src/opengl/qglshaderprogram.cpp
@@ -97,10 +97,6 @@ QT_BEGIN_NAMESPACE
to just features that are present in GLSL/ES, and avoid
standard variable names that only work on the desktop.
- If the \c{GL_ARB_ES2_compatibility} extension is present,
- then the above prefix is not added because the desktop OpenGL
- implementation supports precision qualifiers.
-
\section1 Simple shader example
\snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 1
@@ -398,10 +394,8 @@ bool QGLShader::compileSourceCode(const char *source)
srclen.append(GLint(headerLen));
}
#ifdef QGL_DEFINE_QUALIFIERS
- if (!(QGLExtensions::glExtensions() & QGLExtensions::ES2Compatibility)) {
- src.append(qualifierDefines);
- srclen.append(GLint(sizeof(qualifierDefines) - 1));
- }
+ src.append(qualifierDefines);
+ srclen.append(GLint(sizeof(qualifierDefines) - 1));
#endif
#ifdef QGL_REDEFINE_HIGHP
if (d->shaderType == Fragment) {
diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp
index 2f17aa6..a04d930 100644
--- a/src/opengl/qpaintengine_opengl.cpp
+++ b/src/opengl/qpaintengine_opengl.cpp
@@ -79,7 +79,7 @@
QT_BEGIN_NAMESPACE
-extern QImage qt_imageForBrush(int brushStyle, bool invert); //in qbrush.cpp
+Q_DECL_IMPORT extern QImage qt_imageForBrush(int brushStyle, bool invert); //in qbrush.cpp
#ifdef QT_MAC_USE_COCOA
extern void *qt_current_nsopengl_context(); // qgl_mac.mm
#endif
@@ -4918,7 +4918,7 @@ void QOpenGLPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
d->flushDrawQueue();
// make sure the glyphs we want to draw are in the cache
- qt_glyph_cache()->cacheGlyphs(d->device->context(), textItem->fontEngine, textItem->glyphs,
+ qt_glyph_cache()->cacheGlyphs(d->device->context(), textItem->fontEngine(), textItem->glyphs,
textItem->numGlyphs);
d->setGradientOps(Qt::SolidPattern, QRectF()); // turns off gradient ops
@@ -4941,13 +4941,13 @@ void QOpenGLPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- bool antialias = !(textItem->fontEngine->fontDef.styleStrategy & QFont::NoAntialias)
+ bool antialias = !(textItem->fontEngine()->fontDef.styleStrategy & QFont::NoAntialias)
&& (d->matrix.type() > QTransform::TxTranslate);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, antialias ? GL_LINEAR : GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, antialias ? GL_LINEAR : GL_NEAREST);
for (int i=0; i< textItem->numGlyphs; ++i) {
- QGLGlyphCoord *g = qt_glyph_cache()->lookup(textItem->fontEngine, textItem->glyphs[i]);
+ QGLGlyphCoord *g = qt_glyph_cache()->lookup(textItem->fontEngine(), textItem->glyphs[i]);
// we don't cache glyphs with no width/height
if (!g)
@@ -5003,7 +5003,7 @@ void QOpenGLPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte
{
QStaticTextItem staticTextItem;
staticTextItem.chars = const_cast<QChar *>(ti.chars);
- staticTextItem.fontEngine = ti.fontEngine;
+ staticTextItem.setFontEngine(ti.fontEngine);
staticTextItem.glyphs = glyphs.data();
staticTextItem.numChars = ti.num_chars;
staticTextItem.numGlyphs = glyphs.size();
diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp
index 89000bb..cd7f0c2 100644
--- a/src/opengl/qpixmapdata_gl.cpp
+++ b/src/opengl/qpixmapdata_gl.cpp
@@ -739,8 +739,8 @@ QGLTexture* QGLPixmapData::texture() const
return &m_texture;
}
-extern int qt_defaultDpiX();
-extern int qt_defaultDpiY();
+Q_DECL_IMPORT extern int qt_defaultDpiX();
+Q_DECL_IMPORT extern int qt_defaultDpiY();
int QGLPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
{
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index f000993..c0b223f 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -169,6 +169,7 @@ private:
friend class QGLPixmapGLPaintDevice;
friend class QMeeGoPixmapData;
+ friend class QMeeGoLivePixmapData;
};
QT_END_NAMESPACE
diff --git a/src/opengl/qpixmapdata_x11gl_egl.cpp b/src/opengl/qpixmapdata_x11gl_egl.cpp
index 2c11a0b..5cbc836 100644
--- a/src/opengl/qpixmapdata_x11gl_egl.cpp
+++ b/src/opengl/qpixmapdata_x11gl_egl.cpp
@@ -93,7 +93,7 @@ public:
if (rgbConfig == argbConfig)
argbContext = rgbContext;
- // Otherwise, create a seperate context to be used for ARGB pixmaps:
+ // Otherwise, create a separate context to be used for ARGB pixmaps:
if (!argbContext) {
argbContext = new QEglContext;
argbContext->setConfig(argbConfig);
@@ -314,7 +314,7 @@ QPaintEngine* QX11GLPixmapData::paintEngine() const
Q_ASSERT(ctx->d_func()->eglContext == 0);
ctx->d_func()->eglContext = hasAlphaChannel() ? sharedContexts()->argbContext : sharedContexts()->rgbContext;
- // While we use a seperate QGLContext for each pixmap, the underlying QEglContext is
+ // While we use a separate QGLContext for each pixmap, the underlying QEglContext is
// the same. So we must use a "fake" QGLContext and fool the texture cache into thinking
// each pixmap's QGLContext is sharing with this central one. The only place this is
// going to fail is where we the underlying EGL RGB and ARGB contexts aren't sharing.
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index 8157b2a..47f36dd 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -194,7 +194,7 @@ public:
widget = new QGLWidget(QGLFormat(QGL::SingleBuffer | QGL::NoDepthBuffer | QGL::NoStencilBuffer));
widget->resize(1, 1);
- // We dont need this internal widget to appear in QApplication::topLevelWidgets()
+ // We don't need this internal widget to appear in QApplication::topLevelWidgets()
if (QWidgetPrivate::allWidgets)
QWidgetPrivate::allWidgets->remove(widget);
initializing = false;
@@ -275,6 +275,8 @@ struct QGLWindowSurfacePrivate
QRegion paintedRegion;
QSize size;
+ QSize textureSize;
+
QList<QImage> buffers;
QGLWindowSurfaceGLPaintDevice glDevice;
QGLWindowSurface* q_ptr;
@@ -312,10 +314,11 @@ QPaintEngine *QGLWindowSurfaceGLPaintDevice::paintEngine() const
QGLWindowSurface::QGLWindowSurface(QWidget *window)
: QWindowSurface(window), d_ptr(new QGLWindowSurfacePrivate)
{
- Q_ASSERT(window->isTopLevel());
+// Q_ASSERT(window->isTopLevel());
d_ptr->pb = 0;
d_ptr->fbo = 0;
d_ptr->ctx = 0;
+ d_ptr->tex_id = 0;
#if defined (QT_OPENGL_ES_2)
d_ptr->tried_fbo = true;
d_ptr->tried_pb = true;
@@ -355,12 +358,12 @@ void QGLWindowSurface::deleted(QObject *object)
QWidgetPrivate *widgetPrivate = widget->d_func();
if (widgetPrivate->extraData()) {
- union { QGLContext **ctxPtr; void **voidPtr; };
- voidPtr = &widgetPrivate->extraData()->glContext;
- int index = d_ptr->contexts.indexOf(ctxPtr);
+ union { QGLContext **ctxPtrPtr; void **voidPtrPtr; };
+ voidPtrPtr = &widgetPrivate->extraData()->glContext;
+ int index = d_ptr->contexts.indexOf(ctxPtrPtr);
if (index != -1) {
- delete *ctxPtr;
- *ctxPtr = 0;
+ delete *ctxPtrPtr;
+ *ctxPtrPtr = 0;
d_ptr->contexts.removeAt(index);
}
}
@@ -394,16 +397,18 @@ void QGLWindowSurface::hijackWindow(QWidget *widget)
setPartialUpdateSupport(false); // Force full-screen updates
else
setPartialUpdateSupport(true);
+#else
+ setPartialUpdateSupport(false);
#endif
widgetPrivate->extraData()->glContext = ctx;
- union { QGLContext **ctxPtr; void **voidPtr; };
+ union { QGLContext **ctxPtrPtr; void **voidPtrPtr; };
connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(deleted(QObject*)));
- voidPtr = &widgetPrivate->extraData()->glContext;
- d_ptr->contexts << ctxPtr;
+ voidPtrPtr = &widgetPrivate->extraData()->glContext;
+ d_ptr->contexts << ctxPtrPtr;
qDebug() << "hijackWindow() context created for" << widget << d_ptr->contexts.size();
}
@@ -433,7 +438,7 @@ static void drawTexture(const QRectF &rect, GLuint tex_id, const QSize &texSize,
void QGLWindowSurface::beginPaint(const QRegion &)
{
- if (! context())
+ if (!context())
return;
int clearFlags = 0;
@@ -457,13 +462,42 @@ void QGLWindowSurface::endPaint(const QRegion &rgn)
d_ptr->buffers.clear();
}
-void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset)
+static void blitTexture(QGLContext *ctx, GLuint texture, const QSize &viewport, const QSize &texSize, const QRect &targetRect, const QRect &sourceRect)
{
- if (context() && widget != window()) {
- qWarning("No native child widget support in GL window surface without FBOs or pixel buffers");
- return;
- }
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_SCISSOR_TEST);
+ glDisable(GL_BLEND);
+
+ glViewport(0, 0, viewport.width(), viewport.height());
+
+ QGLShaderProgram *blitProgram =
+ QGLEngineSharedShaders::shadersForContext(ctx)->blitProgram();
+ blitProgram->bind();
+ blitProgram->setUniformValue("imageTexture", 0 /*QT_IMAGE_TEXTURE_UNIT*/);
+
+ // The shader manager's blit program does not multiply the
+ // vertices by the pmv matrix, so we need to do the effect
+ // of the orthographic projection here ourselves.
+ QRectF r;
+ qreal w = viewport.width();
+ qreal h = viewport.height();
+ r.setLeft((targetRect.left() / w) * 2.0f - 1.0f);
+ if (targetRect.right() == (viewport.width() - 1))
+ r.setRight(1.0f);
+ else
+ r.setRight((targetRect.right() / w) * 2.0f - 1.0f);
+ r.setBottom((targetRect.top() / h) * 2.0f - 1.0f);
+ if (targetRect.bottom() == (viewport.height() - 1))
+ r.setTop(1.0f);
+ else
+ r.setTop((targetRect.bottom() / w) * 2.0f - 1.0f);
+
+ drawTexture(r, texture, texSize, sourceRect);
+}
+
+void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset)
+{
//### Find out why d_ptr->geometry_updated isn't always false.
// flush() should not be called when d_ptr->geometry_updated is true. It assumes that either
// d_ptr->fbo or d_ptr->pb is allocated and has the correct size.
@@ -473,8 +507,13 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget();
Q_ASSERT(parent);
+#if !defined(Q_WS_QPA)
if (!geometry().isValid())
return;
+#else
+ if (!size().isValid())
+ return;
+#endif
// Needed to support native child-widgets...
hijackWindow(parent);
@@ -534,12 +573,29 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
}
}
#endif
- if (hasPartialUpdateSupport() &&
- d_ptr->paintedRegion.boundingRect().width() * d_ptr->paintedRegion.boundingRect().height() <
- geometry().width() * geometry().height() * 0.2) {
- context()->d_func()->swapRegion(&d_ptr->paintedRegion);
- } else
- context()->swapBuffers();
+ bool doingPartialUpdate = hasPartialUpdateSupport() && br.width() * br.height() < parent->geometry().width() * parent->geometry().height() * 0.2;
+ QGLContext *ctx = reinterpret_cast<QGLContext *>(parent->d_func()->extraData()->glContext);
+ if (widget != window()) {
+ if (initializeOffscreenTexture(window()->size()))
+ qWarning() << "QGLWindowSurface: Flushing to native child widget, may lead to significant performance loss";
+ glBindTexture(target, d_ptr->tex_id);
+
+ const uint bottom = window()->height() - (br.y() + br.height());
+ glCopyTexSubImage2D(target, 0, br.x(), bottom, br.x(), bottom, br.width(), br.height());
+
+ glBindTexture(target, 0);
+
+ ctx->makeCurrent();
+ if (doingPartialUpdate)
+ blitTexture(ctx, d_ptr->tex_id, parent->size(), window()->size(), rect, br);
+ else
+ blitTexture(ctx, d_ptr->tex_id, parent->size(), window()->size(), parent->rect(), parent->rect().translated(offset + wOffset));
+ }
+
+ if (doingPartialUpdate)
+ ctx->d_func()->swapRegion(br);
+ else
+ ctx->swapBuffers();
d_ptr->paintedRegion = QRegion();
} else {
@@ -665,38 +721,10 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
else if (d_ptr->fbo) {
Q_UNUSED(target);
- GLuint texture = d_ptr->fbo->texture();
-
- glDisable(GL_DEPTH_TEST);
-
if (d_ptr->fbo->isBound())
d_ptr->fbo->release();
- glViewport(0, 0, size.width(), size.height());
-
- QGLShaderProgram *blitProgram =
- QGLEngineSharedShaders::shadersForContext(ctx)->blitProgram();
- blitProgram->bind();
- blitProgram->setUniformValue("imageTexture", 0 /*QT_IMAGE_TEXTURE_UNIT*/);
-
- // The shader manager's blit program does not multiply the
- // vertices by the pmv matrix, so we need to do the effect
- // of the orthographic projection here ourselves.
- QRectF r;
- qreal w = size.width() ? size.width() : 1.0f;
- qreal h = size.height() ? size.height() : 1.0f;
- r.setLeft((rect.left() / w) * 2.0f - 1.0f);
- if (rect.right() == (size.width() - 1))
- r.setRight(1.0f);
- else
- r.setRight((rect.right() / w) * 2.0f - 1.0f);
- r.setBottom((rect.top() / h) * 2.0f - 1.0f);
- if (rect.bottom() == (size.height() - 1))
- r.setTop(1.0f);
- else
- r.setTop((rect.bottom() / w) * 2.0f - 1.0f);
-
- drawTexture(r, texture, window()->size(), br);
+ blitTexture(ctx, d_ptr->fbo->texture(), size, window()->size(), rect, br);
}
#endif
@@ -707,20 +735,31 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
}
+#if !defined(Q_WS_QPA)
void QGLWindowSurface::setGeometry(const QRect &rect)
{
QWindowSurface::setGeometry(rect);
d_ptr->geometry_updated = true;
}
-
+#else
+void QGLWindowSurface::resize(const QSize &size)
+{
+ QWindowSurface::resize(size);
+ d_ptr->geometry_updated = true;
+}
+#endif
void QGLWindowSurface::updateGeometry() {
if (!d_ptr->geometry_updated)
return;
d_ptr->geometry_updated = false;
+#ifdef Q_WS_QPA
+ QSize surfSize = size();
+#else
+ QSize surfSize = geometry().size();
+#endif
- QRect rect = geometry();
hijackWindow(window());
QGLContext *ctx = reinterpret_cast<QGLContext *>(window()->d_func()->extraData()->glContext);
@@ -730,21 +769,18 @@ void QGLWindowSurface::updateGeometry() {
const GLenum target = GL_TEXTURE_2D;
- if (rect.width() <= 0 || rect.height() <= 0)
+ if (surfSize.width() <= 0 || surfSize.height() <= 0)
return;
- if (d_ptr->size == rect.size())
+ if (d_ptr->size == surfSize)
return;
- d_ptr->size = rect.size();
+ d_ptr->size = surfSize;
if (d_ptr->ctx) {
#ifndef QT_OPENGL_ES_2
- if (d_ptr->destructive_swap_buffers) {
- glBindTexture(target, d_ptr->tex_id);
- glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
- glBindTexture(target, 0);
- }
+ if (d_ptr->destructive_swap_buffers)
+ initializeOffscreenTexture(surfSize);
#endif
return;
}
@@ -767,10 +803,10 @@ void QGLWindowSurface::updateGeometry() {
if (QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit)
format.setSamples(8);
- d_ptr->fbo = new QGLFramebufferObject(rect.size(), format);
+ d_ptr->fbo = new QGLFramebufferObject(surfSize, format);
if (d_ptr->fbo->isValid()) {
- qDebug() << "Created Window Surface FBO" << rect.size()
+ qDebug() << "Created Window Surface FBO" << surfSize
<< "with samples" << d_ptr->fbo->format().samples();
return;
} else {
@@ -791,7 +827,7 @@ void QGLWindowSurface::updateGeometry() {
delete d_ptr->pb;
- d_ptr->pb = new QGLPixelBuffer(rect.width(), rect.height(),
+ d_ptr->pb = new QGLPixelBuffer(surfSize.width(), surfSize.height(),
QGLFormat(QGL::SampleBuffers | QGL::StencilBuffer | QGL::DepthBuffer),
qt_gl_share_widget());
@@ -801,7 +837,7 @@ void QGLWindowSurface::updateGeometry() {
glGenTextures(1, &d_ptr->pb_tex_id);
glBindTexture(target, d_ptr->pb_tex_id);
- glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(target, 0, GL_RGBA, surfSize.width(), surfSize.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -824,15 +860,8 @@ void QGLWindowSurface::updateGeometry() {
ctx->makeCurrent();
#ifndef QT_OPENGL_ES_2
- if (d_ptr->destructive_swap_buffers) {
- glGenTextures(1, &d_ptr->tex_id);
- glBindTexture(target, d_ptr->tex_id);
- glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
-
- glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glBindTexture(target, 0);
- }
+ if (d_ptr->destructive_swap_buffers)
+ initializeOffscreenTexture(surfSize);
#endif
qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this;;
@@ -840,6 +869,23 @@ void QGLWindowSurface::updateGeometry() {
d_ptr->ctx->d_ptr->internal_context = true;
}
+bool QGLWindowSurface::initializeOffscreenTexture(const QSize &size)
+{
+ if (size == d_ptr->textureSize)
+ return false;
+
+ glGenTextures(1, &d_ptr->tex_id);
+ glBindTexture(GL_TEXTURE_2D, d_ptr->tex_id);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.width(), size.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
+
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glBindTexture(GL_TEXTURE_2D, 0);
+
+ d_ptr->textureSize = size;
+ return true;
+}
+
bool QGLWindowSurface::scroll(const QRegion &area, int dx, int dy)
{
// this code randomly fails currently for unknown reasons
diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h
index ffc2e86..4f4ec92 100644
--- a/src/opengl/qwindowsurface_gl_p.h
+++ b/src/opengl/qwindowsurface_gl_p.h
@@ -89,7 +89,13 @@ public:
QPaintDevice *paintDevice();
void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+
+#if !defined(Q_WS_QPA)
void setGeometry(const QRect &rect);
+#else
+ virtual void resize(const QSize &size);
+#endif
+
void updateGeometry();
bool scroll(const QRegion &area, int dx, int dy);
@@ -107,6 +113,7 @@ private slots:
private:
void hijackWindow(QWidget *widget);
+ bool initializeOffscreenTexture(const QSize &size);
QGLWindowSurfacePrivate *d_ptr;
};
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index f6d2435..aea203f 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -55,17 +55,14 @@
#include <QtGui/private/qfontengine_p.h>
#include <QtGui/private/qpainterpath_p.h>
#include <QtGui/private/qstatictext_p.h>
+#include <QtGui/QApplication>
+#include <QtGui/QDesktopWidget>
#include <QtCore/qmath.h>
#include <QDebug>
#include <QSet>
QT_BEGIN_NAMESPACE
-// vgDrawGlyphs() only exists in OpenVG 1.1 and higher.
-#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_DRAW_GLYPHS)
-#define QVG_NO_DRAW_GLYPHS 1
-#endif
-
// vgRenderToMask() only exists in OpenVG 1.1 and higher.
// Also, disable masking completely if we are using the scissor to clip.
#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_RENDER_TO_MASK)
@@ -75,11 +72,11 @@ QT_BEGIN_NAMESPACE
#define QVG_NO_RENDER_TO_MASK 1
#endif
-#if !defined(QVG_NO_DRAW_GLYPHS)
-
// use the same rounding as in qrasterizer.cpp (6 bit fixed point)
static const qreal aliasedCoordinateDelta = 0.5 - 0.015625;
+#if !defined(QVG_NO_DRAW_GLYPHS)
+
Q_DECL_IMPORT extern int qt_defaultDpiX();
Q_DECL_IMPORT extern int qt_defaultDpiY();
@@ -3065,6 +3062,21 @@ void qt_vg_drawVGImageStencil
vgDrawImage(vgImg);
}
+bool QVGPaintEngine::canVgWritePixels(const QImage &image) const
+{
+ Q_D(const QVGPaintEngine);
+ // vgWritePixels ignores masking, blending and xforms so we can only use it if
+ // ALL of the following conditions are true:
+ // - It is a simple translate, or a scale of -1 on the y-axis (inverted)
+ // - The opacity is totally opaque
+ // - The composition mode is "source" OR "source over" provided the image is opaque
+ return ( d->imageTransform.type() <= QTransform::TxScale
+ && d->imageTransform.m11() == 1.0 && qAbs(d->imageTransform.m22()) == 1.0)
+ && d->opacity == 1.0f
+ && (d->blendMode == VG_BLEND_SRC || (d->blendMode == VG_BLEND_SRC_OVER &&
+ !image.hasAlphaChannel()));
+}
+
void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
{
QPixmapData *pd = pm.pixmapData();
@@ -3079,9 +3091,18 @@ void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF
drawVGImage(d, r, vgpd->toVGImage(), vgpd->size(), sr);
else
drawVGImage(d, r, vgpd->toVGImage(d->opacity), vgpd->size(), sr);
- } else {
- drawImage(r, *(pd->buffer()), sr, Qt::AutoColor);
+
+ if(!vgpd->failedToAlloc)
+ return;
+
+ // try to reallocate next time if reasonable small pixmap
+ QSize screenSize = QApplication::desktop()->screenGeometry().size();
+ if (pm.size().width() <= screenSize.width()
+ && pm.size().height() <= screenSize.height())
+ vgpd->failedToAlloc = false;
}
+
+ drawImage(r, *(pd->buffer()), sr, Qt::AutoColor);
}
void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm)
@@ -3098,9 +3119,18 @@ void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm)
drawVGImage(d, pos, vgpd->toVGImage());
else
drawVGImage(d, pos, vgpd->toVGImage(d->opacity));
- } else {
- drawImage(pos, *(pd->buffer()));
+
+ if (!vgpd->failedToAlloc)
+ return;
+
+ // try to reallocate next time if reasonable small pixmap
+ QSize screenSize = QApplication::desktop()->screenGeometry().size();
+ if (pm.size().width() <= screenSize.width()
+ && pm.size().height() <= screenSize.height())
+ vgpd->failedToAlloc = false;
}
+
+ drawImage(pos, *(pd->buffer()));
}
void QVGPaintEngine::drawImage
@@ -3121,9 +3151,31 @@ void QVGPaintEngine::drawImage
QRectF(QPointF(0, 0), sr.size()));
}
} else {
- // Monochrome images need to use the vgChildImage() path.
- vgImg = toVGImage(image, flags);
- drawVGImage(d, r, vgImg, image.size(), sr);
+ if (canVgWritePixels(image) && (r.size() == sr.size()) && !flags) {
+ // Optimization for straight blits, no blending
+ int x = sr.x();
+ int y = sr.y();
+ int bpp = image.depth() >> 3; // bytes
+ int offset = 0;
+ int bpl = image.bytesPerLine();
+ if (d->imageTransform.m22() < 0) {
+ // inverted
+ offset = ((y + sr.height()) * bpl) - ((image.width() - x) * bpp);
+ bpl = -bpl;
+ } else {
+ offset = (y * bpl) + (x * bpp);
+ }
+ const uchar *bits = image.constBits() + offset;
+
+ QPointF mapped = d->imageTransform.map(r.topLeft());
+ vgWritePixels(bits, bpl, qt_vg_image_to_vg_format(image.format()),
+ mapped.x(), mapped.y() - sr.height(), r.width(), r.height());
+ return;
+ } else {
+ // Monochrome images need to use the vgChildImage() path.
+ vgImg = toVGImage(image, flags);
+ drawVGImage(d, r, vgImg, image.size(), sr);
+ }
}
vgDestroyImage(vgImg);
}
@@ -3132,10 +3184,21 @@ void QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image)
{
Q_D(QVGPaintEngine);
VGImage vgImg;
- if (d->simpleTransform || d->opacity == 1.0f)
+ if (canVgWritePixels(image)) {
+ // Optimization for straight blits, no blending
+ bool inverted = (d->imageTransform.m22() < 0);
+ const uchar *bits = inverted ? image.constBits() + image.byteCount() : image.constBits();
+ int bpl = inverted ? -image.bytesPerLine() : image.bytesPerLine();
+
+ QPointF mapped = d->imageTransform.map(pos);
+ vgWritePixels(bits, bpl, qt_vg_image_to_vg_format(image.format()),
+ mapped.x(), mapped.y() - image.height(), image.width(), image.height());
+ return;
+ } else if (d->simpleTransform || d->opacity == 1.0f) {
vgImg = toVGImage(image);
- else
+ } else {
vgImg = toVGImageWithOpacity(image, d->opacity);
+ }
drawVGImage(d, pos, vgImg);
vgDestroyImage(vgImg);
}
@@ -3412,7 +3475,7 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
{
- drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->font, textItem->fontEngine,
+ drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->font, textItem->fontEngine(),
QPointF(0, 0), textItem->glyphPositions);
}
@@ -3615,6 +3678,7 @@ void QVGPaintEngine::restoreState(QPaintEngine::DirtyFlags dirty)
d->maskIsSet = false;
d->scissorMask = false;
d->maskRect = QRect();
+ d->scissorDirty = true;
clipEnabledChanged();
}
diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h
index 75cf053..dc98137 100644
--- a/src/openvg/qpaintengine_vg_p.h
+++ b/src/openvg/qpaintengine_vg_p.h
@@ -170,6 +170,7 @@ private:
bool isDefaultClipRegion(const QRegion& region);
bool isDefaultClipRect(const QRect& rect);
bool clearRect(const QRectF &rect, const QColor &color);
+ bool canVgWritePixels(const QImage &image) const;
};
QT_END_NAMESPACE
diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index e8ec333..509882b 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -65,6 +65,7 @@ QVGPixmapData::QVGPixmapData(PixelType type)
recreate = true;
inImagePool = false;
inLRU = false;
+ failedToAlloc = false;
#if !defined(QT_NO_EGL)
context = 0;
qt_vg_register_pixmap(this);
@@ -155,6 +156,9 @@ void QVGPixmapData::resize(int wid, int ht)
void QVGPixmapData::fromImage
(const QImage &image, Qt::ImageConversionFlags flags)
{
+ if(image.isNull())
+ return;
+
QImage img = image;
createPixmapForImage(img, flags, false);
}
@@ -203,10 +207,19 @@ void QVGPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags
else
resize(image.width(), image.height());
- if (inPlace && image.data_ptr()->convertInPlace(sourceFormat(), flags))
+ QImage::Format format = sourceFormat();
+ int d = image.depth();
+ if (d == 1 || d == 16 || d == 24 || (d == 32 && !image.hasAlphaChannel()))
+ format = QImage::Format_RGB32;
+ else if (!(flags & Qt::NoOpaqueDetection) && const_cast<QImage &>(image).data_ptr()->checkForAlphaPixels())
+ format = sourceFormat();
+ else
+ format = QImage::Format_RGB32;
+
+ if (inPlace && image.data_ptr()->convertInPlace(format, flags))
source = image;
else
- source = image.convertToFormat(sourceFormat());
+ source = image.convertToFormat(format);
recreate = true;
}
@@ -278,7 +291,7 @@ QPaintEngine* QVGPixmapData::paintEngine() const
VGImage QVGPixmapData::toVGImage()
{
- if (!isValid())
+ if (!isValid() || failedToAlloc)
return VG_INVALID_HANDLE;
#if !defined(QT_NO_EGL)
@@ -294,11 +307,13 @@ VGImage QVGPixmapData::toVGImage()
if (vgImage == VG_INVALID_HANDLE) {
vgImage = QVGImagePool::instance()->createImageForPixmap
- (VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER, this);
+ (qt_vg_image_to_vg_format(source.format()), w, h, VG_IMAGE_QUALITY_FASTER, this);
// Bail out if we run out of GPU memory - try again next time.
- if (vgImage == VG_INVALID_HANDLE)
+ if (vgImage == VG_INVALID_HANDLE) {
+ failedToAlloc = true;
return VG_INVALID_HANDLE;
+ }
inImagePool = true;
} else if (inImagePool) {
@@ -309,7 +324,7 @@ VGImage QVGPixmapData::toVGImage()
vgImageSubData
(vgImage,
source.constBits(), source.bytesPerLine(),
- VG_sARGB_8888_PRE, 0, 0, w, h);
+ qt_vg_image_to_vg_format(source.format()), 0, 0, w, h);
}
recreate = false;
diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h
index 114d545..7ffdc85 100644
--- a/src/openvg/qpixmapdata_vg_p.h
+++ b/src/openvg/qpixmapdata_vg_p.h
@@ -143,7 +143,9 @@ private:
QVGPixmapData *nextLRU;
QVGPixmapData *prevLRU;
bool inLRU;
+ bool failedToAlloc;
friend class QVGImagePool;
+ friend class QVGPaintEngine;
#if !defined(QT_NO_EGL)
QVGPixmapData *next;
diff --git a/src/openvg/qvg_p.h b/src/openvg/qvg_p.h
index 51abbee..94d1eae 100644
--- a/src/openvg/qvg_p.h
+++ b/src/openvg/qvg_p.h
@@ -55,6 +55,11 @@
// We mean it.
//
+// vgDrawGlyphs() only exists in OpenVG 1.1 and higher.
+#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_DRAW_GLYPHS)
+#define QVG_NO_DRAW_GLYPHS 1
+#endif
+
#include <QtGui/qimage.h>
#if !defined(QT_NO_EGL)
diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp
index e97ade8..e4edfcb 100644
--- a/src/openvg/qvg_symbian.cpp
+++ b/src/openvg/qvg_symbian.cpp
@@ -165,7 +165,6 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap*>(pixmap);
bool deleteSourceBitmap = false;
-
#ifdef Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE
// Rasterize extended bitmaps
@@ -186,10 +185,11 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
QImage::Format format = qt_TDisplayMode2Format(displayMode);
TSize size = bitmap->SizeInPixels();
+ int bytesPerLine = bitmap->ScanLineLength(size.iWidth, displayMode);
bitmap->BeginDataAccess();
uchar *bytes = (uchar*)bitmap->DataAddress();
- QImage img = QImage(bytes, size.iWidth, size.iHeight, format);
+ QImage img = QImage(bytes, size.iWidth, size.iHeight, bytesPerLine, format);
img = img.copy();
bitmap->EndDataAccess();
@@ -229,8 +229,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
sgInfo.iSizeInPixels.SetSize(w, h);
sgInfo.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface;
- RSgImage *sgImage = new RSgImage();
- Q_CHECK_PTR(sgImage);
+ QScopedPointer<RSgImage> sgImage(new RSgImage());
err = sgImage->Create(sgInfo, NULL, NULL);
if (err != KErrNone) {
driver.Close();
@@ -241,7 +240,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(),
EGL_NO_CONTEXT,
EGL_NATIVE_PIXMAP_KHR,
- (EGLClientBuffer)sgImage,
+ (EGLClientBuffer)sgImage.data(),
(EGLint*)KEglImageAttribs);
if (!eglImage || eglGetError() != EGL_SUCCESS) {
sgImage->Close();
@@ -263,13 +262,14 @@ void* QVGPixmapData::toNativeType(NativeType type)
if (vgGetError() != VG_NO_ERROR) {
sgImage->Close();
- sgImage = 0;
+ sgImage.reset();
}
+
// release stuff
vgDestroyImage(dstVgImage);
QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
driver.Close();
- return reinterpret_cast<void*>(sgImage);
+ return reinterpret_cast<void*>(sgImage.take());
#endif
} else if (type == QPixmapData::FbsBitmap) {
CFbsBitmap *bitmap = new CFbsBitmap;
diff --git a/src/openvg/qvgfontglyphcache_p.h b/src/openvg/qvgfontglyphcache_p.h
index b32a873..8bcdcc7 100644
--- a/src/openvg/qvgfontglyphcache_p.h
+++ b/src/openvg/qvgfontglyphcache_p.h
@@ -56,10 +56,14 @@
#include <QtCore/qvarlengtharray.h>
#include <QtGui/private/qfontengine_p.h>
+#include <qvg_p.h>
+
QT_BEGIN_NAMESPACE
class QVGPaintEnginePrivate;
+#ifndef QVG_NO_DRAW_GLYPHS
+
class QVGFontGlyphCache
{
public:
@@ -90,6 +94,8 @@ public:
};
#endif
+#endif
+
QT_END_NAMESPACE
#endif // QVGFONTGLYPHCACHE_H
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index d8b57af..eb6a909 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -602,7 +602,7 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa
return QAccessibleWidgetEx::navigate(rel, entry, target);
}
-/*! \reimp */
+/*! \internal */
QString QAccessibleDisplay::imageDescription()
{
#ifndef QT_NO_TOOLTIP
@@ -612,7 +612,7 @@ QString QAccessibleDisplay::imageDescription()
#endif
}
-/*! \reimp */
+/*! \internal */
QSize QAccessibleDisplay::imageSize()
{
QLabel *label = qobject_cast<QLabel *>(widget());
@@ -624,7 +624,7 @@ QSize QAccessibleDisplay::imageSize()
return pixmap->size();
}
-/*! \reimp */
+/*! \internal */
QRect QAccessibleDisplay::imagePosition(QAccessible2::CoordinateType coordType)
{
QLabel *label = qobject_cast<QLabel *>(widget());
diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp
index a8b8911..184ceb4 100644
--- a/src/plugins/bearer/connman/qconnmanengine.cpp
+++ b/src/plugins/bearer/connman/qconnmanengine.cpp
@@ -170,13 +170,26 @@ bool QConnmanEngine::hasIdentifier(const QString &id)
void QConnmanEngine::connectToId(const QString &id)
{
QMutexLocker locker(&mutex);
- QConnmanConnectThread *thread;
- thread = new QConnmanConnectThread(this);
- thread->setServicePath(serviceFromId(id));
- thread->setIdentifier(id);
- connect(thread,SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)),
- this,SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)));
- thread->start();
+ QString servicePath = serviceFromId(id);
+ QConnmanServiceInterface serv(servicePath);
+ if(!serv.isValid()) {
+ emit connectionError(id, QBearerEngineImpl::InterfaceLookupError);
+ } else {
+ if(serv.getType() != "cellular") {
+
+ serv.connect();
+ } else {
+ QOfonoManagerInterface ofonoManager(0);
+ QString modemPath = ofonoManager.currentModem().path();
+ QOfonoDataConnectionManagerInterface dc(modemPath,0);
+ foreach(const QDBusObjectPath dcPath,dc.getPrimaryContexts()) {
+ if(dcPath.path().contains(servicePath.section("_",-1))) {
+ QOfonoPrimaryDataContextInterface primaryContext(dcPath.path(),0);
+ primaryContext.setActive(true);
+ }
+ }
+ }
+ }
}
void QConnmanEngine::disconnectFromId(const QString &id)
@@ -791,62 +804,6 @@ bool QConnmanEngine::requiresPolling() const
return false;
}
-
-QConnmanConnectThread::QConnmanConnectThread(QObject *parent)
- :QThread(parent),
- servicePath(), identifier()
-{
-}
-
-QConnmanConnectThread::~QConnmanConnectThread()
-{
-}
-
-void QConnmanConnectThread::stop()
-{
- if(currentThread() != this) {
- QMetaObject::invokeMethod(this, "quit",
- Qt::QueuedConnection);
- } else {
- quit();
- }
- wait();
-}
-
-void QConnmanConnectThread::run()
-{
- QConnmanServiceInterface serv(servicePath);
- if(!serv.isValid()) {
- emit connectionError(identifier, QBearerEngineImpl::InterfaceLookupError);
- } else {
- if(serv.getType() != "cellular") {
- serv.connect();
- } else {
- QOfonoManagerInterface ofonoManager(0);
- QString modemPath = ofonoManager.currentModem().path();
- QOfonoDataConnectionManagerInterface dc(modemPath,0);
- foreach(const QDBusObjectPath dcPath,dc.getPrimaryContexts()) {
- if(dcPath.path().contains(servicePath.section("_",-1))) {
- QOfonoPrimaryDataContextInterface primaryContext(dcPath.path(),0);
- primaryContext.setActive(true);
- }
- }
- }
- }
-}
-
-void QConnmanConnectThread::setServicePath(const QString &path)
-{
- QMutexLocker locker(&mutex);
- servicePath = path;
-}
-
-void QConnmanConnectThread::setIdentifier(const QString &id)
-{
- QMutexLocker locker(&mutex);
- identifier = id;
-}
-
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h
index 569bbc7..2a2308f 100644
--- a/src/plugins/bearer/connman/qconnmanengine.h
+++ b/src/plugins/bearer/connman/qconnmanengine.h
@@ -59,14 +59,12 @@
#include <QMap>
#include <QVariant>
-#include <QtCore/qthread.h>
#ifndef QT_NO_BEARERMANAGEMENT
#ifndef QT_NO_DBUS
QT_BEGIN_NAMESPACE
-class QConnmanConnectThread;
class QConnmanEngine : public QBearerEngineImpl
{
Q_OBJECT
@@ -141,33 +139,8 @@ private:
bool isRoamingAllowed(const QString &context);
protected:
bool requiresPolling() const;
- QConnmanConnectThread *connThread;
};
-class QConnmanConnectThread : public QThread
-{
- Q_OBJECT
-
-public:
- QConnmanConnectThread(QObject *parent = 0);
- ~QConnmanConnectThread();
- bool keepRunning;
- void stop();
- void setServicePath(const QString &path);
- void setIdentifier(const QString &id);
-
-Q_SIGNALS:
- void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error);
-
-protected:
- void run();
- QString servicePath;
- QString identifier;
-
-private:
- QMutex mutex;
-
-};
QT_END_NAMESPACE
diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp
index e94ae5d..b66298e 100644
--- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp
+++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp
@@ -106,7 +106,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -338,7 +338,7 @@ void QConnmanNetworkInterface::connectNotify(const char *signal)
this->path(),
QLatin1String(CONNMAN_NETWORK_INTERFACE),
QLatin1String("PropertyChanged"),
- this,SIGNAL(propertyChanged(QString,QDBusVariant))) ) {
+ this,SIGNAL(propertyChanged(QString,QDBusVariant)))) {
qWarning() << "network properties not connected";
}
}
@@ -353,7 +353,7 @@ void QConnmanNetworkInterface::connectNotify(const char *signal)
helper,SLOT(propertyChanged(QString,QDBusVariant)));
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -538,7 +538,7 @@ void QConnmanServiceInterface::connectNotify(const char *signal)
helper,SLOT(propertyChanged(QString,QDBusVariant)));
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -569,10 +569,9 @@ QVariant QConnmanServiceInterface::getProperty(const QString &property)
return var;
}
-// clearProperty
void QConnmanServiceInterface::connect()
{
- QDBusReply<QVariantMap> reply = this->call(QLatin1String("Connect"));
+ this->asyncCall(QLatin1String("Connect"));
}
void QConnmanServiceInterface::disconnect()
@@ -866,7 +865,7 @@ void QConnmanTechnologyInterface::connectNotify(const char *signal)
helper,SLOT(propertyChanged(QString,QDBusVariant)));
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -1031,7 +1030,7 @@ void QConnmanDeviceInterface::connectNotify(const char *signal)
helper,SLOT(propertyChanged(QString,QDBusVariant)));
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
diff --git a/src/plugins/bearer/connman/qofonoservice_linux.cpp b/src/plugins/bearer/connman/qofonoservice_linux.cpp
index 955f4b1..52f596b 100644
--- a/src/plugins/bearer/connman/qofonoservice_linux.cpp
+++ b/src/plugins/bearer/connman/qofonoservice_linux.cpp
@@ -262,7 +262,7 @@ void QOfonoModemInterface::connectNotify(const char *signal)
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}}
void QOfonoModemInterface::disconnectNotify(const char *signal)
@@ -385,7 +385,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -483,7 +483,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -586,7 +586,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -675,7 +675,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
@@ -794,7 +794,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) {
QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)),
- this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)));
+ this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection);
}
}
diff --git a/src/plugins/bearer/corewlan/corewlan.pro b/src/plugins/bearer/corewlan/corewlan.pro
index 922a501..90078e9 100644
--- a/src/plugins/bearer/corewlan/corewlan.pro
+++ b/src/plugins/bearer/corewlan/corewlan.pro
@@ -1,7 +1,7 @@
TARGET = qcorewlanbearer
include(../../qpluginbase.pri)
-QT = core gui network
+QT = core network
LIBS += -framework Foundation -framework SystemConfiguration
contains(QT_CONFIG, corewlan) {
@@ -16,9 +16,10 @@ HEADERS += qcorewlanengine.h \
../qbearerengine_impl.h
SOURCES += main.cpp \
- qcorewlanengine.mm \
../qnetworksession_impl.cpp
+OBJECTIVE_SOURCES += qcorewlanengine.mm
+
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer
target.path += $$[QT_INSTALL_PLUGINS]/bearer
INSTALLS += target
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm
index 844e38b..23dd14a 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.mm
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm
@@ -64,12 +64,17 @@
#include <Foundation/NSLock.h>
#include <SystemConfiguration/SCNetworkConfiguration.h>
-#include <private/qt_cocoa_helpers_mac_p.h>
#include "private/qcore_mac_p.h"
#include <net/if.h>
#include <ifaddrs.h>
+inline QString qt_NSStringToQString(const NSString *nsstr)
+{ return QCFString::toQString(reinterpret_cast<const CFStringRef>(nsstr)); }
+
+inline NSString *qt_QStringToNSString(const QString &qstr)
+{ return [reinterpret_cast<const NSString *>(QCFString::toCFStringRef(qstr)) autorelease]; }
+
@interface QT_MANGLE_NAMESPACE(QNSListener) : NSObject
{
@@ -93,11 +98,12 @@
- (id) init
{
[locker lock];
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
notificationCenter = [NSNotificationCenter defaultCenter];
currentInterface = [CWInterface interfaceWithName:nil];
[notificationCenter addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil];
[locker unlock];
+ [autoreleasepool release];
return self;
}
@@ -161,10 +167,10 @@ void QScanThread::quit()
void QScanThread::run()
{
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
QStringList found;
mutex.lock();
- CWInterface *currentInterface = [CWInterface interfaceWithName:qt_mac_QStringToNSString(interfaceName)];
+ CWInterface *currentInterface = [CWInterface interfaceWithName:qt_QStringToNSString(interfaceName)];
mutex.unlock();
if([currentInterface power]) {
@@ -182,14 +188,14 @@ void QScanThread::run()
for(uint row=0; row < [apArray count]; row++ ) {
apNetwork = [apArray objectAtIndex:row];
- const QString networkSsid = qt_mac_NSStringToQString([apNetwork ssid]);
+ const QString networkSsid = qt_NSStringToQString([apNetwork ssid]);
const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid));
found.append(id);
QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined;
bool known = isKnownSsid(networkSsid);
if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
- if( networkSsid == qt_mac_NSStringToQString( [currentInterface ssid])) {
+ if( networkSsid == qt_NSStringToQString( [currentInterface ssid])) {
state = QNetworkConfiguration::Active;
}
}
@@ -232,7 +238,7 @@ void QScanThread::run()
}
if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
- if( networkSsid == qt_mac_NSStringToQString([currentInterface ssid])) {
+ if( networkSsid == qt_NSStringToQString([currentInterface ssid])) {
state = QNetworkConfiguration::Active;
}
}
@@ -251,6 +257,7 @@ void QScanThread::run()
}
}
emit networksChanged();
+ [autoreleasepool release];
}
QStringList QScanThread::foundNetwork(const QString &id, const QString &name, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose)
@@ -290,7 +297,7 @@ void QScanThread::getUserConfigurations()
{
QMutexLocker locker(&mutex);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
userProfiles.clear();
NSArray *wifiInterfaces = [CWInterface supportedInterfaces];
@@ -310,10 +317,10 @@ void QScanThread::getUserConfigurations()
NSArray *thisSsidarray = [prefNetDict valueForKey:@"SSID_STR"];
for(NSString *ssidkey in thisSsidarray) {
- QString thisSsid = qt_mac_NSStringToQString(ssidkey);
+ QString thisSsid = qt_NSStringToQString(ssidkey);
if(!userProfiles.contains(thisSsid)) {
QMap <QString,QString> map;
- map.insert(thisSsid, qt_mac_NSStringToQString(nsInterfaceName));
+ map.insert(thisSsid, qt_NSStringToQString(nsInterfaceName));
userProfiles.insert(thisSsid, map);
}
}
@@ -322,7 +329,7 @@ void QScanThread::getUserConfigurations()
// 802.1X user profiles
QString userProfilePath = QDir::homePath() + "/Library/Preferences/com.apple.eap.profiles.plist";
- NSDictionary* eapDict = [[[NSDictionary alloc] initWithContentsOfFile:qt_mac_QStringToNSString(userProfilePath)] autorelease];
+ NSDictionary* eapDict = [[[NSDictionary alloc] initWithContentsOfFile:qt_QStringToNSString(userProfilePath)] autorelease];
if(eapDict != nil) {
NSString *profileStr= @"Profiles";
NSString *nameStr = @"UserDefinedName";
@@ -341,15 +348,15 @@ void QScanThread::getUserConfigurations()
QString ssid;
for(int i = 0; i < dictSize; i++) {
if([nameStr isEqualToString:keys[i]]) {
- networkName = qt_mac_NSStringToQString(objects[i]);
+ networkName = qt_NSStringToQString(objects[i]);
}
if([networkSsidStr isEqualToString:keys[i]]) {
- ssid = qt_mac_NSStringToQString(objects[i]);
+ ssid = qt_NSStringToQString(objects[i]);
}
if(!userProfiles.contains(networkName)
&& !ssid.isEmpty()) {
QMap<QString,QString> map;
- map.insert(ssid, qt_mac_NSStringToQString(nsInterfaceName));
+ map.insert(ssid, qt_NSStringToQString(nsInterfaceName));
userProfiles.insert(networkName, map);
}
}
@@ -358,6 +365,7 @@ void QScanThread::getUserConfigurations()
}
}
}
+ [autoreleasepool release];
}
QString QScanThread::getSsidFromNetworkName(const QString &name)
@@ -434,7 +442,7 @@ QCoreWlanEngine::~QCoreWlanEngine()
void QCoreWlanEngine::initialize()
{
QMutexLocker locker(&mutex);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
if([[CWInterface supportedInterfaces] count] > 0 && !listener) {
listener = [[QT_MANGLE_NAMESPACE(QNSListener) alloc] init];
@@ -446,6 +454,7 @@ void QCoreWlanEngine::initialize()
storeSession = NULL;
startNetworkChangeLoop();
+ [autoreleasepool release];
}
@@ -466,11 +475,11 @@ bool QCoreWlanEngine::hasIdentifier(const QString &id)
void QCoreWlanEngine::connectToId(const QString &id)
{
QMutexLocker locker(&mutex);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
QString interfaceString = getInterfaceFromId(id);
CWInterface *wifiInterface =
- [CWInterface interfaceWithName: qt_mac_QStringToNSString(interfaceString)];
+ [CWInterface interfaceWithName: qt_QStringToNSString(interfaceString)];
if ([wifiInterface power]) {
NSError *err = nil;
@@ -488,9 +497,9 @@ void QCoreWlanEngine::connectToId(const QString &id)
NSArray *array = [CW8021XProfile allUser8021XProfiles];
for (NSUInteger i = 0; i < [array count]; ++i) {
- const QString networkNameHashCheck = QString::number(qHash(QLatin1String("corewlan:") + qt_mac_NSStringToQString([[array objectAtIndex:i] userDefinedName])));
+ const QString networkNameHashCheck = QString::number(qHash(QLatin1String("corewlan:") + qt_NSStringToQString([[array objectAtIndex:i] userDefinedName])));
- const QString ssidHash = QString::number(qHash(QLatin1String("corewlan:") + qt_mac_NSStringToQString([[array objectAtIndex:i] ssid])));
+ const QString ssidHash = QString::number(qHash(QLatin1String("corewlan:") + qt_NSStringToQString([[array objectAtIndex:i] ssid])));
if (id == networkNameHashCheck || id == ssidHash) {
const QString thisName = scanThread->getSsidFromNetworkName(id);
@@ -523,7 +532,7 @@ void QCoreWlanEngine::connectToId(const QString &id)
[NSNumber numberWithBool:YES], kCWScanKeyMerge,
[NSNumber numberWithInt:kCWScanTypeFast], kCWScanKeyScanType,
[NSNumber numberWithInteger:100], kCWScanKeyRestTime,
- qt_mac_QStringToNSString(wantedSsid), kCWScanKeySSID,
+ qt_QStringToNSString(wantedSsid), kCWScanKeySSID,
nil];
NSArray *scanArray = [wifiInterface scanForNetworksWithParameters:scanParameters error:&err];
@@ -532,7 +541,7 @@ void QCoreWlanEngine::connectToId(const QString &id)
for(uint row=0; row < [scanArray count]; row++ ) {
CWNetwork *apNetwork = [scanArray objectAtIndex:row];
- if(wantedSsid == qt_mac_NSStringToQString([apNetwork ssid])) {
+ if(wantedSsid == qt_NSStringToQString([apNetwork ssid])) {
if(!using8021X) {
SecKeychainAttribute attributes[3];
@@ -599,18 +608,19 @@ void QCoreWlanEngine::connectToId(const QString &id)
return;
}
} else {
- qDebug() <<"associate ERROR"<< qt_mac_NSStringToQString([err localizedDescription ]);
+ qDebug() <<"associate ERROR"<< qt_NSStringToQString([err localizedDescription ]);
}
}
} //end scan network
} else {
- qDebug() <<"scan ERROR"<< qt_mac_NSStringToQString([err localizedDescription ]);
+ qDebug() <<"scan ERROR"<< qt_NSStringToQString([err localizedDescription ]);
}
emit connectionError(id, InterfaceLookupError);
}
locker.unlock();
emit connectionError(id, InterfaceLookupError);
+ [autoreleasepool release];
}
void QCoreWlanEngine::disconnectFromId(const QString &id)
@@ -618,10 +628,10 @@ void QCoreWlanEngine::disconnectFromId(const QString &id)
QMutexLocker locker(&mutex);
QString interfaceString = getInterfaceFromId(id);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
CWInterface *wifiInterface =
- [CWInterface interfaceWithName: qt_mac_QStringToNSString(interfaceString)];
+ [CWInterface interfaceWithName: qt_QStringToNSString(interfaceString)];
[wifiInterface disassociate];
if ([[wifiInterface interfaceState]intValue] != kCWInterfaceStateInactive) {
@@ -629,6 +639,7 @@ void QCoreWlanEngine::disconnectFromId(const QString &id)
emit connectionError(id, DisconnectionError);
locker.relock();
}
+ [autoreleasepool release];
}
void QCoreWlanEngine::requestUpdate()
@@ -641,27 +652,30 @@ void QCoreWlanEngine::doRequestUpdate()
{
QMutexLocker locker(&mutex);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
NSArray *wifiInterfaces = [CWInterface supportedInterfaces];
for (uint row = 0; row < [wifiInterfaces count]; ++row) {
- scanThread->interfaceName = qt_mac_NSStringToQString([wifiInterfaces objectAtIndex:row]);
+ scanThread->interfaceName = qt_NSStringToQString([wifiInterfaces objectAtIndex:row]);
scanThread->start();
}
locker.unlock();
+ [autoreleasepool release];
}
bool QCoreWlanEngine::isWifiReady(const QString &wifiDeviceName)
{
QMutexLocker locker(&mutex);
-
+ bool haswifi = false;
if(hasWifi) {
- QMacCocoaAutoReleasePool pool;
- CWInterface *defaultInterface = [CWInterface interfaceWithName: qt_mac_QStringToNSString(wifiDeviceName)];
- if([defaultInterface power])
- return true;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
+ CWInterface *defaultInterface = [CWInterface interfaceWithName: qt_QStringToNSString(wifiDeviceName)];
+ if([defaultInterface power]) {
+ haswifi = true;
+ }
+ [autoreleasepool release];
}
- return false;
+ return haswifi;
}
@@ -850,10 +864,10 @@ quint64 QCoreWlanEngine::bytesReceived(const QString &id)
return getBytes(interfaceStr,true);
}
-quint64 QCoreWlanEngine::startTime(const QString &id)
+quint64 QCoreWlanEngine::startTime(const QString &identifier)
{
QMutexLocker locker(&mutex);
- QMacCocoaAutoReleasePool pool;
+ NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
quint64 timestamp = 0;
NSString *filePath = @"/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist";
@@ -884,8 +898,8 @@ quint64 QCoreWlanEngine::startTime(const QString &id)
bool ok = false;
for(int i = 0; i < dictSize; i++) {
if([ssidStr isEqualToString:keys[i]]) {
- const QString ident = QString::number(qHash(QLatin1String("corewlan:") + qt_mac_NSStringToQString(objects[i])));
- if(ident == id) {
+ const QString ident = QString::number(qHash(QLatin1String("corewlan:") + qt_NSStringToQString(objects[i])));
+ if(ident == identifier) {
ok = true;
}
}
@@ -900,6 +914,7 @@ quint64 QCoreWlanEngine::startTime(const QString &id)
}
}
}
+ [autoreleasepool release];
return timestamp;
}
diff --git a/src/plugins/bearer/icd/icd.pro b/src/plugins/bearer/icd/icd.pro
index 464cc1c..6700cda 100644
--- a/src/plugins/bearer/icd/icd.pro
+++ b/src/plugins/bearer/icd/icd.pro
@@ -1,7 +1,7 @@
TARGET = qicdbearer
include(../../qpluginbase.pri)
-QT += network dbus
+QT = core network dbus
QMAKE_CXXFLAGS *= $$QT_CFLAGS_DBUS $$QT_CFLAGS_CONNSETTINGS
LIBS += $$QT_LIBS_CONNSETTINGS
diff --git a/src/plugins/bearer/icd/maemo_icd.cpp b/src/plugins/bearer/icd/maemo_icd.cpp
index 4f879e3..57ab0a8 100644
--- a/src/plugins/bearer/icd/maemo_icd.cpp
+++ b/src/plugins/bearer/icd/maemo_icd.cpp
@@ -508,6 +508,7 @@ uint IcdPrivate::state(QList<IcdStateResult>& state_results)
mInterface.clear();
while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) {
mDBus->synchronousDispatch(1000);
+ QCoreApplication::sendPostedEvents(icd, QEvent::MetaCall);
}
if (time(0)>(started+timeout_secs)) {
@@ -685,6 +686,7 @@ uint IcdPrivate::addrinfo(QList<IcdAddressInfoResult>& addr_results)
mInterface.clear();
while ((time(0)<=(started+timeout_secs)) && mInterface.isEmpty()) {
mDBus->synchronousDispatch(1000);
+ QCoreApplication::sendPostedEvents(icd, QEvent::MetaCall);
}
if (time(0)>(started+timeout_secs)) {
diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp
index 37434e3..8d0f587 100644
--- a/src/plugins/bearer/icd/qnetworksession_impl.cpp
+++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp
@@ -679,7 +679,7 @@ void QNetworkSessionPrivateImpl::open()
if (serviceConfig.isValid()) {
lastError = QNetworkSession::OperationNotSupportedError;
emit QNetworkSessionPrivate::error(lastError);
- } else if (!isOpen) {
+ } else if (!opened) {
if (publicConfig.type() == QNetworkConfiguration::UserChoice) {
/* Caller is trying to connect to default IAP.
* At this time we will not know the IAP details so we just
diff --git a/src/plugins/bearer/platformdefs_win.h b/src/plugins/bearer/platformdefs_win.h
index 1a10ba7..68343cf 100644
--- a/src/plugins/bearer/platformdefs_win.h
+++ b/src/plugins/bearer/platformdefs_win.h
@@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE
#define NS_NLA 15
+#ifndef NLA_NAMESPACE_GUID
enum NLA_BLOB_DATA_TYPE {
NLA_RAW_DATA = 0,
NLA_INTERFACE = 1,
@@ -115,6 +116,8 @@ struct NLA_BLOB {
} ICS;
} data;
};
+#endif // NLA_NAMESPACE_GUID
+
#endif
enum NDIS_MEDIUM {
diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp
index 7f81397..53a5b4d 100644
--- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp
+++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp
@@ -760,7 +760,7 @@ void QNetworkSessionPrivateImpl::Error(TInt /*aError*/)
{
#ifdef QT_BEARERMGMT_SYMBIAN_DEBUG
qDebug() << "QNS this : " << QString::number((uint)this) << " - "
- << "roaming Error() occured, isOpen is: " << isOpen;
+ << "roaming Error() occurred, isOpen is: " << isOpen;
#endif
if (isOpen) {
isOpen = false;
@@ -1078,7 +1078,7 @@ void QNetworkSessionPrivateImpl::RunL()
TInt error = KErrNone;
QNetworkConfiguration newActiveConfig = activeConfiguration();
if (!newActiveConfig.isValid()) {
- // RConnection startup was successfull but no configuration
+ // RConnection startup was successful but no configuration
// was found. That indicates that user has chosen to create a
// new WLAN configuration (from scan results), but that new
// configuration does not have access to Internet (Internet
@@ -1151,10 +1151,10 @@ void QNetworkSessionPrivateImpl::RunL()
serviceConfig = QNetworkConfiguration();
iError = QNetworkSession::InvalidConfigurationError;
QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError));
- Cancel();
if (ipConnectionNotifier) {
ipConnectionNotifier->StopNotifications();
}
+ Cancel();
QT_TRYCATCH_LEAVING(syncStateWithInterface());
break;
case KErrCancel: // Connection attempt cancelled
@@ -1173,10 +1173,10 @@ void QNetworkSessionPrivateImpl::RunL()
iError = QNetworkSession::UnknownSessionError;
}
QT_TRYCATCH_LEAVING(emit QNetworkSessionPrivate::error(iError));
- Cancel();
if (ipConnectionNotifier) {
ipConnectionNotifier->StopNotifications();
}
+ Cancel();
QT_TRYCATCH_LEAVING(syncStateWithInterface());
break;
}
@@ -1268,10 +1268,10 @@ bool QNetworkSessionPrivateImpl::newState(QNetworkSession::State newState, TUint
serviceConfig = QNetworkConfiguration();
iError = QNetworkSession::SessionAbortedError;
emit QNetworkSessionPrivate::error(iError);
- Cancel();
if (ipConnectionNotifier) {
ipConnectionNotifier->StopNotifications();
}
+ Cancel();
// Start handling IAP state change signals from QNetworkConfigurationManagerPrivate
iHandleStateNotificationsFromManager = true;
emitSessionClosed = true; // Emit SessionClosed after state change has been reported
diff --git a/src/plugins/bearer/symbian/symbian.pri b/src/plugins/bearer/symbian/symbian.pri
index e874945..8d92f57 100644
--- a/src/plugins/bearer/symbian/symbian.pri
+++ b/src/plugins/bearer/symbian/symbian.pri
@@ -1,7 +1,7 @@
TARGET = qsymbianbearer
include(../../qpluginbase.pri)
-QT += network
+QT = core network
HEADERS += ../symbianengine.h \
../qnetworksession_impl.h
diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp
index f759a95..33fa508 100644
--- a/src/plugins/bearer/symbian/symbianengine.cpp
+++ b/src/plugins/bearer/symbian/symbianengine.cpp
@@ -135,10 +135,9 @@ void SymbianEngine::initialize()
updateConfigurations();
updateStatesToSnaps();
- updateAvailableAccessPoints(); // On first time updates synchronously (without WLAN scans)
+ updateAvailableAccessPoints(); // On first time updates (without WLAN scans)
// Start monitoring IAP and/or SNAP changes in Symbian CommsDB
startCommsDatabaseNotifications();
- iFirstUpdate = false;
}
SymbianEngine::~SymbianEngine()
@@ -790,6 +789,12 @@ void SymbianEngine::accessPointScanningReady(TBool scanSuccessful, TConnMonIapIn
mutex.unlock();
emit updateCompleted();
mutex.lock();
+ } else {
+ iFirstUpdate = false;
+ if (iScanInQueue) {
+ iScanInQueue = EFalse;
+ updateAvailableAccessPoints();
+ }
}
}
@@ -1356,24 +1361,31 @@ AccessPointsAvailabilityScanner::~AccessPointsAvailabilityScanner()
void AccessPointsAvailabilityScanner::DoCancel()
{
iConnectionMonitor.CancelAsyncRequest(EConnMonGetPckgAttribute);
+ iScanActive = EFalse;
+ iOwner.iScanInQueue = EFalse;
}
void AccessPointsAvailabilityScanner::StartScanning()
{
- if (iOwner.iFirstUpdate) {
- // On first update (the mgr is being instantiated) update only those bearers who
- // don't need time-consuming scans (WLAN).
- // Note: EBearerIdWCDMA covers also GPRS bearer
- iConnectionMonitor.GetPckgAttribute(EBearerIdWCDMA, 0, KIapAvailability, iIapBuf, iStatus);
- User::WaitForRequest(iStatus);
- if (iStatus.Int() == KErrNone) {
- iOwner.accessPointScanningReady(true,iIapBuf());
+ if (!iScanActive) {
+ iScanActive = ETrue;
+ if (iOwner.iFirstUpdate) {
+ // On first update (the mgr is being instantiated) update only those bearers who
+ // don't need time-consuming scans (WLAN).
+ // Note: EBearerIdWCDMA covers also GPRS bearer
+ iConnectionMonitor.GetPckgAttribute(EBearerIdWCDMA, 0, KIapAvailability, iIapBuf, iStatus);
+ } else {
+ iConnectionMonitor.GetPckgAttribute(EBearerIdAll, 0, KIapAvailability, iIapBuf, iStatus);
}
- } else {
- iConnectionMonitor.GetPckgAttribute(EBearerIdAll, 0, KIapAvailability, iIapBuf, iStatus);
+
if (!IsActive()) {
SetActive();
}
+ } else {
+ // Queue scan for getting WLAN info after first request returns
+ if (iOwner.iFirstUpdate) {
+ iOwner.iScanInQueue = ETrue;
+ }
}
}
@@ -1381,6 +1393,7 @@ void AccessPointsAvailabilityScanner::RunL()
{
QMutexLocker locker(&iOwner.mutex);
+ iScanActive = EFalse;
if (iStatus.Int() != KErrNone) {
iIapBuf().iCount = 0;
QT_TRYCATCH_LEAVING(iOwner.accessPointScanningReady(false,iIapBuf()));
diff --git a/src/plugins/bearer/symbian/symbianengine.h b/src/plugins/bearer/symbian/symbianengine.h
index 7c1076e..337d4d1 100644
--- a/src/plugins/bearer/symbian/symbianengine.h
+++ b/src/plugins/bearer/symbian/symbianengine.h
@@ -207,6 +207,7 @@ private: // Data
TBool iInitOk;
TBool iUpdateGoingOn;
TBool iUpdatePending;
+ TBool iScanInQueue;
AccessPointsAvailabilityScanner* ipAccessPointsAvailabilityScanner;
@@ -234,9 +235,10 @@ protected: // From CActive
void DoCancel();
private: // Data
- SymbianEngine& iOwner;
+ SymbianEngine& iOwner;
RConnectionMonitor& iConnectionMonitor;
- TConnMonIapInfoBuf iIapBuf;
+ TConnMonIapInfoBuf iIapBuf;
+ TBool iScanActive;
};
QT_END_NAMESPACE
diff --git a/src/plugins/generic/linuxinput/linuxinput.pro b/src/plugins/generic/linuxinput/linuxinput.pro
new file mode 100644
index 0000000..ad9f6a9
--- /dev/null
+++ b/src/plugins/generic/linuxinput/linuxinput.pro
@@ -0,0 +1,18 @@
+TARGET = qlinuxinputplugin
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/generic
+target.path = $$[QT_INSTALL_PLUGINS]/generic
+INSTALLS += target
+
+DEFINES += QT_QWS_KBD_LINUXINPUT
+
+HEADERS = qlinuxinput.h
+
+SOURCES = main.cpp \
+ qlinuxinput.cpp
+
+HEADERS += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.h \
+ $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws_p.h
+
+SOURCES += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.cpp
diff --git a/src/plugins/generic/linuxinput/main.cpp b/src/plugins/generic/linuxinput/main.cpp
new file mode 100644
index 0000000..dc05254
--- /dev/null
+++ b/src/plugins/generic/linuxinput/main.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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 plugins 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 <qgenericplugin_qpa.h>
+#include "qlinuxinput.h"
+
+QT_BEGIN_NAMESPACE
+
+class QLinuxInputPlugin : public QGenericPlugin
+{
+public:
+ QLinuxInputPlugin();
+
+ QStringList keys() const;
+ QObject* create(const QString &key, const QString &specification);
+};
+
+QLinuxInputPlugin::QLinuxInputPlugin()
+ : QGenericPlugin()
+{
+}
+
+QStringList QLinuxInputPlugin::keys() const
+{
+ return (QStringList()
+ << QLatin1String("LinuxInputMouse")
+ << QLatin1String("LinuxInputKeyboard"));
+}
+
+QObject* QLinuxInputPlugin::create(const QString &key,
+ const QString &specification)
+{
+ if (!key.compare(QLatin1String("LinuxInputMouse"), Qt::CaseInsensitive))
+ return new QLinuxInputMouseHandler(key, specification);
+ if (!key.compare(QLatin1String("LinuxInputKeyboard"), Qt::CaseInsensitive))
+ return new QLinuxInputKeyboardHandler(key, specification);
+ return 0;
+ }
+
+Q_EXPORT_PLUGIN2(qlinuxinputplugin, QLinuxInputPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp
new file mode 100644
index 0000000..c5bfd33
--- /dev/null
+++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp
@@ -0,0 +1,557 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qlinuxinput.h"
+
+
+#include <QSocketNotifier>
+#include <QStringList>
+#include <QPoint>
+#include <QWindowSystemInterface>
+
+#include <qkbd_qws.h>
+
+
+#include <qplatformdefs.h>
+#include <private/qcore_unix_p.h> // overrides QT_OPEN
+
+#include <errno.h>
+#include <termios.h>
+
+#include <linux/kd.h>
+#include <linux/input.h>
+
+#include <qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+
+//#define QT_QPA_EXPERIMENTAL_TOUCHEVENT
+
+#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT
+class QLinuxInputMouseHandlerData
+{
+public:
+ QLinuxInputMouseHandlerData() :seenMT(false), state(QEvent::TouchBegin), currentIdx(0) {}
+
+ void ensureCurrentPoint() {
+ if (currentIdx >= touchPoints.size()) {
+ Q_ASSERT(currentIdx == touchPoints.size());
+ QWindowSystemInterface::TouchPoint tp;
+ tp.id = currentIdx;
+ tp.isPrimary = (currentIdx == 0);
+ tp.pressure = 1;
+ tp.area = QRectF(0,0,1,1);
+ tp.state = Qt::TouchPointReleased; // init in neutral state
+ touchPoints.append(tp);
+ }
+ }
+ void setCurrentPoint(int i) {
+ currentIdx = i;
+ if (currentIdx < touchPoints.size()) {
+ currentX = int(touchPoints[currentIdx].area.left());
+ currentY = int(touchPoints[currentIdx].area.top());
+ } else {
+ currentY = currentX = -999;
+ }
+ }
+ void advanceCurrentPoint() {
+ setCurrentPoint(currentIdx + 1);
+ }
+ int currentPoint() { return currentIdx; }
+ void setCurrentX(int value) {
+ ensureCurrentPoint();
+ touchPoints[currentIdx].area.moveLeft(value);
+ }
+ bool currentMoved() {
+ return currentX != touchPoints[currentIdx].area.left() || currentY != touchPoints[currentIdx].area.top();
+ }
+ void updateCurrentPos() {
+ ensureCurrentPoint();
+ touchPoints[currentIdx].area.moveTopLeft(QPointF(currentX, currentY));
+ }
+ void setCurrentState(Qt::TouchPointState state) {
+ ensureCurrentPoint();
+ touchPoints[currentIdx].state = state;
+ }
+ Qt::TouchPointState currentState() const {
+ if (currentIdx < touchPoints.size())
+ return touchPoints[currentIdx].state;
+ return Qt::TouchPointReleased;
+ }
+ QList<QWindowSystemInterface::TouchPoint> touchPoints;
+ int currentX;
+ int currentY;
+ bool seenMT;
+ QEvent::Type state;
+private:
+ int currentIdx;
+};
+#endif
+
+
+QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key,
+ const QString &specification)
+ : m_notify(0), m_x(0), m_y(0), m_prevx(0), m_prevy(0), m_xoffset(0), m_yoffset(0), m_buttons(0), d(0)
+{
+ qDebug() << "QLinuxInputMouseHandler" << key << specification;
+
+
+ setObjectName(QLatin1String("LinuxInputSubsystem Mouse Handler"));
+
+ QString dev = QLatin1String("/dev/input/event0");
+ m_compression = true;
+ m_smooth = false;
+ int jitterLimit = 0;
+
+ QStringList args = specification.split(QLatin1Char(':'));
+ foreach (const QString &arg, args) {
+ if (arg == "nocompress")
+ m_compression = false;
+ else if (arg.startsWith("dejitter="))
+ jitterLimit = arg.mid(9).toInt();
+ else if (arg.startsWith("xoffset="))
+ m_xoffset = arg.mid(8).toInt();
+ else if (arg.startsWith("yoffset="))
+ m_yoffset = arg.mid(8).toInt();
+ else if (arg.startsWith(QLatin1String("/dev/")))
+ dev = arg;
+ }
+ m_jitterLimitSquared = jitterLimit*jitterLimit;
+
+ m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
+ if (m_fd >= 0) {
+ m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
+ connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData()));
+ } else {
+ qWarning("Cannot open mouse input device '%s': %s", qPrintable(dev), strerror(errno));
+ return;
+ }
+#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT
+ d = new QLinuxInputMouseHandlerData;
+#endif
+}
+
+
+QLinuxInputMouseHandler::~QLinuxInputMouseHandler()
+{
+ if (m_fd >= 0)
+ QT_CLOSE(m_fd);
+#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT
+ delete d;
+#endif
+}
+
+void QLinuxInputMouseHandler::sendMouseEvent(int x, int y, Qt::MouseButtons buttons)
+{
+ QPoint pos(x+m_xoffset, y+m_yoffset);
+ QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons);
+ m_prevx = x;
+ m_prevy = y;
+}
+
+void QLinuxInputMouseHandler::readMouseData()
+{
+ struct ::input_event buffer[32];
+ int n = 0;
+ bool posChanged = false;
+ bool pendingMouseEvent = false;
+ int eventCompressCount = 0;
+ forever {
+ n = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
+
+ if (n == 0) {
+ qWarning("Got EOF from the input device.");
+ return;
+ } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) {
+ qWarning("Could not read from input device: %s", strerror(errno));
+ return;
+ } else if (n % sizeof(buffer[0]) == 0) {
+ break;
+ }
+ }
+
+ n /= sizeof(buffer[0]);
+
+ for (int i = 0; i < n; ++i) {
+ struct ::input_event *data = &buffer[i];
+ //qDebug() << ">>" << hex << data->type << data->code << dec << data->value;
+ bool unknown = false;
+ if (data->type == EV_ABS) {
+ if (data->code == ABS_X && m_x != data->value) {
+ m_x = data->value;
+ posChanged = true;
+ } else if (data->code == ABS_Y && m_y != data->value) {
+ m_y = data->value;
+ posChanged = true;
+ } else if (data->code == ABS_PRESSURE) {
+ //ignore for now...
+ } else if (data->code == ABS_TOOL_WIDTH) {
+ //ignore for now...
+ } else if (data->code == ABS_HAT0X) {
+ //ignore for now...
+ } else if (data->code == ABS_HAT0Y) {
+ //ignore for now...
+#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT
+ } else if (data->code == ABS_MT_POSITION_X) {
+ d->currentX = data->value;
+ d->seenMT = true;
+ } else if (data->code == ABS_MT_POSITION_Y) {
+ d->currentY = data->value;
+ d->seenMT = true;
+ } else if (data->code == ABS_MT_TOUCH_MAJOR) {
+ if (data->value == 0)
+ d->setCurrentState(Qt::TouchPointReleased);
+ //otherwise, ignore for now...
+ } else if (data->code == ABS_MT_TOUCH_MINOR) {
+ //ignore for now...
+#endif
+ } else {
+ unknown = true;
+ }
+ } else if (data->type == EV_REL) {
+ if (data->code == REL_X) {
+ m_x += data->value;
+ posChanged = true;
+ } else if (data->code == REL_Y) {
+ m_y += data->value;
+ posChanged = true;
+ } else if (data->code == ABS_WHEEL) { // vertical scroll
+ // data->value: 1 == up, -1 == down
+ int delta = 120 * data->value;
+ QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y),
+ QPoint(m_x, m_y),
+ delta, Qt::Vertical);
+ } else if (data->code == ABS_THROTTLE) { // horizontal scroll
+ // data->value: 1 == right, -1 == left
+ int delta = 120 * -data->value;
+ QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y),
+ QPoint(m_x, m_y),
+ delta, Qt::Horizontal);
+ } else {
+ unknown = true;
+ }
+ } else if (data->type == EV_KEY && data->code == BTN_TOUCH) {
+ m_buttons = data->value ? Qt::LeftButton : Qt::NoButton;
+
+ sendMouseEvent(m_x, m_y, m_buttons);
+ pendingMouseEvent = false;
+ } else if (data->type == EV_KEY && data->code >= BTN_LEFT && data->code <= BTN_MIDDLE) {
+ Qt::MouseButton button = Qt::NoButton;
+ switch (data->code) {
+ case BTN_LEFT: button = Qt::LeftButton; break;
+ case BTN_MIDDLE: button = Qt::MidButton; break;
+ case BTN_RIGHT: button = Qt::RightButton; break;
+ }
+ if (data->value)
+ m_buttons |= button;
+ else
+ m_buttons &= ~button;
+ sendMouseEvent(m_x, m_y, m_buttons);
+ pendingMouseEvent = false;
+ } else if (data->type == EV_SYN && data->code == SYN_REPORT) {
+ if (posChanged) {
+ posChanged = false;
+ if (m_compression) {
+ pendingMouseEvent = true;
+ eventCompressCount++;
+ } else {
+ sendMouseEvent(m_x, m_y, m_buttons);
+ }
+ }
+#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT
+ if (d->state == QEvent::TouchBegin && !d->seenMT) {
+ //no multipoint-touch events to send
+ } else {
+ if (!d->seenMT)
+ d->state = QEvent::TouchEnd;
+
+ for (int i = d->currentPoint(); i < d->touchPoints.size(); ++i) {
+ d->touchPoints[i].pressure = 0;
+ d->touchPoints[i].state = Qt::TouchPointReleased;
+ }
+ //qDebug() << "handleTouchEvent" << d->state << d->touchPoints.size() << d->touchPoints[0].state;
+ QWindowSystemInterface::handleTouchEvent(0, d->state, QTouchEvent::TouchScreen, d->touchPoints);
+ if (d->seenMT) {
+ d->state = QEvent::TouchUpdate;
+ } else {
+ d->state = QEvent::TouchBegin;
+ d->touchPoints.clear();
+ }
+ d->setCurrentPoint(0);
+ d->seenMT = false;
+ }
+ } else if (data->type == EV_SYN && data->code == SYN_MT_REPORT) {
+ //store data for this touch point
+
+ if (!d->seenMT) {
+ d->setCurrentState(Qt::TouchPointReleased);
+ } else if (d->currentState() == Qt::TouchPointReleased) {
+ d->updateCurrentPos();
+ d->setCurrentState(Qt::TouchPointPressed);
+ } else if (d->currentMoved()) {
+ d->updateCurrentPos();
+ d->setCurrentState(Qt::TouchPointMoved);
+ } else {
+ d->setCurrentState(Qt::TouchPointStationary);
+ }
+ //qDebug() << "end of point" << d->currentPoint() << d->currentX << d->currentY << d->currentState();
+
+ //advance to next tp:
+ d->advanceCurrentPoint();
+#endif
+ } else if (data->type == EV_MSC && data->code == MSC_SCAN) {
+ // kernel encountered an unmapped key - just ignore it
+ continue;
+ } else {
+ unknown = true;
+ }
+#ifdef QLINUXINPUT_EXTRA_DEBUG
+ if (unknown) {
+ qWarning("unknown mouse event type=%x, code=%x, value=%x", data->type, data->code, data->value);
+ }
+#endif
+ }
+ if (m_compression && pendingMouseEvent) {
+ int distanceSquared = (m_x - m_prevx)*(m_x - m_prevx) + (m_y - m_prevy)*(m_y - m_prevy);
+ if (distanceSquared > m_jitterLimitSquared)
+ sendMouseEvent(m_x, m_y, m_buttons);
+ }
+}
+
+
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+//Keyboard handler
+
+
+
+
+class QWSLinuxInputKeyboardHandler : public QWSKeyboardHandler
+{
+public:
+ QWSLinuxInputKeyboardHandler(const QString&);
+ ~QWSLinuxInputKeyboardHandler();
+
+ virtual bool filterInputEvent(quint16 &input_code, qint32 &input_value);
+
+//private:
+// QWSLinuxInputKbPrivate *d;
+};
+
+
+QWSLinuxInputKeyboardHandler::QWSLinuxInputKeyboardHandler(const QString &device)
+ : QWSKeyboardHandler(device)
+{
+}
+
+QWSLinuxInputKeyboardHandler::~QWSLinuxInputKeyboardHandler()
+{
+}
+
+bool QWSLinuxInputKeyboardHandler::filterInputEvent(quint16 &, qint32 &)
+{
+ return false;
+}
+
+
+QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const QString &specification)
+ : m_handler(0), m_fd(-1), m_tty_fd(-1), m_orig_kbmode(K_XLATE)
+{
+ setObjectName(QLatin1String("LinuxInputSubsystem Keyboard Handler"));
+
+ QString dev = QLatin1String("/dev/input/event1");
+ int repeat_delay = -1;
+ int repeat_rate = -1;
+
+ bool ttymode = false;
+
+ QStringList args = specification.split(QLatin1Char(':'));
+ foreach (const QString &arg, args) {
+ if (arg.startsWith(QLatin1String("repeat-delay=")))
+ repeat_delay = arg.mid(13).toInt();
+ else if (arg.startsWith(QLatin1String("repeat-rate=")))
+ repeat_rate = arg.mid(12).toInt();
+ else if (arg.startsWith(QLatin1String("ttymode")))
+ ttymode = true;
+ else if (arg.startsWith(QLatin1String("/dev/")))
+ dev = arg;
+ }
+
+ m_handler = new QWSLinuxInputKeyboardHandler(dev); //This is a hack to avoid copying all the QWS code
+
+ m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDWR, 0);
+ if (m_fd >= 0) {
+ if (repeat_delay > 0 && repeat_rate > 0) {
+ int kbdrep[2] = { repeat_delay, repeat_rate };
+ ::ioctl(m_fd, EVIOCSREP, kbdrep);
+ }
+
+ QSocketNotifier *notifier;
+ notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
+ connect(notifier, SIGNAL(activated(int)), this, SLOT(readKeycode()));
+
+ if (ttymode) {
+ // play nice in case we are started from a shell (e.g. for debugging)
+ m_tty_fd = isatty(0) ? 0 : -1;
+
+ if (m_tty_fd >= 0) {
+ // save tty config for restore.
+ tcgetattr(m_tty_fd, &m_tty_attr);
+
+ struct ::termios termdata;
+ tcgetattr(m_tty_fd, &termdata);
+
+ // record the original mode so we can restore it again in the destructor.
+ ::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode);
+
+ // setting this translation mode is even needed in INPUT mode to prevent
+ // the shell from also interpreting codes, if the process has a tty
+ // attached: e.g. Ctrl+C wouldn't copy, but kill the application.
+ ::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW);
+
+ // set the tty layer to pass-through
+ termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
+ termdata.c_oflag = 0;
+ termdata.c_cflag = CREAD | CS8;
+ termdata.c_lflag = 0;
+ termdata.c_cc[VTIME]=0;
+ termdata.c_cc[VMIN]=1;
+ cfsetispeed(&termdata, 9600);
+ cfsetospeed(&termdata, 9600);
+ tcsetattr(m_tty_fd, TCSANOW, &termdata);
+ }
+ }
+ } else {
+ qWarning("Cannot open keyboard input device '%s': %s", qPrintable(dev), strerror(errno));
+ return;
+ }
+}
+
+QLinuxInputKeyboardHandler::~QLinuxInputKeyboardHandler()
+{
+ if (m_tty_fd >= 0) {
+ ::ioctl(m_tty_fd, KDSKBMODE, m_orig_kbmode);
+ tcsetattr(m_tty_fd, TCSANOW, &m_tty_attr);
+ }
+ if (m_fd >= 0)
+ QT_CLOSE(m_fd);
+ delete m_handler;
+}
+
+void QLinuxInputKeyboardHandler::switchLed(int led, bool state)
+{
+ struct ::input_event led_ie;
+ ::gettimeofday(&led_ie.time, 0);
+ led_ie.type = EV_LED;
+ led_ie.code = led;
+ led_ie.value = state;
+
+ QT_WRITE(m_fd, &led_ie, sizeof(led_ie));
+}
+
+
+
+void QLinuxInputKeyboardHandler::readKeycode()
+{
+ struct ::input_event buffer[32];
+ int n = 0;
+
+ forever {
+ n = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
+
+ if (n == 0) {
+ qWarning("Got EOF from the input device.");
+ return;
+ } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) {
+ qWarning("Could not read from input device: %s", strerror(errno));
+ return;
+ } else if (n % sizeof(buffer[0]) == 0) {
+ break;
+ }
+ }
+
+ n /= sizeof(buffer[0]);
+
+ for (int i = 0; i < n; ++i) {
+ if (buffer[i].type != EV_KEY)
+ continue;
+
+ quint16 code = buffer[i].code;
+ qint32 value = buffer[i].value;
+
+ if (m_handler->filterInputEvent(code, value))
+ continue;
+
+ QWSKeyboardHandler::KeycodeAction ka;
+ ka = m_handler->processKeycode(code, value != 0, value == 2);
+
+ switch (ka) {
+ case QWSKeyboardHandler::CapsLockOn:
+ case QWSKeyboardHandler::CapsLockOff:
+ switchLed(LED_CAPSL, ka == QWSKeyboardHandler::CapsLockOn);
+ break;
+
+ case QWSKeyboardHandler::NumLockOn:
+ case QWSKeyboardHandler::NumLockOff:
+ switchLed(LED_NUML, ka == QWSKeyboardHandler::NumLockOn);
+ break;
+
+ case QWSKeyboardHandler::ScrollLockOn:
+ case QWSKeyboardHandler::ScrollLockOff:
+ switchLed(LED_SCROLLL, ka == QWSKeyboardHandler::ScrollLockOn);
+ break;
+
+ default:
+ // ignore console switching and reboot
+ break;
+ }
+ }
+}
+
+
+
+
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h
new file mode 100644
index 0000000..c94c0f4
--- /dev/null
+++ b/src/plugins/generic/linuxinput/qlinuxinput.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLINUXINPUT_H
+#define QLINUXINPUT_H
+
+#include <qobject.h>
+#include <Qt>
+#include <termios.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSocketNotifier;
+
+class QLinuxInputMouseHandlerData;
+
+class QLinuxInputMouseHandler : public QObject
+{
+ Q_OBJECT
+public:
+ QLinuxInputMouseHandler(const QString &key, const QString &specification);
+ ~QLinuxInputMouseHandler();
+
+private slots:
+ void readMouseData();
+
+private:
+ void sendMouseEvent(int x, int y, Qt::MouseButtons buttons);
+ QSocketNotifier * m_notify;
+ int m_fd;
+ int m_x, m_y;
+ int m_prevx, m_prevy;
+ int m_xoffset, m_yoffset;
+ int m_smoothx, m_smoothy;
+ Qt::MouseButtons m_buttons;
+ bool m_compression;
+ bool m_smooth;
+ int m_jitterLimitSquared;
+ QLinuxInputMouseHandlerData *d;
+};
+
+
+class QWSLinuxInputKeyboardHandler;
+
+class QLinuxInputKeyboardHandler : public QObject
+{
+ Q_OBJECT
+public:
+ QLinuxInputKeyboardHandler(const QString &key, const QString &specification);
+ ~QLinuxInputKeyboardHandler();
+
+
+private:
+ void switchLed(int, bool);
+
+private slots:
+ void readKeycode();
+
+private:
+ QWSLinuxInputKeyboardHandler *m_handler;
+ int m_fd;
+ int m_tty_fd;
+ struct termios m_tty_attr;
+ int m_orig_kbmode;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QLINUXINPUT_H
diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp
new file mode 100644
index 0000000..502c6a0
--- /dev/null
+++ b/src/plugins/generic/tslib/main.cpp
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 <qgenericplugin_qpa.h>
+#include "qtslib.h"
+
+QT_BEGIN_NAMESPACE
+
+class QTsLibPlugin : public QGenericPlugin
+{
+public:
+ QTsLibPlugin();
+
+ QStringList keys() const;
+ QObject* create(const QString &key, const QString &specification);
+};
+
+QTsLibPlugin::QTsLibPlugin()
+ : QGenericPlugin()
+{
+}
+
+QStringList QTsLibPlugin::keys() const
+{
+ return (QStringList()
+ << QLatin1String("Tslib")
+ << QLatin1String("TslibRaw"));
+}
+
+QObject* QTsLibPlugin::create(const QString &key,
+ const QString &specification)
+{
+ if (!key.compare(QLatin1String("Tslib"), Qt::CaseInsensitive) || !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive))
+ return new QTsLibMouseHandler(key, specification);
+ return 0;
+ }
+
+Q_EXPORT_PLUGIN2(qtslibplugin, QTsLibPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/generic/tslib/qtslib.cpp b/src/plugins/generic/tslib/qtslib.cpp
new file mode 100644
index 0000000..12963a0
--- /dev/null
+++ b/src/plugins/generic/tslib/qtslib.cpp
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qtslib.h"
+
+
+#include <QSocketNotifier>
+#include <QStringList>
+#include <QPoint>
+#include <QWindowSystemInterface>
+
+#include <Qt>
+
+#include <errno.h>
+#include <tslib.h>
+
+#include <qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
+ const QString &specification)
+ : m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false)
+{
+ qDebug() << "QTsLibMouseHandler" << key << specification;
+ setObjectName(QLatin1String("TSLib Mouse Handler"));
+
+ QByteArray device = "/dev/input/event1";
+ if (specification.startsWith("/dev/"))
+ device = specification.toLocal8Bit();
+
+ m_dev = ts_open(device.constData(), 1);
+
+ if (ts_config(m_dev)) {
+ perror("Error configuring\n");
+ }
+
+
+ m_rawMode = !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive);
+
+ int fd = ts_fd(m_dev);
+ if (fd >= 0) {
+ m_notify = new QSocketNotifier(fd, QSocketNotifier::Read, this);
+ connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData()));
+ } else {
+ qWarning("Cannot open mouse input device '%s': %s", device.constData(), strerror(errno));
+ return;
+ }
+}
+
+
+QTsLibMouseHandler::~QTsLibMouseHandler()
+{
+ if (m_dev)
+ ts_close(m_dev);
+}
+
+
+static bool get_sample(struct tsdev *dev, struct ts_sample *sample, bool rawMode)
+{
+ if (rawMode) {
+ return (ts_read_raw(dev, sample, 1) == 1);
+ } else {
+ int ret = ts_read(dev, sample, 1);
+ return ( ret == 1);
+ }
+}
+
+
+void QTsLibMouseHandler::readMouseData()
+{
+ ts_sample sample;
+ while (get_sample(m_dev, &sample, m_rawMode)) {
+
+ bool pressed = sample.pressure;
+ int x = sample.x;
+ int y = sample.y;
+
+
+ if (!m_rawMode) {
+ //filtering: ignore movements of 2 pixels or less
+ int dx = x - m_x;
+ int dy = y - m_y;
+ if (dx*dx <= 4 && dy*dy <= 4 && pressed == m_pressed)
+ continue;
+ } else {
+ // work around missing coordinates on mouse release in raw mode
+ if (sample.pressure == 0 && sample.x == 0 && sample.y == 0) {
+ x = m_x;
+ y = m_y;
+ }
+ }
+ QPoint pos(x, y);
+
+ //printf("handleMouseEvent %d %d %d %ld\n", m_x, m_y, pressed, sample.tv.tv_usec);
+
+ QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton);
+
+ m_x = x;
+ m_y = y;
+ m_pressed = pressed;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/generic/tslib/qtslib.h b/src/plugins/generic/tslib/qtslib.h
new file mode 100644
index 0000000..5eab8b9
--- /dev/null
+++ b/src/plugins/generic/tslib/qtslib.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTSLIB_H
+#define QTSLIB_H
+
+#include <qobject.h>
+//#include <Qt>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSocketNotifier;
+struct tsdev;
+
+class QTsLibMouseHandler : public QObject
+{
+ Q_OBJECT
+public:
+ QTsLibMouseHandler(const QString &key, const QString &specification);
+ ~QTsLibMouseHandler();
+
+private slots:
+ void readMouseData();
+
+private:
+ QSocketNotifier * m_notify;
+ tsdev *m_dev;
+ int m_x, m_y;
+ bool m_pressed;
+ bool m_rawMode;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QTSLIB_H
diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro
new file mode 100644
index 0000000..74c7fd2
--- /dev/null
+++ b/src/plugins/generic/tslib/tslib.pro
@@ -0,0 +1,13 @@
+TARGET = qlinuxinputplugin
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/generic
+target.path = $$[QT_INSTALL_PLUGINS]/generic
+INSTALLS += target
+
+HEADERS = qtslib.h
+
+SOURCES = main.cpp \
+ qtslib.cpp
+
+LIBS += -lts
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
index 4869eba..ceed7ae 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
@@ -55,6 +55,7 @@
#include <private/qpixmap_raster_p.h>
#include <private/qimagepixmapcleanuphooks_p.h>
+
QT_BEGIN_NAMESPACE
class SurfaceCache;
@@ -67,6 +68,15 @@ public:
Matrix_BlitsUnsupported = (Matrix_NegativeScale|Matrix_RectsUnsupported)
};
+ inline static uint getTransformationType(const QTransform &transform)
+ {
+ int ret = transform.type();
+ if (qMin(transform.m11(), transform.m22()) < 0) {
+ ret |= QDirectFBPaintEnginePrivate::Matrix_NegativeScale;
+ }
+ return ret;
+ }
+
enum CompositionModeStatus {
PorterDuff_None = 0x0,
PorterDuff_Supported = 0x1,
@@ -98,7 +108,7 @@ public:
inline bool isSimpleBrush(const QBrush &brush) const;
- void drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &pos);
+ void drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &pos, const QTransform &pixmapTransform);
void blit(const QRectF &dest, IDirectFBSurface *surface, const QRectF &src);
inline bool supportsStretchBlit() const;
@@ -112,7 +122,11 @@ public:
static inline int cacheCost(const QImage &img) { return img.width() * img.height() * img.depth() / 8; }
#endif
- void prepareForBlit(bool alpha);
+ enum BlitFlag {
+ HasAlpha = 0x1,
+ Premultiplied = 0x2
+ };
+ void prepareForBlit(uint blitFlags);
IDirectFBSurface *surface;
@@ -616,7 +630,12 @@ void QDirectFBPaintEngine::drawImage(const QRectF &r, const QImage &image,
#if !defined QT_NO_DIRECTFB_PREALLOCATED || defined QT_DIRECTFB_IMAGECACHE
bool release;
IDirectFBSurface *imgSurface = d->getSurface(image, &release);
- d->prepareForBlit(QDirectFBScreen::hasAlphaChannel(imgSurface));
+ uint blitFlags = 0;
+ if (image.hasAlphaChannel())
+ blitFlags |= QDirectFBPaintEnginePrivate::HasAlpha;
+ if (QDirectFBScreen::isPremultiplied(image.format()))
+ blitFlags |= QDirectFBPaintEnginePrivate::Premultiplied;
+ d->prepareForBlit(blitFlags);
CLIPPED_PAINT(d->blit(r, imgSurface, sr));
if (release) {
#if (Q_DIRECTFB_VERSION >= 0x010000)
@@ -655,8 +674,14 @@ void QDirectFBPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pixmap,
QRasterPaintEngine::drawImage(r, *img, sr);
} else {
QDirectFBPaintEnginePrivate::unlock(dfbData);
- d->prepareForBlit(pixmap.hasAlphaChannel());
IDirectFBSurface *s = dfbData->directFBSurface();
+ uint blitFlags = 0;
+ if (pixmap.hasAlphaChannel())
+ blitFlags |= QDirectFBPaintEnginePrivate::HasAlpha;
+ if (QDirectFBScreen::isPremultiplied(dfbData->pixelFormat()))
+ blitFlags |= QDirectFBPaintEnginePrivate::Premultiplied;
+
+ d->prepareForBlit(blitFlags);
CLIPPED_PAINT(d->blit(r, s, sr));
}
}
@@ -691,7 +716,8 @@ void QDirectFBPaintEngine::drawTiledPixmap(const QRectF &r,
const QPixmap pix(data);
QRasterPaintEngine::drawTiledPixmap(r, pix, offset);
} else {
- CLIPPED_PAINT(d->drawTiledPixmap(r, pixmap, offset));
+ QTransform transform(state()->matrix);
+ CLIPPED_PAINT(d->drawTiledPixmap(r, pixmap, offset, transform));
}
}
@@ -811,9 +837,14 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QBrush &brush)
return; }
case Qt::TexturePattern: {
+ const QPointF &brushOrigin = state()->brushOrigin;
+ const QTransform stateTransform = state()->matrix;
+ QTransform transform(stateTransform);
+ transform.translate(brushOrigin.x(), brushOrigin.y());
+ transform = brush.transform() * transform;
if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)
- || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
- || (!d->supportsStretchBlit() && state()->matrix.isScaling())) {
+ || (QDirectFBPaintEnginePrivate::getTransformationType(transform) & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported)
+ || (!d->supportsStretchBlit() && transform.isScaling())) {
break;
}
@@ -821,7 +852,7 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QBrush &brush)
if (texture.pixmapData()->classId() != QPixmapData::DirectFBClass)
break;
- CLIPPED_PAINT(d->drawTiledPixmap(rect, texture, rect.topLeft() - state()->brushOrigin));
+ CLIPPED_PAINT(d->drawTiledPixmap(stateTransform.mapRect(rect), texture, rect.topLeft() - brushOrigin, transform));
return; }
default:
break;
@@ -932,10 +963,7 @@ void QDirectFBPaintEnginePrivate::unlock(QDirectFBPaintDevice *device)
void QDirectFBPaintEnginePrivate::setTransform(const QTransform &transform)
{
- transformationType = transform.type();
- if (qMin(transform.m11(), transform.m22()) < 0) {
- transformationType |= QDirectFBPaintEnginePrivate::Matrix_NegativeScale;
- }
+ transformationType = getTransformationType(transform);
setPen(q->state()->pen);
}
@@ -978,7 +1006,7 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m
break;
case QPainter::CompositionMode_SourceOver:
compositionModeStatus &= ~PorterDuff_AlwaysBlend;
- surface->SetPorterDuff(surface, DSPD_NONE);
+ surface->SetPorterDuff(surface, DSPD_SRC_OVER);
break;
case QPainter::CompositionMode_DestinationOver:
surface->SetPorterDuff(surface, DSPD_DST_OVER);
@@ -1031,13 +1059,18 @@ void QDirectFBPaintEnginePrivate::setRenderHints(QPainter::RenderHints hints)
}
}
-void QDirectFBPaintEnginePrivate::prepareForBlit(bool alpha)
+void QDirectFBPaintEnginePrivate::prepareForBlit(uint flags)
{
- DFBSurfaceBlittingFlags blittingFlags = alpha ? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX;
+ DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX;
+ if (flags & Premultiplied)
+ blittingFlags |= DSBLIT_SRC_PREMULTIPLY;
+ if (flags & HasAlpha)
+ blittingFlags |= DSBLIT_BLEND_ALPHACHANNEL;
if (opacity != 255) {
blittingFlags |= DSBLIT_BLEND_COLORALPHA;
+ surface->SetColor(surface, 0xff, 0xff, 0xff, opacity);
}
- surface->SetColor(surface, 0xff, 0xff, 0xff, opacity);
+
surface->SetBlittingFlags(surface, blittingFlags);
}
@@ -1132,10 +1165,12 @@ static inline qreal fixCoord(qreal rect_pos, qreal pixmapSize, qreal offset)
return pos;
}
-void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &off)
+void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap,
+ const QPointF &off, const QTransform &pixmapTransform)
{
- Q_ASSERT(!(transformationType & Matrix_BlitsUnsupported));
const QTransform &transform = q->state()->matrix;
+ Q_ASSERT(!(getTransformationType(transform) & Matrix_BlitsUnsupported) &&
+ !(getTransformationType(pixmapTransform) & Matrix_BlitsUnsupported));
const QRect destinationRect = transform.mapRect(dest).toRect().normalized();
QRect newClip = destinationRect;
if (!currentClip.isEmpty())
@@ -1152,22 +1187,27 @@ void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPix
};
surface->SetClip(surface, &clip);
- QPointF offset = off;
+ QPointF offset = pixmapTransform.inverted().map(off);
Q_ASSERT(transform.type() <= QTransform::TxScale);
- prepareForBlit(pixmap.hasAlphaChannel());
QPixmapData *data = pixmap.pixmapData();
Q_ASSERT(data->classId() == QPixmapData::DirectFBClass);
QDirectFBPixmapData *dfbData = static_cast<QDirectFBPixmapData*>(data);
+ IDirectFBSurface *sourceSurface = dfbData->directFBSurface();
+ uint blitFlags = 0;
+ if (dfbData->hasAlphaChannel())
+ blitFlags |= HasAlpha;
+ if (QDirectFBScreen::isPremultiplied(dfbData->pixelFormat()))
+ blitFlags |= Premultiplied;
+ prepareForBlit(blitFlags);
QDirectFBPaintEnginePrivate::unlock(dfbData);
const QSize pixmapSize = dfbData->size();
- IDirectFBSurface *sourceSurface = dfbData->directFBSurface();
- if (transform.isScaling()) {
+ if (transform.isScaling() || pixmapTransform.isScaling()) {
Q_ASSERT(supportsStretchBlit());
Q_ASSERT(qMin(transform.m11(), transform.m22()) >= 0);
offset.rx() *= transform.m11();
offset.ry() *= transform.m22();
- const QSizeF mappedSize(pixmapSize.width() * transform.m11(), pixmapSize.height() * transform.m22());
+ const QSizeF mappedSize(pixmapSize.width() * pixmapTransform.m11(), pixmapSize.height() * pixmapTransform.m22());
qreal y = fixCoord(destinationRect.y(), mappedSize.height(), offset.y());
const qreal startX = fixCoord(destinationRect.x(), mappedSize.width(), offset.x());
while (y <= destinationRect.bottom()) {
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index c0d96d7..ce3a05a 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -251,12 +251,6 @@ bool QDirectFBPixmapData::fromDataBufferDescription(const DFBDataBufferDescripti
}
QDirectFBPointer<IDirectFBImageProvider> provider(providerPtr);
- DFBSurfaceDescription surfaceDescription;
- if ((result = provider->GetSurfaceDescription(provider.data(), &surfaceDescription)) != DFB_OK) {
- DirectFBError("QDirectFBPixmapData::fromDataBufferDescription(): Can't get surface description", result);
- return false;
- }
-
DFBImageDescription imageDescription;
result = provider->GetImageDescription(provider.data(), &imageDescription);
if (result != DFB_OK) {
@@ -264,7 +258,17 @@ bool QDirectFBPixmapData::fromDataBufferDescription(const DFBDataBufferDescripti
return false;
}
- alpha = imageDescription.caps & (DICAPS_ALPHACHANNEL|DICAPS_COLORKEY);
+ if (imageDescription.caps & DICAPS_COLORKEY) {
+ return false;
+ }
+
+ DFBSurfaceDescription surfaceDescription;
+ if ((result = provider->GetSurfaceDescription(provider.data(), &surfaceDescription)) != DFB_OK) {
+ DirectFBError("QDirectFBPixmapData::fromDataBufferDescription(): Can't get surface description", result);
+ return false;
+ }
+
+ alpha = imageDescription.caps & DICAPS_ALPHACHANNEL;
imageFormat = alpha ? screen->alphaPixmapFormat() : screen->pixelFormat();
dfbSurface = screen->createDFBSurface(QSize(surfaceDescription.width, surfaceDescription.height),
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
index bf6164d..f2ee6ae 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
@@ -1554,9 +1554,8 @@ void QDirectFBScreen::exposeRegion(QRegion r, int)
: (DSBLIT_BLEND_ALPHACHANNEL|DSBLIT_BLEND_COLORALPHA);
}
}
- if (!region.isEmpty()) {
- solidFill(d_ptr->backgroundColor, region);
- }
+
+ solidFill(d_ptr->backgroundColor, region);
while (idx > 0) {
const PaintCommand &cmd = commands[--idx];
@@ -1629,29 +1628,34 @@ void QDirectFBScreen::solidFill(const QColor &color, const QRegion &region)
Q_UNUSED(color);
Q_UNUSED(region);
#else
+ QDirectFBScreen::solidFill(d_ptr->primarySurface, color, region);
+#endif
+}
+
+static inline void clearRect(IDirectFBSurface *surface, const QColor &color, const QRect &rect)
+{
+ Q_ASSERT(surface);
+ const DFBRegion region = { rect.left(), rect.top(), rect.right(), rect.bottom() };
+ // could just reinterpret_cast this to a DFBRegion
+ surface->SetClip(surface, &region);
+ surface->Clear(surface, color.red(), color.green(), color.blue(), color.alpha());
+}
+
+void QDirectFBScreen::solidFill(IDirectFBSurface *surface, const QColor &color, const QRegion &region)
+{
if (region.isEmpty())
return;
- d_ptr->primarySurface->SetColor(d_ptr->primarySurface,
- color.red(), color.green(), color.blue(),
- color.alpha());
const int n = region.rectCount();
if (n == 1) {
- const QRect r = region.boundingRect();
- d_ptr->primarySurface->FillRectangle(d_ptr->primarySurface, r.x(), r.y(), r.width(), r.height());
+ clearRect(surface, color, region.boundingRect());
} else {
const QVector<QRect> rects = region.rects();
- QVarLengthArray<DFBRectangle, 32> rectArray(n);
for (int i=0; i<n; ++i) {
- const QRect &r = rects.at(i);
- rectArray[i].x = r.x();
- rectArray[i].y = r.y();
- rectArray[i].w = r.width();
- rectArray[i].h = r.height();
+ clearRect(surface, color, rects.at(i));
}
- d_ptr->primarySurface->FillRectangles(d_ptr->primarySurface, rectArray.constData(), n);
}
-#endif
+ surface->SetClip(surface, 0);
}
QImage::Format QDirectFBScreen::alphaPixmapFormat() const
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
index c483020..1085423 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
@@ -159,6 +159,7 @@ public:
void exposeRegion(QRegion r, int changing);
void solidFill(const QColor &color, const QRegion &region);
+ static void solidFill(IDirectFBSurface *surface, const QColor &color, const QRegion &region);
void setMode(int width, int height, int depth);
void blank(bool on);
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
index 51969fc..2eeee24 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
@@ -380,11 +380,18 @@ void QDirectFBWindowSurface::flush(QWidget *widget, const QRegion &region,
flushPending = false;
}
-void QDirectFBWindowSurface::beginPaint(const QRegion &)
+void QDirectFBWindowSurface::beginPaint(const QRegion &region)
{
if (!engine) {
engine = new QDirectFBPaintEngine(this);
}
+
+ if (dfbSurface) {
+ const QWidget *win = window();
+ if (win && win->testAttribute(Qt::WA_NoSystemBackground)) {
+ QDirectFBScreen::solidFill(dfbSurface, Qt::transparent, region);
+ }
+ }
flushPending = true;
}
diff --git a/src/plugins/graphicssystems/graphicssystems.pro b/src/plugins/graphicssystems/graphicssystems.pro
index 29a1f34..5c99291 100644
--- a/src/plugins/graphicssystems/graphicssystems.pro
+++ b/src/plugins/graphicssystems/graphicssystems.pro
@@ -1,7 +1,9 @@
TEMPLATE = subdirs
SUBDIRS += trace
!wince*:contains(QT_CONFIG, opengl):SUBDIRS += opengl
-contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl):SUBDIRS += openvg
+contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) {
+ SUBDIRS += openvg
+}
contains(QT_CONFIG, shivavg) {
# Only works under X11 at present
diff --git a/src/plugins/graphicssystems/meego/dithering.cpp b/src/plugins/graphicssystems/meego/dithering.cpp
new file mode 100644
index 0000000..1a2e3fa
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/dithering.cpp
@@ -0,0 +1,306 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// This is an implementation of the 32bit => 16bit Floyd-Steinberg dithering.
+// The alghorithm used here is not the fastest possible but it's prolly fast enough:
+// uses look-up tables, integer-only arthmetics and works in one pass on two lines
+// at a time. It's a high-quality dithering using 1/8 diffusion precission.
+// Two functions here to look at:
+//
+// * convertRGBA32_to_RGB565
+// * convertRGBA32_to_RGBA4444
+//
+// Each channel (RGBA) is diffused independently and alpha is dithered too.
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <QVarLengthArray>
+
+// Gets a component (red = 1, green = 2...) from a RGBA data structure.
+// data is unsigned char. stride is the number of bytes per line.
+#define GET_RGBA_COMPONENT(data, x, y, stride, c) (data[(y * stride) + (x << 2) + c])
+
+// Writes a new pixel with r, g, b to data in 565 16bit format. Data is a short.
+#define PUT_565(data, x, y, width, r, g, b) (data[(y * width) + x] = (r << 11) | (g << 5) | b)
+
+// Writes a new pixel with r, g, b, a to data in 4444 RGBA 16bit format. Data is a short.
+#define PUT_4444(data, x, y, width, r, g, b, a) (data[(y * width) + x] = (r << 12) | (g << 8) | (b << 4) | a)
+
+// Writes(ads) a new value to the diffusion accumulator. accumulator is a short.
+// x, y is a position in the accumulation buffer. y can be 0 or 1 -- we operate on two lines at time.
+#define ACCUMULATE(accumulator, x, y, width, v) if (x < width && x >= 0) accumulator[(y * width) + x] += v
+
+// Clamps a value to be in 0..255 range.
+#define CLAMP_256(v) if (v > 255) v = 255; if (v < 0) v = 0;
+
+// Converts incoming RGB32 (QImage::Format_RGB32) to RGB565. Returns the newly allocated data.
+unsigned short* convertRGB32_to_RGB565(const unsigned char *in, int width, int height, int stride)
+{
+ // Output line stride. Aligned to 4 bytes.
+ int alignedWidth = width;
+ if (alignedWidth % 2 > 0)
+ alignedWidth++;
+
+ // Will store output
+ unsigned short *out = (unsigned short *) malloc(alignedWidth * height * 2);
+
+ // Lookup tables for the 8bit => 6bit and 8bit => 5bit conversion
+ unsigned char lookup_8bit_to_5bit[256];
+ short lookup_8bit_to_5bit_diff[256];
+ unsigned char lookup_8bit_to_6bit[256];
+ short lookup_8bit_to_6bit_diff[256];
+
+ // Macros for the conversion using the lookup table.
+ #define CONVERT_8BIT_TO_5BIT(v) (lookup_8bit_to_5bit[v])
+ #define DIFF_8BIT_TO_5BIT(v) (lookup_8bit_to_5bit_diff[v])
+
+ #define CONVERT_8BIT_TO_6BIT(v) (lookup_8bit_to_6bit[v])
+ #define DIFF_8BIT_TO_6BIT(v) (lookup_8bit_to_6bit_diff[v])
+
+ int i;
+ int x, y, c; // Pixel we're processing. c is component number (0, 1, 2 for r, b, b)
+ short component[3]; // Stores the new components (r, g, b) for pixel produced during conversion
+ short diff; // The difference between the converted value and the original one. To be accumulated.
+ QVarLengthArray <short> accumulatorData(3 * width * 2); // Data for three acumulators for r, g, b. Each accumulator is two lines.
+ short *accumulator[3]; // Helper for accessing the accumulator on a per-channel basis more easily.
+ accumulator[0] = accumulatorData.data();
+ accumulator[1] = accumulatorData.data() + width;
+ accumulator[2] = accumulatorData.data() + (width * 2);
+
+ // Produce the conversion lookup tables.
+ for (i = 0; i < 256; i++) {
+ lookup_8bit_to_5bit[i] = round(i / 8.0);
+
+ // Before bitshifts: (i * 8) - (... * 8 * 8)
+ lookup_8bit_to_5bit_diff[i] = (i << 3) - (lookup_8bit_to_5bit[i] << 6);
+ if (lookup_8bit_to_5bit[i] > 31)
+ lookup_8bit_to_5bit[i] -= 1;
+
+ lookup_8bit_to_6bit[i] = round(i / 4.0);
+
+ // Before bitshifts: (i * 8) - (... * 4 * 8)
+ lookup_8bit_to_6bit_diff[i] = (i << 3) - (lookup_8bit_to_6bit[i] << 5);
+ if (lookup_8bit_to_6bit[i] > 63)
+ lookup_8bit_to_6bit[i] -= 1;
+ }
+
+ // Clear the accumulators
+ memset(accumulator[0], 0, width * 4);
+ memset(accumulator[1], 0, width * 4);
+ memset(accumulator[2], 0, width * 4);
+
+ // For each line...
+ for (y = 0; y < height; y++) {
+
+ // For each accumulator, move the second line (index 1) to replace the first line (index 0).
+ // Clear the second line (index 1)
+ memcpy(accumulator[0], accumulator[0] + width, width * 2);
+ memset(accumulator[0] + width, 0, width * 2);
+
+ memcpy(accumulator[1], accumulator[1] + width, width * 2);
+ memset(accumulator[1] + width, 0, width * 2);
+
+ memcpy(accumulator[2], accumulator[2] + width, width * 2);
+ memset(accumulator[2] + width, 0, width * 2);
+
+ // For each column....
+ for (x = 0; x < width; x++) {
+
+ // For each component (r, g, b)...
+ for (c = 0; c < 3; c++) {
+
+ // Get the 8bit value from the original image
+ component[c] = GET_RGBA_COMPONENT(in, x, y, stride, c);
+
+ // Add the diffusion for this pixel we stored in the accumulator.
+ // >> 7 because the values in accumulator are stored * 128
+ component[c] += accumulator[c][x] >> 7;
+
+ // Make sure we're not over the boundaries.
+ CLAMP_256(component[c]);
+
+ // For green component we use 6 bits. Otherwise 5 bits.
+ // Store the difference from converting 8bit => 6 bit and the orig pixel.
+ // Convert 8bit => 6(5) bit.
+ if (c == 1) {
+ diff = DIFF_8BIT_TO_6BIT(component[c]);
+ component[c] = CONVERT_8BIT_TO_6BIT(component[c]);
+ } else {
+ diff = DIFF_8BIT_TO_5BIT(component[c]);
+ component[c] = CONVERT_8BIT_TO_5BIT(component[c]);
+ }
+
+ // Distribute the difference according to the matrix in the
+ // accumulation bufffer.
+ ACCUMULATE(accumulator[c], x + 1, 0, width, diff * 7);
+ ACCUMULATE(accumulator[c], x - 1, 1, width, diff * 3);
+ ACCUMULATE(accumulator[c], x, 1, width, diff * 5);
+ ACCUMULATE(accumulator[c], x + 1, 1, width, diff * 1);
+ }
+
+ // Write the newly produced pixel
+ PUT_565(out, x, y, alignedWidth, component[2], component[1], component[0]);
+ }
+ }
+
+ return out;
+}
+
+// Converts incoming RGBA32 (QImage::Format_ARGB32_Premultiplied) to RGB565. Returns the newly allocated data.
+// This function is similar (yet different) to the _565 variant but it makes sense to duplicate it here for simplicity.
+// The output has each scan line aligned to 4 bytes (as expected by GL by default).
+unsigned short* convertARGB32_to_RGBA4444(const unsigned char *in, int width, int height, int stride)
+{
+ // Output line stride. Aligned to 4 bytes.
+ int alignedWidth = width;
+ if (alignedWidth % 2 > 0)
+ alignedWidth++;
+
+ // Will store output
+ unsigned short *out = (unsigned short *) malloc(alignedWidth * 2 * height);
+
+ // Lookup tables for the 8bit => 4bit conversion
+ unsigned char lookup_8bit_to_4bit[256];
+ short lookup_8bit_to_4bit_diff[256];
+
+ // Macros for the conversion using the lookup table.
+ #define CONVERT_8BIT_TO_4BIT(v) (lookup_8bit_to_4bit[v])
+ #define DIFF_8BIT_TO_4BIT(v) (lookup_8bit_to_4bit_diff[v])
+
+ int i;
+ int x, y, c; // Pixel we're processing. c is component number (0, 1, 2, 3 for r, b, b, a)
+ short component[4]; // Stores the new components (r, g, b, a) for pixel produced during conversion
+ short diff; // The difference between the converted value and the original one. To be accumulated.
+ QVarLengthArray <short> accumulatorData(4 * width * 2); // Data for three acumulators for r, g, b. Each accumulator is two lines.
+ short *accumulator[4]; // Helper for accessing the accumulator on a per-channel basis more easily.
+ accumulator[0] = accumulatorData.data();
+ accumulator[1] = accumulatorData.data() + width;
+ accumulator[2] = accumulatorData.data() + (width * 2);
+ accumulator[3] = accumulatorData.data() + (width * 3);
+
+ // Produce the conversion lookup tables.
+ for (i = 0; i < 256; i++) {
+ lookup_8bit_to_4bit[i] = round(i / 16.0);
+ // Before bitshifts: (i * 8) - (... * 16 * 8)
+ lookup_8bit_to_4bit_diff[i] = (i << 3) - (lookup_8bit_to_4bit[i] << 7);
+
+ if (lookup_8bit_to_4bit[i] > 15)
+ lookup_8bit_to_4bit[i] = 15;
+ }
+
+ // Clear the accumulators
+ memset(accumulator[0], 0, width * 4);
+ memset(accumulator[1], 0, width * 4);
+ memset(accumulator[2], 0, width * 4);
+ memset(accumulator[3], 0, width * 4);
+
+ // For each line...
+ for (y = 0; y < height; y++) {
+
+ // For each component (r, g, b, a)...
+ memcpy(accumulator[0], accumulator[0] + width, width * 2);
+ memset(accumulator[0] + width, 0, width * 2);
+
+ memcpy(accumulator[1], accumulator[1] + width, width * 2);
+ memset(accumulator[1] + width, 0, width * 2);
+
+ memcpy(accumulator[2], accumulator[2] + width, width * 2);
+ memset(accumulator[2] + width, 0, width * 2);
+
+ memcpy(accumulator[3], accumulator[3] + width, width * 2);
+ memset(accumulator[3] + width, 0, width * 2);
+
+ // For each column....
+ for (x = 0; x < width; x++) {
+
+ // For each component (r, g, b, a)...
+ for (c = 0; c < 4; c++) {
+
+ // Get the 8bit value from the original image
+ component[c] = GET_RGBA_COMPONENT(in, x, y, stride, c);
+
+ // Add the diffusion for this pixel we stored in the accumulator.
+ // >> 7 because the values in accumulator are stored * 128
+ component[c] += accumulator[c][x] >> 7;
+
+ // Make sure we're not over the boundaries.
+ CLAMP_256(component[c]);
+
+ // Store the difference from converting 8bit => 4bit and the orig pixel.
+ // Convert 8bit => 4bit.
+ diff = DIFF_8BIT_TO_4BIT(component[c]);
+ component[c] = CONVERT_8BIT_TO_4BIT(component[c]);
+
+ // Distribute the difference according to the matrix in the
+ // accumulation bufffer.
+ ACCUMULATE(accumulator[c], x + 1, 0, width, diff * 7);
+ ACCUMULATE(accumulator[c], x - 1, 1, width, diff * 3);
+ ACCUMULATE(accumulator[c], x, 1, width, diff * 5);
+ ACCUMULATE(accumulator[c], x + 1, 1, width, diff * 1);
+ }
+
+ // Write the newly produced pixel
+ PUT_4444(out, x, y, alignedWidth, component[0], component[1], component[2], component[3]);
+ }
+ }
+
+ return out;
+}
+
+unsigned char* convertBGRA32_to_RGBA32(const unsigned char *in, int width, int height, int stride)
+{
+ unsigned char *out = (unsigned char *) malloc(stride * height);
+
+ // For each line...
+ for (int y = 0; y < height; y++) {
+ // For each column
+ for (int x = 0; x < width; x++) {
+ out[(stride * y) + (x * 4) + 0] = in[(stride * y) + (x * 4) + 2];
+ out[(stride * y) + (x * 4) + 1] = in[(stride * y) + (x * 4) + 1];
+ out[(stride * y) + (x * 4) + 2] = in[(stride * y) + (x * 4) + 0];
+ out[(stride * y) + (x * 4) + 3] = in[(stride * y) + (x * 4) + 3];
+ }
+ }
+
+ return out;
+}
diff --git a/src/plugins/graphicssystems/meego/meego.pro b/src/plugins/graphicssystems/meego/meego.pro
index d750d34..0d3cce6 100644
--- a/src/plugins/graphicssystems/meego/meego.pro
+++ b/src/plugins/graphicssystems/meego/meego.pro
@@ -5,8 +5,8 @@ QT += gui opengl
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems
-HEADERS = qmeegographicssystem.h qmeegopixmapdata.h qmeegoextensions.h
-SOURCES = qmeegographicssystem.cpp qmeegographicssystem.h qmeegographicssystemplugin.h qmeegographicssystemplugin.cpp qmeegopixmapdata.h qmeegopixmapdata.cpp qmeegoextensions.h qmeegoextensions.cpp
+HEADERS = qmeegographicssystem.h qmeegopixmapdata.h qmeegoextensions.h qmeegorasterpixmapdata.h qmeegolivepixmapdata.h
+SOURCES = qmeegographicssystem.cpp qmeegographicssystem.h qmeegographicssystemplugin.h qmeegographicssystemplugin.cpp qmeegopixmapdata.h qmeegopixmapdata.cpp qmeegoextensions.h qmeegoextensions.cpp qmeegorasterpixmapdata.h qmeegorasterpixmapdata.cpp qmeegolivepixmapdata.cpp qmeegolivepixmapdata.h dithering.cpp
target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
INSTALLS += target
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.cpp b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
index 611c962..dff80a4 100644
--- a/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
@@ -47,6 +47,7 @@ bool QMeeGoExtensions::initialized = false;
bool QMeeGoExtensions::hasImageShared = false;
bool QMeeGoExtensions::hasSurfaceScaling = false;
bool QMeeGoExtensions::hasLockSurface = false;
+bool QMeeGoExtensions::hasFenceSync = false;
/* Extension funcs */
@@ -54,8 +55,12 @@ typedef EGLBoolean (EGLAPIENTRY *eglQueryImageNOKFunc)(EGLDisplay, EGLImageKHR,
typedef EGLNativeSharedImageTypeNOK (EGLAPIENTRY *eglCreateSharedImageNOKFunc)(EGLDisplay, EGLImageKHR, EGLint*);
typedef EGLBoolean (EGLAPIENTRY *eglDestroySharedImageNOKFunc)(EGLDisplay, EGLNativeSharedImageTypeNOK);
typedef EGLBoolean (EGLAPIENTRY *eglSetSurfaceScalingNOKFunc)(EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint);
-typedef EGLBoolean (EGLAPIENTRY *eglLockSurfaceKHRFunc)(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
-typedef EGLBoolean (EGLAPIENTRY *eglUnlockSurfaceKHRFunc)(EGLDisplay display, EGLSurface surface);
+typedef EGLBoolean (EGLAPIENTRY *eglLockSurfaceKHRFunc)(EGLDisplay, EGLSurface, const EGLint*);
+typedef EGLBoolean (EGLAPIENTRY *eglUnlockSurfaceKHRFunc)(EGLDisplay, EGLSurface);
+typedef EGLSyncKHR (EGLAPIENTRY *eglCreateSyncKHRFunc)(EGLDisplay, EGLenum, const EGLint*);
+typedef EGLBoolean (EGLAPIENTRY *eglDestroySyncKHRFunc)(EGLDisplay, EGLSyncKHR);
+typedef EGLint (EGLAPIENTRY *eglClientWaitSyncKHRFunc)(EGLDisplay, EGLSyncKHR, EGLint, EGLTimeKHR);
+typedef EGLBoolean (EGLAPIENTRY *eglGetSyncAttribKHRFunc)(EGLDisplay, EGLSyncKHR, EGLint, EGLint*);
static eglQueryImageNOKFunc _eglQueryImageNOK = 0;
static eglCreateSharedImageNOKFunc _eglCreateSharedImageNOK = 0;
@@ -63,6 +68,10 @@ static eglDestroySharedImageNOKFunc _eglDestroySharedImageNOK = 0;
static eglSetSurfaceScalingNOKFunc _eglSetSurfaceScalingNOK = 0;
static eglLockSurfaceKHRFunc _eglLockSurfaceKHR = 0;
static eglUnlockSurfaceKHRFunc _eglUnlockSurfaceKHR = 0;
+static eglCreateSyncKHRFunc _eglCreateSyncKHR = 0;
+static eglDestroySyncKHRFunc _eglDestroySyncKHR = 0;
+static eglClientWaitSyncKHRFunc _eglClientWaitSyncKHR = 0;
+static eglGetSyncAttribKHRFunc _eglGetSyncAttribKHR = 0;
/* Public */
@@ -76,15 +85,15 @@ void QMeeGoExtensions::ensureInitialized()
EGLNativeSharedImageTypeNOK QMeeGoExtensions::eglCreateSharedImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint *props)
{
- if (! hasImageShared)
+ if (!hasImageShared)
qFatal("EGL_NOK_image_shared not found but trying to use capability!");
-
+
return _eglCreateSharedImageNOK(dpy, image, props);
}
bool QMeeGoExtensions::eglQueryImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint prop, EGLint *v)
{
- if (! hasImageShared)
+ if (!hasImageShared)
qFatal("EGL_NOK_image_shared not found but trying to use capability!");
return _eglQueryImageNOK(dpy, image, prop, v);
@@ -92,7 +101,7 @@ bool QMeeGoExtensions::eglQueryImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLin
bool QMeeGoExtensions::eglDestroySharedImageNOK(EGLDisplay dpy, EGLNativeSharedImageTypeNOK img)
{
- if (! hasImageShared)
+ if (!hasImageShared)
qFatal("EGL_NOK_image_shared not found but trying to use capability!");
return _eglDestroySharedImageNOK(dpy, img);
@@ -100,7 +109,7 @@ bool QMeeGoExtensions::eglDestroySharedImageNOK(EGLDisplay dpy, EGLNativeSharedI
bool QMeeGoExtensions::eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surface, int x, int y, int width, int height)
{
- if (! hasSurfaceScaling)
+ if (!hasSurfaceScaling)
qFatal("EGL_NOK_surface_scaling not found but trying to use capability!");
return _eglSetSurfaceScalingNOK(dpy, surface, x, y, width, height);
@@ -108,7 +117,7 @@ bool QMeeGoExtensions::eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surfac
bool QMeeGoExtensions::eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list)
{
- if (! hasLockSurface)
+ if (!hasLockSurface)
qFatal("EGL_KHR_lock_surface2 not found but trying to use capability!");
return _eglLockSurfaceKHR(display, surface, attrib_list);
@@ -116,19 +125,51 @@ bool QMeeGoExtensions::eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface,
bool QMeeGoExtensions::eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface)
{
- if (! hasLockSurface)
+ if (!hasLockSurface)
qFatal("EGL_KHR_lock_surface2 not found but trying to use capability!");
return _eglUnlockSurfaceKHR(display, surface);
}
+EGLSyncKHR QMeeGoExtensions::eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
+{
+ if (!hasFenceSync)
+ qFatal("EGL_KHR_fence_sync not found but trying to use capability!");
+
+ return _eglCreateSyncKHR(dpy, type, attrib_list);
+}
+
+bool QMeeGoExtensions::eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
+{
+ if (!hasFenceSync)
+ qFatal("EGL_KHR_fence_sync not found but trying to use capability!");
+
+ return _eglDestroySyncKHR(dpy, sync);
+}
+
+EGLint QMeeGoExtensions::eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+{
+ if (!hasFenceSync)
+ qFatal("EGL_KHR_fence_sync not found but trying to use capability!");
+
+ return _eglClientWaitSyncKHR(dpy, sync, flags, timeout);
+}
+
+EGLBoolean QMeeGoExtensions::eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+{
+ if (!hasFenceSync)
+ qFatal("EGL_KHR_fence_sync not found but trying to use capability!");
+
+ return _eglGetSyncAttribKHR(dpy, sync, attribute, value);
+}
+
/* Private */
void QMeeGoExtensions::initialize()
{
QGLContext *ctx = (QGLContext *) QGLContext::currentContext();
qt_resolve_eglimage_gl_extensions(ctx);
-
+
if (QEgl::hasExtension("EGL_NOK_image_shared")) {
qDebug("MeegoGraphics: found EGL_NOK_image_shared");
_eglQueryImageNOK = (eglQueryImageNOKFunc) eglGetProcAddress("eglQueryImageNOK");
@@ -136,15 +177,15 @@ void QMeeGoExtensions::initialize()
_eglDestroySharedImageNOK = (eglDestroySharedImageNOKFunc) eglGetProcAddress("eglDestroySharedImageNOK");
_eglLockSurfaceKHR = (eglLockSurfaceKHRFunc) eglGetProcAddress("eglLockSurfaceKHR");
_eglUnlockSurfaceKHR = (eglUnlockSurfaceKHRFunc) eglGetProcAddress("eglUnlockSurfaceKHR");
-
+
Q_ASSERT(_eglQueryImageNOK && _eglCreateSharedImageNOK && _eglDestroySharedImageNOK);
hasImageShared = true;
}
-
+
if (QEgl::hasExtension("EGL_NOK_surface_scaling")) {
qDebug("MeegoGraphics: found EGL_NOK_surface_scaling");
_eglSetSurfaceScalingNOK = (eglSetSurfaceScalingNOKFunc) eglGetProcAddress("eglSetSurfaceScalingNOK");
-
+
Q_ASSERT(_eglSetSurfaceScalingNOK);
hasSurfaceScaling = true;
}
@@ -153,9 +194,20 @@ void QMeeGoExtensions::initialize()
qDebug("MeegoGraphics: found EGL_KHR_lock_surface2");
_eglLockSurfaceKHR = (eglLockSurfaceKHRFunc) eglGetProcAddress("eglLockSurfaceKHR");
_eglUnlockSurfaceKHR = (eglUnlockSurfaceKHRFunc) eglGetProcAddress("eglUnlockSurfaceKHR");
-
+
Q_ASSERT(_eglLockSurfaceKHR && _eglUnlockSurfaceKHR);
hasLockSurface = true;
}
+
+ if (QEgl::hasExtension("EGL_KHR_fence_sync")) {
+ qDebug("MeegoGraphics: found EGL_KHR_fence_sync");
+ _eglCreateSyncKHR = (eglCreateSyncKHRFunc) eglGetProcAddress("eglCreateSyncKHR");
+ _eglDestroySyncKHR = (eglDestroySyncKHRFunc) eglGetProcAddress("eglDestroySyncKHR");
+ _eglClientWaitSyncKHR = (eglClientWaitSyncKHRFunc) eglGetProcAddress("eglClientWaitSyncKHR");
+ _eglGetSyncAttribKHR = (eglGetSyncAttribKHRFunc) eglGetProcAddress("eglGetSyncAttribKHR");
+
+ Q_ASSERT(_eglCreateSyncKHR && _eglDestroySyncKHR && _eglClientWaitSyncKHR && _eglGetSyncAttribKHR);
+ hasFenceSync = true;
+ }
}
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.h b/src/plugins/graphicssystems/meego/qmeegoextensions.h
index 9e78caf..49a1e30 100644
--- a/src/plugins/graphicssystems/meego/qmeegoextensions.h
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.h
@@ -77,6 +77,23 @@ typedef void* EGLNativeSharedImageTypeNOK;
#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
#endif
+#ifndef EGL_SYNC_FENCE_KHR
+#define EGL_SYNC_FENCE_KHR 0x30F9
+#define EGL_SYNC_TYPE_KHR 0x30F7
+#define EGL_SYNC_STATUS_KHR 0x30F1
+#define EGL_SYNC_CONDITION_KHR 0x30F8
+#define EGL_SIGNALED_KHR 0x30F2
+#define EGL_UNSIGNALED_KHR 0x30F3
+#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
+#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001
+#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
+#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5
+#define EGL_CONDITION_SATISFIED_KHR 0x30F6
+#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
+typedef void* EGLSyncKHR;
+typedef khronos_utime_nanoseconds_t EGLTimeKHR;
+#endif
+
/* Class */
class QMeeGoExtensions
@@ -90,6 +107,10 @@ public:
static bool eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surface, int x, int y, int width, int height);
static bool eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
static bool eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface);
+ static EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+ static bool eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
+ static EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+ static EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
private:
static void initialize();
@@ -98,6 +119,7 @@ private:
static bool hasImageShared;
static bool hasSurfaceScaling;
static bool hasLockSurface;
+ static bool hasFenceSync;
};
#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
index f8b228c..063af13 100644
--- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
@@ -54,6 +54,7 @@
#include <private/qpixmap_x11_p.h>
#include "qmeegopixmapdata.h"
+#include "qmeegolivepixmapdata.h"
#include "qmeegographicssystem.h"
#include "qmeegoextensions.h"
@@ -81,12 +82,12 @@ QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const
QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
{
- // Long story short: without this it's possible to hit an
- // unitialized paintDevice due to a Qt bug too complex to even
- // explain here... not to mention fix without going crazy.
+ // Long story short: without this it's possible to hit an
+ // unitialized paintDevice due to a Qt bug too complex to even
+ // explain here... not to mention fix without going crazy.
// MDK
QGLShareContextScope ctx(qt_gl_share_widget()->context());
-
+
return new QRasterPixmapData(type);
}
@@ -102,8 +103,8 @@ QPixmapData *QMeeGoGraphicsSystem::createPixmapData(QPixmapData *origin)
if (QMeeGoPixmapData::sharedImagesMap.contains(rawResource))
return new QMeeGoPixmapData();
- }
-
+ }
+
return new QRasterPixmapData(origin->pixelType());
}
@@ -150,11 +151,11 @@ void QMeeGoGraphicsSystem::setTranslucent(bool translucent)
QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage)
{
if (softImage.format() != QImage::Format_ARGB32_Premultiplied &&
- softImage.format() != QImage::Format_ARGB32) {
- qFatal("For egl shared images, the soft image has to be ARGB32 or ARGB32_Premultiplied");
+ softImage.format() != QImage::Format_RGB32) {
+ qFatal("For egl shared images, the soft image has to be ARGB32_Premultiplied or RGB32");
return NULL;
}
-
+
if (QMeeGoGraphicsSystem::meeGoRunning()) {
QMeeGoPixmapData *pmd = new QMeeGoPixmapData;
pmd->fromEGLSharedImage(handle, softImage);
@@ -173,28 +174,12 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(Qt::HANDLE handl
}
}
-QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLImage(Qt::HANDLE handle)
-{
- if (QMeeGoGraphicsSystem::meeGoRunning()) {
- QMeeGoPixmapData *pmd = new QMeeGoPixmapData;
- pmd->fromEGLImage(handle);
-
- // FIXME Ok. This is a bit BAD BAD BAD. We're abusing here the fact that we KNOW
- // that this function is used for the live pixmap...
- pmd->texture()->options &= ~QGLContext::InvertedYBindOption;
- return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
- } else {
- qFatal("Can't create from EGL image when not running meego graphics system!");
- return NULL;
- }
-}
-
void QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(QPixmap *pixmap)
{
QMeeGoPixmapData *pmd = (QMeeGoPixmapData *) pixmap->pixmapData();
-
+
// Basic sanity check to make sure this is really a QMeeGoPixmapData...
- if (pmd->classId() != QPixmapData::OpenGLClass)
+ if (pmd->classId() != QPixmapData::OpenGLClass)
qFatal("Trying to updated EGLSharedImage pixmap but it's not really a shared image pixmap!");
pmd->updateFromSoftImage();
@@ -207,169 +192,62 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataWithGLTexture(int w, int h)
return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
}
-Qt::HANDLE QMeeGoGraphicsSystem::createLiveTexture(int w, int h, QImage::Format format)
-{
- // No need to wrap the QPixmapData here. This QPixmap(Data) is a
- // internal implementation and we don't migrate it between
- // graphics system switching.
-
- // We use a bit ugly way of enforcing a color format on the X pixmap -- we create
- // a local QImage and fromImage from there. This is quite redundant (extra overhead of creating
- // the useless image only to delete it) but shouldn't be too bad for now... you're not expected
- // to call createLiveTexture too often anyways. Would be great if QX11PixmapData had a way to
- // force the X format upon creation or resize.
-
- QImage image(w, h, format);
- QX11PixmapData *pmd = new QX11PixmapData(QPixmapData::PixmapType);
- pmd->fromImage(image, Qt::NoOpaqueDetection);
- QPixmap *p = new QPixmap(pmd);
-
- liveTexturePixmaps.insert(p->handle(), p);
- return p->handle();
-}
-
-void QMeeGoGraphicsSystem::destroyLiveTexture(Qt::HANDLE h)
-{
- if (liveTexturePixmaps.contains(h)) {
- QPixmap *p = liveTexturePixmaps.value(h);
- delete p;
- liveTexturePixmaps.remove(h);
- } else
- qWarning("Trying to destroy live texture %ld which was not found!", h);
-}
-
-bool QMeeGoGraphicsSystem::lockLiveTexture(Qt::HANDLE h)
+bool QMeeGoGraphicsSystem::meeGoRunning()
{
- if (! liveTexturePixmaps.contains(h)) {
- qWarning("Trying to lock live texture %ld which was not found!", h);
+ if (! QApplicationPrivate::instance()) {
+ qWarning("Application not running just yet... hard to know what system running!");
return false;
}
- EGLint attribs[] = {
- EGL_MAP_PRESERVE_PIXELS_KHR, EGL_TRUE,
- EGL_LOCK_USAGE_HINT_KHR, EGL_READ_SURFACE_BIT_KHR | EGL_WRITE_SURFACE_BIT_KHR,
- EGL_NONE
- };
+ QString name = QApplicationPrivate::instance()->graphics_system_name;
+ if (name == "runtime") {
+ QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system;
+ name = rsystem->graphicsSystemName();
+ }
- QGLShareContextScope ctx(qt_gl_share_widget()->context());
- EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
- return QMeeGoExtensions::eglLockSurfaceKHR(QEgl::display(), surface, attribs);
+ return (name == "meego");
}
-bool QMeeGoGraphicsSystem::unlockLiveTexture(Qt::HANDLE h)
+QPixmapData* QMeeGoGraphicsSystem::pixmapDataWithNewLiveTexture(int w, int h, QImage::Format format)
{
- if (! liveTexturePixmaps.contains(h)) {
- qWarning("Trying to lock live texture %ld which was not found!", h);
- return false;
- }
-
- QGLShareContextScope ctx(qt_gl_share_widget()->context());
- QMeeGoExtensions::ensureInitialized();
-
- EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
- if (QMeeGoExtensions::eglUnlockSurfaceKHR(QEgl::display(), surface)) {
- glFinish();
- return true;
- } else {
- return false;
- }
+ return new QMeeGoLivePixmapData(w, h, format);
}
-void QMeeGoGraphicsSystem::queryLiveTexture(Qt::HANDLE h, void **data, int *pitch)
+QPixmapData* QMeeGoGraphicsSystem::pixmapDataFromLiveTextureHandle(Qt::HANDLE handle)
{
- // FIXME Only allow this on locked surfaces
- if (! liveTexturePixmaps.contains(h)) {
- qWarning("Trying to query live texture %ld which was not found!", h);
- return;
- }
-
- QGLShareContextScope ctx(qt_gl_share_widget()->context());
- QMeeGoExtensions::ensureInitialized();
-
- EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
- eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_POINTER_KHR, (EGLint*) data);
- eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_PITCH_KHR, (EGLint*) pitch);
+ return new QMeeGoLivePixmapData(handle);
}
-Qt::HANDLE QMeeGoGraphicsSystem::liveTextureToEGLImage(Qt::HANDLE h)
+QImage* QMeeGoGraphicsSystem::lockLiveTexture(QPixmap* pixmap, void* fenceSync)
{
- QGLShareContextScope ctx(qt_gl_share_widget()->context());
- QMeeGoExtensions::ensureInitialized();
-
- EGLint attribs[] = {
- EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
- EGL_NONE
- };
-
- EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
- (EGLClientBuffer) h, attribs);
-
- if (eglImage == EGL_NO_IMAGE_KHR)
- qWarning("eglCreateImageKHR failed!");
-
- return (Qt::HANDLE) eglImage;
+ QMeeGoLivePixmapData *pixmapData = static_cast<QMeeGoLivePixmapData*>(pixmap->data_ptr().data());
+ return pixmapData->lock(fenceSync);
}
-bool QMeeGoGraphicsSystem::meeGoRunning()
+bool QMeeGoGraphicsSystem::releaseLiveTexture(QPixmap *pixmap, QImage *image)
{
- if (! QApplicationPrivate::instance()) {
- qWarning("Application not running just yet... hard to know what system running!");
- return false;
- }
-
- QString name = QApplicationPrivate::instance()->graphics_system_name;
- if (name == "runtime") {
- QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system;
- name = rsystem->graphicsSystemName();
- }
-
- return (name == "meego");
+ QMeeGoLivePixmapData *pixmapData = static_cast<QMeeGoLivePixmapData*>(pixmap->data_ptr().data());
+ return pixmapData->release(image);
}
-void QMeeGoGraphicsSystem::destroySurfaceForLiveTexturePixmap(QPixmapData* pmd)
+Qt::HANDLE QMeeGoGraphicsSystem::getLiveTextureHandle(QPixmap *pixmap)
{
- Q_ASSERT(pmd->classId() == QPixmapData::X11Class);
- QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd);
- if (pixmapData->gl_surface) {
- eglDestroySurface(QEgl::display(), (EGLSurface)pixmapData->gl_surface);
- pixmapData->gl_surface = 0;
- }
+ QMeeGoLivePixmapData *pixmapData = static_cast<QMeeGoLivePixmapData*>(pixmap->data_ptr().data());
+ return pixmapData->handle();
}
-EGLSurface QMeeGoGraphicsSystem::getSurfaceForLiveTexturePixmap(QPixmap *pixmap)
+void* QMeeGoGraphicsSystem::createFenceSync()
{
- // This code is a crative remix of the stuff that can be found in the
- // Qt's TFP implementation in /src/opengl/qgl_x11egl.cpp ::bindiTextureFromNativePixmap
- QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pixmap->data_ptr().data());
- Q_ASSERT(pixmapData->classId() == QPixmapData::X11Class);
- bool hasAlpha = pixmapData->hasAlphaChannel();
-
- if (pixmapData->gl_surface &&
- hasAlpha == (pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha))
- return pixmapData->gl_surface;
-
- // Check to see if the surface is still valid
- if (pixmapData->gl_surface &&
- hasAlpha != ((pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha) > 0)) {
- // Surface is invalid!
- QMeeGoGraphicsSystem::destroySurfaceForLiveTexturePixmap(pixmapData);
- }
-
- if (pixmapData->gl_surface == 0) {
- EGLConfig config = QEgl::defaultConfig(QInternal::Pixmap,
- QEgl::OpenGL,
- hasAlpha ? QEgl::Translucent : QEgl::NoOptions);
-
- pixmapData->gl_surface = (void*)QEgl::createSurface(pixmap, config);
-
- if (hasAlpha)
- pixmapData->flags = pixmapData->flags | QX11PixmapData::GlSurfaceCreatedWithAlpha;
-
- if (pixmapData->gl_surface == (void*)EGL_NO_SURFACE)
- return NULL;
- }
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+ return QMeeGoExtensions::eglCreateSyncKHR(QEgl::display(), EGL_SYNC_FENCE_KHR, NULL);
+}
- return pixmapData->gl_surface;
+void QMeeGoGraphicsSystem::destroyFenceSync(void *fenceSync)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+ QMeeGoExtensions::eglDestroySyncKHR(QEgl::display(), fenceSync);
}
/* C API */
@@ -384,11 +262,6 @@ QPixmapData* qt_meego_pixmapdata_from_egl_shared_image(Qt::HANDLE handle, const
return QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(handle, softImage);
}
-QPixmapData* qt_meego_pixmapdata_from_egl_image(Qt::HANDLE handle)
-{
- return QMeeGoGraphicsSystem::pixmapDataFromEGLImage(handle);
-}
-
QPixmapData* qt_meego_pixmapdata_with_gl_texture(int w, int h)
{
return QMeeGoGraphicsSystem::pixmapDataWithGLTexture(w, h);
@@ -419,32 +292,37 @@ void qt_meego_update_egl_shared_image_pixmap(QPixmap *pixmap)
QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(pixmap);
}
-Qt::HANDLE qt_meego_live_texture_create(int w, int h, QImage::Format format)
+QPixmapData* qt_meego_pixmapdata_with_new_live_texture(int w, int h, QImage::Format format)
+{
+ return QMeeGoGraphicsSystem::pixmapDataWithNewLiveTexture(w, h, format);
+}
+
+QPixmapData* qt_meego_pixmapdata_from_live_texture_handle(Qt::HANDLE handle)
{
- return QMeeGoGraphicsSystem::createLiveTexture(w, h, format);
+ return QMeeGoGraphicsSystem::pixmapDataFromLiveTextureHandle(handle);
}
-void qt_meego_live_texture_destroy(Qt::HANDLE h)
+QImage* qt_meego_live_texture_lock(QPixmap *pixmap, void *fenceSync)
{
- QMeeGoGraphicsSystem::destroyLiveTexture(h);
+ return QMeeGoGraphicsSystem::lockLiveTexture(pixmap, fenceSync);
}
-bool qt_meego_live_texture_lock(Qt::HANDLE h)
+bool qt_meego_live_texture_release(QPixmap *pixmap, QImage *image)
{
- return QMeeGoGraphicsSystem::lockLiveTexture(h);
+ return QMeeGoGraphicsSystem::releaseLiveTexture(pixmap, image);
}
-bool qt_meego_live_texture_unlock(Qt::HANDLE h)
+Qt::HANDLE qt_meego_live_texture_get_handle(QPixmap *pixmap)
{
- return QMeeGoGraphicsSystem::unlockLiveTexture(h);
+ return QMeeGoGraphicsSystem::getLiveTextureHandle(pixmap);
}
-void qt_meego_live_texture_query(Qt::HANDLE h, void **data, int *pitch)
+void* qt_meego_create_fence_sync(void)
{
- return QMeeGoGraphicsSystem::queryLiveTexture(h, data, pitch);
+ return QMeeGoGraphicsSystem::createFenceSync();
}
-Qt::HANDLE qt_meego_live_texture_to_egl_image(Qt::HANDLE h)
+void qt_meego_destroy_fence_sync(void* fs)
{
- return QMeeGoGraphicsSystem::liveTextureToEGLImage(h);
+ return QMeeGoGraphicsSystem::destroyFenceSync(fs);
}
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
index 934d32d..1e50f00 100644
--- a/src/plugins/graphicssystems/meego/qmeegographicssystem.h
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
@@ -67,12 +67,14 @@ public:
static QPixmapData *pixmapDataWithGLTexture(int w, int h);
static void updateEGLSharedImagePixmap(QPixmap *pixmap);
- static Qt::HANDLE createLiveTexture(int w, int h, QImage::Format format);
- static void destroyLiveTexture(Qt::HANDLE h);
- static bool lockLiveTexture(Qt::HANDLE h);
- static bool unlockLiveTexture(Qt::HANDLE h);
- static void queryLiveTexture(Qt::HANDLE h, void **data, int *pitch);
- static Qt::HANDLE liveTextureToEGLImage(Qt::HANDLE h);
+ static QPixmapData *pixmapDataWithNewLiveTexture(int w, int h, QImage::Format format);
+ static QPixmapData *pixmapDataFromLiveTextureHandle(Qt::HANDLE handle);
+ static QImage *lockLiveTexture(QPixmap* pixmap, void* fenceSync);
+ static bool releaseLiveTexture(QPixmap *pixmap, QImage *image);
+ static Qt::HANDLE getLiveTextureHandle(QPixmap *pixmap);
+
+ static void* createFenceSync();
+ static void destroyFenceSync(void* fenceSync);
private:
static bool meeGoRunning();
@@ -88,19 +90,19 @@ private:
extern "C" {
Q_DECL_EXPORT int qt_meego_image_to_egl_shared_image(const QImage &image);
Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_egl_shared_image(Qt::HANDLE handle, const QImage &softImage);
- Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_egl_image(Qt::HANDLE handle);
Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_with_gl_texture(int w, int h);
Q_DECL_EXPORT void qt_meego_update_egl_shared_image_pixmap(QPixmap *pixmap);
Q_DECL_EXPORT bool qt_meego_destroy_egl_shared_image(Qt::HANDLE handle);
Q_DECL_EXPORT void qt_meego_set_surface_fixed_size(int width, int height);
Q_DECL_EXPORT void qt_meego_set_surface_scaling(int x, int y, int width, int height);
- Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent);
- Q_DECL_EXPORT Qt::HANDLE m_live_texture_create(int w, int h, QImage::Format format);
- Q_DECL_EXPORT void m_live_texture_destroy(Qt::HANDLE h);
- Q_DECL_EXPORT bool m_live_texture_lock(Qt::HANDLE h);
- Q_DECL_EXPORT bool m_live_texture_unlock(Qt::HANDLE h);
- Q_DECL_EXPORT void m_live_texture_query(Qt::HANDLE h, void **data, int *pitch);
- Q_DECL_EXPORT Qt::HANDLE m_live_texture_to_egl_image(Qt::HANDLE h);
+ Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent);
+ Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_with_new_live_texture(int w, int h, QImage::Format format);
+ Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_live_texture_handle(Qt::HANDLE handle);
+ Q_DECL_EXPORT QImage* qt_meego_live_texture_lock(QPixmap *pixmap, void *fenceSync);
+ Q_DECL_EXPORT bool qt_meego_live_texture_release(QPixmap *pixmap, QImage *image);
+ Q_DECL_EXPORT Qt::HANDLE qt_meego_live_texture_get_handle(QPixmap *pixmap);
+ Q_DECL_EXPORT void* qt_meego_create_fence_sync(void);
+ Q_DECL_EXPORT void qt_meego_destroy_fence_sync(void* fs);
}
#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
new file mode 100644
index 0000000..16096c9
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp
@@ -0,0 +1,292 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qmeegolivepixmapdata.h"
+#include "qmeegorasterpixmapdata.h"
+#include <private/qimage_p.h>
+#include <private/qwindowsurface_gl_p.h>
+#include <private/qeglcontext_p.h>
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_runtime_p.h>
+#include <private/qpixmap_x11_p.h>
+#include <stdio.h>
+
+static EGLint lock_attribs[] = {
+ EGL_MAP_PRESERVE_PIXELS_KHR, EGL_TRUE,
+ EGL_LOCK_USAGE_HINT_KHR, EGL_READ_SURFACE_BIT_KHR | EGL_WRITE_SURFACE_BIT_KHR,
+ EGL_NONE
+};
+
+static EGLint preserved_attribs[] = {
+ EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
+ EGL_NONE
+};
+
+// as copied from qwindowsurface.cpp
+void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset)
+{
+ // make sure we don't detach
+ uchar *mem = const_cast<uchar*>(const_cast<const QImage &>(img).bits());
+
+ int lineskip = img.bytesPerLine();
+ int depth = img.depth() >> 3;
+
+ const QRect imageRect(0, 0, img.width(), img.height());
+ const QRect r = rect & imageRect & imageRect.translated(-offset);
+ const QPoint p = rect.topLeft() + offset;
+
+ if (r.isEmpty())
+ return;
+
+ const uchar *src;
+ uchar *dest;
+
+ if (r.top() < p.y()) {
+ src = mem + r.bottom() * lineskip + r.left() * depth;
+ dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth;
+ lineskip = -lineskip;
+ } else {
+ src = mem + r.top() * lineskip + r.left() * depth;
+ dest = mem + p.y() * lineskip + p.x() * depth;
+ }
+
+ const int w = r.width();
+ int h = r.height();
+ const int bytes = w * depth;
+
+ // overlapping segments?
+ if (offset.y() == 0 && qAbs(offset.x()) < w) {
+ do {
+ ::memmove(dest, src, bytes);
+ dest += lineskip;
+ src += lineskip;
+ } while (--h);
+ } else {
+ do {
+ ::memcpy(dest, src, bytes);
+ dest += lineskip;
+ src += lineskip;
+ } while (--h);
+ }
+}
+
+/* Public */
+
+QMeeGoLivePixmapData::QMeeGoLivePixmapData(int w, int h, QImage::Format format) : QGLPixmapData(QPixmapData::PixmapType)
+{
+ QImage image(w, h, format);
+ QX11PixmapData *pmd = new QX11PixmapData(QPixmapData::PixmapType);
+ pmd->fromImage(image, Qt::NoOpaqueDetection);
+ backingX11Pixmap = new QPixmap(pmd);
+
+ initializeThroughEGLImage();
+}
+
+QMeeGoLivePixmapData::QMeeGoLivePixmapData(Qt::HANDLE h) : QGLPixmapData(QPixmapData::PixmapType)
+{
+ backingX11Pixmap = new QPixmap(QPixmap::fromX11Pixmap(h));
+ initializeThroughEGLImage();
+}
+
+QMeeGoLivePixmapData::~QMeeGoLivePixmapData()
+{
+ delete backingX11Pixmap;
+}
+
+void QMeeGoLivePixmapData::initializeThroughEGLImage()
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ EGLImageKHR eglImage = EGL_NO_IMAGE_KHR;
+ GLuint newTextureId = 0;
+
+ eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
+ (EGLClientBuffer) backingX11Pixmap->handle(), preserved_attribs);
+
+ if (eglImage == EGL_NO_IMAGE_KHR) {
+ qWarning("eglCreateImageKHR failed (live texture)!");
+ return;
+ }
+
+ glGenTextures(1, &newTextureId);
+ glBindTexture(GL_TEXTURE_2D, newTextureId);
+
+ glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (EGLImageKHR) eglImage);
+ if (glGetError() == GL_NO_ERROR) {
+ resize(backingX11Pixmap->width(), backingX11Pixmap->height());
+ texture()->id = newTextureId;
+ texture()->options &= ~QGLContext::InvertedYBindOption;
+ m_hasAlpha = backingX11Pixmap->hasAlphaChannel();
+ } else {
+ qWarning("Failed to create a texture from an egl image (live texture)!");
+ glDeleteTextures(1, &newTextureId);
+ }
+
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
+}
+
+QPixmapData *QMeeGoLivePixmapData::createCompatiblePixmapData() const
+{
+ qWarning("Create compatible called on live pixmap! Expect fail soon...");
+ return new QMeeGoRasterPixmapData(pixelType());
+}
+
+QImage* QMeeGoLivePixmapData::lock(EGLSyncKHR fenceSync)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ if (fenceSync) {
+ QMeeGoExtensions::eglClientWaitSyncKHR(QEgl::display(),
+ fenceSync,
+ EGL_SYNC_FLUSH_COMMANDS_BIT_KHR,
+ EGL_FOREVER_KHR);
+ }
+
+ void *data = 0;
+ int pitch = 0;
+ EGLSurface surface = 0;
+ QImage::Format format;
+ lockedImage = QImage();
+
+ surface = getSurfaceForBackingPixmap();
+ if (! QMeeGoExtensions::eglLockSurfaceKHR(QEgl::display(), surface, lock_attribs)) {
+ qWarning("Failed to lock surface (live texture)!");
+ return &lockedImage;
+ }
+
+ eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_POINTER_KHR, (EGLint*) &data);
+ eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_PITCH_KHR, (EGLint*) &pitch);
+
+ // Ok, here we know we just support those two formats. Real solution would be:
+ // uqery also the format.
+ if (backingX11Pixmap->depth() > 16)
+ format = QImage::Format_ARGB32_Premultiplied;
+ else
+ format = QImage::Format_RGB16;
+
+ if (data == NULL || pitch == 0) {
+ qWarning("Failed to query the live texture!");
+ return &lockedImage;
+ }
+
+ lockedImage = QImage((uchar *) data, width(), height(), format);
+ return &lockedImage;
+}
+
+bool QMeeGoLivePixmapData::release(QImage* /*img*/)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ if (QMeeGoExtensions::eglUnlockSurfaceKHR(QEgl::display(), getSurfaceForBackingPixmap())) {
+ lockedImage = QImage();
+ return true;
+ } else {
+ lockedImage = QImage();
+ return false;
+ }
+}
+
+Qt::HANDLE QMeeGoLivePixmapData::handle()
+{
+ return backingX11Pixmap->handle();
+}
+
+bool QMeeGoLivePixmapData::scroll(int dx, int dy, const QRect &rect)
+{
+ lock(NULL);
+
+ if (!lockedImage.isNull())
+ qt_scrollRectInImage(lockedImage, rect, QPoint(dx, dy));
+
+ release(&lockedImage);
+ return true;
+}
+
+EGLSurface QMeeGoLivePixmapData::getSurfaceForBackingPixmap()
+{
+ // This code is a crative remix of the stuff that can be found in the
+ // Qt's TFP implementation in /src/opengl/qgl_x11egl.cpp ::bindiTextureFromNativePixmap
+ QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(backingX11Pixmap->data_ptr().data());
+ Q_ASSERT(pixmapData->classId() == QPixmapData::X11Class);
+ bool hasAlpha = pixmapData->hasAlphaChannel();
+
+ if (pixmapData->gl_surface &&
+ hasAlpha == (pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha))
+ return pixmapData->gl_surface;
+
+ // Check to see if the surface is still valid
+ if (pixmapData->gl_surface &&
+ hasAlpha != ((pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha) > 0)) {
+ // Surface is invalid!
+ destroySurfaceForPixmapData(pixmapData);
+ }
+
+ if (pixmapData->gl_surface == 0) {
+ EGLConfig config = QEgl::defaultConfig(QInternal::Pixmap,
+ QEgl::OpenGL,
+ hasAlpha ? QEgl::Translucent : QEgl::NoOptions);
+
+ pixmapData->gl_surface = (void*)QEgl::createSurface(backingX11Pixmap, config);
+
+ if (hasAlpha)
+ pixmapData->flags |= QX11PixmapData::GlSurfaceCreatedWithAlpha;
+ else
+ pixmapData->flags &= ~QX11PixmapData::GlSurfaceCreatedWithAlpha;
+
+ if (pixmapData->gl_surface == (void*)EGL_NO_SURFACE)
+ return NULL;
+ }
+
+ return pixmapData->gl_surface;
+}
+
+void QMeeGoLivePixmapData::destroySurfaceForPixmapData(QPixmapData* pmd)
+{
+ Q_ASSERT(pmd->classId() == QPixmapData::X11Class);
+ QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd);
+ if (pixmapData->gl_surface) {
+ eglDestroySurface(QEgl::display(), (EGLSurface)pixmapData->gl_surface);
+ pixmapData->gl_surface = 0;
+ }
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h
new file mode 100644
index 0000000..2c6854e
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 MLIVEPIXMAPDATA_H
+#define MLIVEPIXMAPDATA_H
+
+#include <private/qpixmapdata_gl_p.h>
+#include "qmeegoextensions.h"
+
+class QMeeGoLivePixmapData : public QGLPixmapData
+{
+public:
+ QMeeGoLivePixmapData(int w, int h, QImage::Format format);
+ QMeeGoLivePixmapData(Qt::HANDLE h);
+ ~QMeeGoLivePixmapData();
+
+ QPixmapData *createCompatiblePixmapData() const;
+ bool scroll(int dx, int dy, const QRect &rect);
+
+ void initializeThroughEGLImage();
+
+ QImage* lock(EGLSyncKHR fenceSync);
+ bool release(QImage *img);
+ Qt::HANDLE handle();
+
+ EGLSurface getSurfaceForBackingPixmap();
+ void destroySurfaceForPixmapData(QPixmapData* pmd);
+
+ QPixmap *backingX11Pixmap;
+ QImage lockedImage;
+};
+
+#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
index 84fc593..eb63692 100644
--- a/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
@@ -41,12 +41,18 @@
#include "qmeegopixmapdata.h"
#include "qmeegoextensions.h"
+#include "qmeegorasterpixmapdata.h"
#include <private/qimage_p.h>
#include <private/qwindowsurface_gl_p.h>
#include <private/qeglcontext_p.h>
#include <private/qapplication_p.h>
#include <private/qgraphicssystem_runtime_p.h>
+// from dithering.cpp
+extern unsigned short* convertRGB32_to_RGB565(const unsigned char *in, int width, int height, int stride);
+extern unsigned short* convertARGB32_to_RGBA4444(const unsigned char *in, int width, int height, int stride);
+extern unsigned char* convertBGRA32_to_RGBA32(const unsigned char *in, int width, int height, int stride);
+
static EGLint preserved_image_attribs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
QHash <void*, QMeeGoImageInfo*> QMeeGoPixmapData::sharedImagesMap;
@@ -87,36 +93,6 @@ void QMeeGoPixmapData::fromImage(const QImage &image,
}
}
-void QMeeGoPixmapData::fromEGLImage(Qt::HANDLE handle)
-{
- QGLShareContextScope ctx(qt_gl_share_widget()->context());
- QMeeGoExtensions::ensureInitialized();
-
- bool textureIsBound = false;
- GLuint newTextureId;
- GLint newWidth, newHeight;
-
- glGenTextures(1, &newTextureId);
- glBindTexture(GL_TEXTURE_2D, newTextureId);
-
- glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (EGLImageKHR) handle);
- GLint err = glGetError();
- if (err == GL_NO_ERROR)
- textureIsBound = true;
-
- QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), (EGLImageKHR) handle, EGL_WIDTH, &newWidth);
- QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), (EGLImageKHR) handle, EGL_HEIGHT, &newHeight);
-
- if (textureIsBound) {
- // FIXME Remove this ugly hasAlphaChannel check when Qt lands the NoOpaqueCheck flag fix
- // for QGLPixmapData.
- fromTexture(newTextureId, newWidth, newHeight, true);
- } else {
- qWarning("Failed to create a texture from an egl image!");
- glDeleteTextures(1, &newTextureId);
- }
-}
-
void QMeeGoPixmapData::fromEGLSharedImage(Qt::HANDLE handle, const QImage &si)
{
if (si.isNull())
@@ -133,12 +109,10 @@ void QMeeGoPixmapData::fromEGLSharedImage(Qt::HANDLE handle, const QImage &si)
glGenTextures(1, &newTextureId);
glBindTexture(GL_TEXTURE_2D, newTextureId);
- glFinish();
EGLImageKHR image = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_SHARED_IMAGE_NOK,
(EGLClientBuffer)handle, preserved_image_attribs);
if (image != EGL_NO_IMAGE_KHR) {
- glFinish();
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
GLint err = glGetError();
if (err == GL_NO_ERROR)
@@ -148,14 +122,12 @@ void QMeeGoPixmapData::fromEGLSharedImage(Qt::HANDLE handle, const QImage &si)
QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), image, EGL_HEIGHT, &newHeight);
QEgl::eglDestroyImageKHR(QEgl::display(), image);
- glFinish();
}
if (textureIsBound) {
- // FIXME Remove this ugly hasAlphaChannel check when Qt lands the NoOpaqueCheck flag fix
- // for QGLPixmapData.
fromTexture(newTextureId, newWidth, newHeight,
(si.hasAlphaChannel() && const_cast<QImage &>(si).data_ptr()->checkForAlphaPixels()));
+ texture()->options &= ~QGLContext::InvertedYBindOption;
softImage = si;
QMeeGoPixmapData::registerSharedImage(handle, softImage);
} else {
@@ -170,22 +142,32 @@ Qt::HANDLE QMeeGoPixmapData::imageToEGLSharedImage(const QImage &image)
QMeeGoExtensions::ensureInitialized();
- glFinish();
- QGLPixmapData pixmapData(QPixmapData::PixmapType);
- pixmapData.fromImage(image, 0);
- GLuint textureId = pixmapData.bind();
+ GLuint textureId;
+
+ glGenTextures(1, &textureId);
+ glBindTexture(GL_TEXTURE_2D, textureId);
+ if (image.hasAlphaChannel() && const_cast<QImage &>(image).data_ptr()->checkForAlphaPixels()) {
+ void *converted = convertBGRA32_to_RGBA32(image.bits(), image.width(), image.height(), image.bytesPerLine());
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, converted);
+ free(converted);
+ } else {
+ void *converted = convertRGB32_to_RGB565(image.bits(), image.width(), image.height(), image.bytesPerLine());
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width(), image.height(), 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, converted);
+ free(converted);
+ }
- glFinish();
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glBindTexture(GL_TEXTURE_2D, textureId);
EGLImageKHR eglimage = QEgl::eglCreateImageKHR(QEgl::display(), QEglContext::currentContext(QEgl::OpenGL)->context(),
EGL_GL_TEXTURE_2D_KHR,
(EGLClientBuffer) textureId,
preserved_image_attribs);
- glFinish();
-
+ glDeleteTextures(1, &textureId);
if (eglimage) {
EGLNativeSharedImageTypeNOK handle = QMeeGoExtensions::eglCreateSharedImageNOK(QEgl::display(), eglimage, NULL);
QEgl::eglDestroyImageKHR(QEgl::display(), eglimage);
- glFinish();
return (Qt::HANDLE) handle;
} else {
qWarning("Failed to create shared image from pixmap/texture!");
@@ -195,6 +177,7 @@ Qt::HANDLE QMeeGoPixmapData::imageToEGLSharedImage(const QImage &image)
void QMeeGoPixmapData::updateFromSoftImage()
{
+ // FIXME That's broken with recent 16bit textures changes.
m_dirty = true;
m_source = softImage;
ensureCreated();
@@ -234,3 +217,8 @@ void QMeeGoPixmapData::registerSharedImage(Qt::HANDLE handle, const QImage &si)
qWarning("Inconsistency detected: overwriting entry in sharedImagesMap but handle/format different");
}
}
+
+QPixmapData *QMeeGoPixmapData::createCompatiblePixmapData() const
+{
+ return new QMeeGoRasterPixmapData(pixelType());
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.h b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
index 8b1ae14..c66e719 100644
--- a/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
@@ -55,8 +55,8 @@ class QMeeGoPixmapData : public QGLPixmapData
public:
QMeeGoPixmapData();
void fromTexture(GLuint textureId, int w, int h, bool alpha);
+ QPixmapData *createCompatiblePixmapData() const;
- virtual void fromEGLImage(Qt::HANDLE handle);
virtual void fromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
virtual void fromImage (const QImage &image, Qt::ImageConversionFlags flags);
virtual QImage toImage() const;
diff --git a/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp
new file mode 100644
index 0000000..b6a3727
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qmeegorasterpixmapdata.h"
+
+/* Public */
+
+QMeeGoRasterPixmapData::QMeeGoRasterPixmapData() : QRasterPixmapData(QPixmapData::PixmapType)
+{
+}
+
+QMeeGoRasterPixmapData::QMeeGoRasterPixmapData(QPixmapData::PixelType t) : QRasterPixmapData(t)
+{
+}
+
+void QMeeGoRasterPixmapData::copy(const QPixmapData *data, const QRect &rect)
+{
+ if (data->classId() == QPixmapData::OpenGLClass)
+ fromImage(data->toImage(rect).copy(), Qt::NoOpaqueDetection);
+ else
+ QRasterPixmapData::copy(data, rect);
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.h b/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.h
new file mode 100644
index 0000000..636b0e6
--- /dev/null
+++ b/src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 MRASTERPIXMAPDATA_H
+#define MRASTERPIXMAPDATA_H
+
+#include <private/qpixmap_raster_p.h>
+
+class QMeeGoRasterPixmapData : public QRasterPixmapData
+{
+public:
+ QMeeGoRasterPixmapData();
+ QMeeGoRasterPixmapData(QPixmapData::PixelType t);
+ void copy(const QPixmapData *data, const QRect &rect);
+};
+
+#endif
diff --git a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
index 2c7c0b7..9674233 100644
--- a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
+++ b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
@@ -42,6 +42,9 @@
#include "qgraphicssystem_vg_p.h"
#include <QtOpenVG/private/qpixmapdata_vg_p.h>
#include <QtOpenVG/private/qwindowsurface_vg_p.h>
+#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE)
+#include <QtGui/private/qwidget_p.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -64,6 +67,11 @@ QPixmapData *QVGGraphicsSystem::createPixmapData(QPixmapData::PixelType type) co
QWindowSurface *QVGGraphicsSystem::createWindowSurface(QWidget *widget) const
{
+#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE)
+ QWidgetPrivate *d = qt_widget_private(widget);
+ if (!d->isOpaque && widget->testAttribute(Qt::WA_TranslucentBackground))
+ return d->createDefaultWindowSurface_sys();
+#endif
return new QVGWindowSurface(widget);
}
diff --git a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp
index 6bf9d6b..e2b9f99 100644
--- a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp
+++ b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp
@@ -98,7 +98,11 @@ QPaintDevice *QTraceWindowSurface::paintDevice()
{
if (!buffer) {
buffer = new QPaintBuffer;
+#ifdef Q_WS_QPA
+ buffer->setBoundingRect(QRect(QPoint(), size()));
+#else
buffer->setBoundingRect(geometry());
+#endif
}
return buffer;
}
diff --git a/src/plugins/phonon/gstreamer/gstreamer.pro b/src/plugins/phonon/gstreamer/gstreamer.pro
index 1013205..02e0848 100644
--- a/src/plugins/phonon/gstreamer/gstreamer.pro
+++ b/src/plugins/phonon/gstreamer/gstreamer.pro
@@ -58,7 +58,7 @@ SOURCES += $$PHONON_GSTREAMER_DIR/abstractrenderer.cpp \
$$PHONON_GSTREAMER_DIR/volumefadereffect.cpp \
$$PHONON_GSTREAMER_DIR/widgetrenderer.cpp
-!embedded {
+x11 {
HEADERS += $$PHONON_GSTREAMER_DIR/x11renderer.h
SOURCES += $$PHONON_GSTREAMER_DIR/x11renderer.cpp
}
diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro
index ac11188..2188505 100644
--- a/src/plugins/phonon/mmf/mmf.pro
+++ b/src/plugins/phonon/mmf/mmf.pro
@@ -18,7 +18,7 @@ symbian {
# This is necessary because both epoc32/include and Phonon contain videoplayer.h.
# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that
# '#include <videoplayer.h>' picks up the Symbian header, as intended.
- PREPEND_INCLUDEPATH = /epoc32/include
+ PREPEND_INCLUDEPATH = $${EPOCROOT}epoc32/include
PREPEND_INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty
@@ -125,7 +125,11 @@ symbian {
LIBS += -lmediaclientaudiostream # For CMdaAudioOutputStream
# These are for effects.
- LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect
+ is_using_gnupoc {
+ LIBS += -laudioequalizereffect -lbassboosteffect -ldistanceattenuationeffect -ldopplerbase -leffectbase -lenvironmentalreverbeffect -llistenerdopplereffect -llistenerlocationeffect -llistenerorientationeffect -llocationbase -lloudnesseffect -lorientationbase -lsourcedopplereffect -lsourcelocationeffect -lsourceorientationeffect -lstereowideningeffect
+ } else {
+ LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect
+ }
# This is needed for having the .qtplugin file properly created on Symbian.
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend
diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro
new file mode 100644
index 0000000..1633ee4
--- /dev/null
+++ b/src/plugins/platforms/cocoa/cocoa.pro
@@ -0,0 +1,29 @@
+TARGET = qcocoa
+include(../../qpluginbase.pri)
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+OBJECTIVE_SOURCES = main.mm \
+ qcocoaintegration.mm \
+ qcocoawindowsurface.mm \
+ qcocoawindow.mm \
+ qnsview.mm \
+ qcocoaeventloopintegration.mm \
+ qcocoaautoreleasepool.mm \
+ qnswindowdelegate.mm
+
+OBJECTIVE_HEADERS = qcocoaintegration.h \
+ qcocoawindowsurface.h \
+ qcocoawindow.h \
+ qnsview.h \
+ qcocoaeventloopintegration.h \
+ qcocoaautoreleasepool.h \
+ qnswindowdelegate.h
+
+#add libz for freetype.
+LIBS += -lz
+LIBS += -framework cocoa
+
+include(../fontdatabases/coretext/coretext.pri)
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
+
diff --git a/src/plugins/platforms/cocoa/main.mm b/src/plugins/platforms/cocoa/main.mm
new file mode 100644
index 0000000..8be8883
--- /dev/null
+++ b/src/plugins/platforms/cocoa/main.mm
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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 plugins 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 <Cocoa/Cocoa.h>
+
+#include <QtGui/QPlatformIntegrationPlugin>
+#include "qcocoaintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QCocoaIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QCocoaIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "Cocoa";
+ return list;
+}
+
+QPlatformIntegration * QCocoaIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "cocoa")
+ return new QCocoaIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(Cocoa, QCocoaIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h
new file mode 100644
index 0000000..47b94d1
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** 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 plugins 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 QCOCOAAUTORELEASEPOOL_H
+#define QCOCOAAUTORELEASEPOOL_H
+
+#include <Cocoa/Cocoa.h>
+
+class QCocoaAutoReleasePool
+{
+public:
+ QCocoaAutoReleasePool();
+ ~QCocoaAutoReleasePool();
+
+private:
+ NSAutoreleasePool *pool;
+};
+
+#endif // QCOCOAAUTORELEASEPOOL_H
diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm
new file mode 100644
index 0000000..9a18fe2
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qcocoaautoreleasepool.h"
+
+QCocoaAutoReleasePool::QCocoaAutoReleasePool()
+{
+ pool = [[NSAutoreleasePool alloc] init];
+}
+
+QCocoaAutoReleasePool::~QCocoaAutoReleasePool()
+{
+ [pool release];
+}
diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h
new file mode 100644
index 0000000..8c21944
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** 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 plugins 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 QCOCAEVENTLOOPINTEGRATION_H
+#define QCOCAEVENTLOOPINTEGRATION_H
+
+#include <Cocoa/Cocoa.h>
+
+#include <QPlatformEventLoopIntegration>
+
+@interface OurApplication: NSApplication
+{
+ bool shouldKeepRunning;
+}
+
+- (void) run;
+- (void) processEvents: (int) msec;
+
+@end
+
+class QCocoaEventLoopIntegration : public QPlatformEventLoopIntegration
+{
+public:
+ QCocoaEventLoopIntegration();
+ void processEvents( qint64 msec );
+ void wakeup();
+
+ static int wakeupEventId;
+private:
+ OurApplication *app;
+};
+
+
+
+#endif // QCOCAEVENTLOOPINTEGRATION_H
+
diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm
new file mode 100644
index 0000000..b184f90
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qcocoaeventloopintegration.h"
+
+#import <Cocoa/Cocoa.h>
+
+#include "qcocoaautoreleasepool.h"
+
+#include <QtCore/QElapsedTimer>
+
+#include <QDebug>
+
+@implementation OurApplication
+
+- (void) run
+{
+ QCocoaAutoReleasePool pool;
+ [self finishLaunching];
+
+ shouldKeepRunning = YES;
+}
+
+- (void) processEvents : (int) msec
+{
+ QCocoaAutoReleasePool pool;
+ Q_UNUSED(pool);
+
+ QElapsedTimer timer;
+ timer.start();
+
+ NSTimeInterval seconds = NSTimeInterval(msec)/1000;
+ id untilDate = [NSDate dateWithTimeIntervalSinceNow:seconds];
+ bool continueLooping = true;
+ while ((timer.elapsed() < (msec-1)) && continueLooping) {
+ NSEvent *event =
+ [self nextEventMatchingMask:NSAnyEventMask
+ untilDate:untilDate
+ inMode:NSDefaultRunLoopMode
+ dequeue:YES];
+ if ([event type] == NSApplicationDefined
+ && [event subtype] == QCocoaEventLoopIntegration::wakeupEventId) {
+ continueLooping = false;
+ } else {
+ [self sendEvent:event];
+ }
+
+ }
+ [self updateWindows];
+}
+
+@end
+
+int QCocoaEventLoopIntegration::wakeupEventId = SHRT_MAX;
+
+QCocoaEventLoopIntegration::QCocoaEventLoopIntegration() :
+ QPlatformEventLoopIntegration()
+{
+ app = (OurApplication *)[OurApplication sharedApplication];
+ [app run];
+}
+
+void QCocoaEventLoopIntegration::processEvents(qint64 msec)
+{
+ [app processEvents:msec];
+}
+
+void QCocoaEventLoopIntegration::wakeup()
+{
+ QCocoaAutoReleasePool pool;
+ Q_UNUSED(pool);
+
+ NSPoint p = NSMakePoint(0,0);
+ NSWindow *nswin = [app keyWindow];
+ double timestamp = (double)(AbsoluteToDuration(UpTime())) / 1000.0;
+ NSEvent *event = [NSEvent
+ otherEventWithType:NSApplicationDefined
+ location:NSZeroPoint
+ modifierFlags:0
+ timestamp: timestamp
+ windowNumber:[nswin windowNumber]
+ context:0
+ subtype:QCocoaEventLoopIntegration::wakeupEventId
+ data1:0
+ data2:0
+ ];
+ [app postEvent:event atStart:NO];
+
+}
+
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h
new file mode 100644
index 0000000..e7ecf2a
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** 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 plugins 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 QPLATFORMINTEGRATION_COCOA_H
+#define QPLATFORMINTEGRATION_COCOA_H
+
+#include <Cocoa/Cocoa.h>
+
+#include "qcocoaautoreleasepool.h"
+
+#include <QtGui/QPlatformIntegration>
+
+QT_BEGIN_NAMESPACE
+
+class QCocoaScreen : public QPlatformScreen
+{
+public:
+ QCocoaScreen(int screenIndex);
+ ~QCocoaScreen();
+
+ QRect geometry() const { return m_geometry; }
+ int depth() const { return m_depth; }
+ QImage::Format format() const { return m_format; }
+ QSize physicalSize() const { return m_physicalSize; }
+
+public:
+ NSScreen *m_screen;
+ QRect m_geometry;
+ int m_depth;
+ QImage::Format m_format;
+ QSize m_physicalSize;
+};
+
+class QCocoaIntegration : public QPlatformIntegration
+{
+public:
+ QCocoaIntegration();
+ ~QCocoaIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+ QPlatformEventLoopIntegration *createEventLoopIntegration() const;
+
+private:
+ QList<QPlatformScreen *> mScreens;
+ QPlatformFontDatabase *mFontDb;
+
+ QCocoaAutoReleasePool *mPool;
+};
+
+QT_END_NAMESPACE
+
+#endif
+
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
new file mode 100644
index 0000000..79d5f51
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -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 plugins 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 "qcocoaintegration.h"
+
+#include "qcocoawindow.h"
+#include "qcocoawindowsurface.h"
+#include "qcocoaeventloopintegration.h"
+
+#include "qcoretextfontdatabase.h"
+
+#include <QtGui/QApplication>
+
+#include <private/qpixmap_raster_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QCocoaScreen::QCocoaScreen(int screenIndex)
+ :QPlatformScreen()
+{
+ m_screen = [[NSScreen screens] objectAtIndex:screenIndex];
+ NSRect rect = [m_screen frame];
+ m_geometry = QRect(rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
+
+ m_format = QImage::Format_ARGB32;
+
+ m_depth = NSBitsPerPixelFromDepth([m_screen depth]);
+
+ const int dpi = 72;
+ const qreal inch = 25.4;
+ m_physicalSize = QSize(qRound(m_geometry.width() * inch / dpi), qRound(m_geometry.height() *inch / dpi));
+}
+
+QCocoaScreen::~QCocoaScreen()
+{
+}
+
+QCocoaIntegration::QCocoaIntegration()
+ : mFontDb(new QCoreTextFontDatabase())
+{
+ mPool = new QCocoaAutoReleasePool;
+
+ //Make sure we have a nsapplication :)
+ [OurApplication sharedApplication];
+// [[OurApplication alloc] init];
+
+ NSArray *screens = [NSScreen screens];
+ for (uint i = 0; i < [screens count]; i++) {
+ QCocoaScreen *screen = new QCocoaScreen(i);
+ mScreens.append(screen);
+ }
+}
+
+QCocoaIntegration::~QCocoaIntegration()
+{
+ delete mPool;
+}
+
+QPixmapData *QCocoaIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QRasterPixmapData(type);
+}
+
+QPlatformWindow *QCocoaIntegration::createPlatformWindow(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+ return new QCocoaWindow(widget);
+}
+
+QWindowSurface *QCocoaIntegration::createWindowSurface(QWidget *widget, WId winId) const
+{
+ return new QCocoaWindowSurface(widget,winId);
+}
+
+QPlatformFontDatabase *QCocoaIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+QPlatformEventLoopIntegration *QCocoaIntegration::createEventLoopIntegration() const
+{
+ return new QCocoaEventLoopIntegration();
+}
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
new file mode 100644
index 0000000..660e9f8
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCOCOAWINDOW_H
+#define QCOCOAWINDOW_H
+
+#include <Cocoa/Cocoa.h>
+
+#include <QPlatformWindow>
+
+QT_BEGIN_NAMESPACE
+
+class QCocoaWindow : public QPlatformWindow
+{
+public:
+ QCocoaWindow(QWidget *tlw);
+ ~QCocoaWindow();
+
+ void setGeometry(const QRect &rect);
+
+ void setVisible(bool visible);
+
+ WId winId() const;
+
+ NSView *contentView() const;
+ void setContentView(NSView *contentView);
+
+ void windowDidResize();
+
+private:
+ NSWindow *m_nsWindow;
+};
+
+QT_END_NAMESPACE
+
+#endif // QCOCOAWINDOW_H
+
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
new file mode 100644
index 0000000..f004cb8
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qcocoawindow.h"
+#include "qnswindowdelegate.h"
+#include "qcocoaautoreleasepool.h"
+
+#include <QWidget>
+
+#include <QtGui/QApplication>
+
+#include <QWindowSystemInterface>
+
+#include <QDebug>
+
+QCocoaWindow::QCocoaWindow(QWidget *tlw)
+ : QPlatformWindow(tlw)
+{
+ QCocoaAutoReleasePool pool;
+ const QRect geo = tlw->geometry();
+ NSRect frame = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height());
+
+ m_nsWindow = [[NSWindow alloc] initWithContentRect:frame
+ styleMask:NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
+ backing:NSBackingStoreBuffered
+ defer:YES];
+
+ QNSWindowDelegate *delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:this];
+ [m_nsWindow setDelegate:delegate];
+
+ [m_nsWindow makeKeyAndOrderFront:nil];
+ [m_nsWindow setAcceptsMouseMovedEvents:YES];
+}
+
+QCocoaWindow::~QCocoaWindow()
+{
+}
+
+void QCocoaWindow::setGeometry(const QRect &rect)
+{
+ QPlatformWindow::setGeometry(rect);
+
+ NSRect bounds = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height());
+ [[m_nsWindow contentView]setFrameSize:bounds.size];
+}
+
+void QCocoaWindow::setVisible(bool visible)
+{
+ Q_UNUSED(visible);
+}
+
+WId QCocoaWindow::winId() const
+{
+ return WId([m_nsWindow windowNumber]);
+}
+
+NSView *QCocoaWindow::contentView() const
+{
+ return [m_nsWindow contentView];
+}
+
+void QCocoaWindow::setContentView(NSView *contentView)
+{
+ [m_nsWindow setContentView:contentView];
+}
+
+void QCocoaWindow::windowDidResize()
+{
+ //jlind: XXX This isn't ideal. Eventdispatcher does not run when resizing...
+ NSRect rect = [[m_nsWindow contentView]frame];
+ QRect geo(rect.origin.x,rect.origin.y,rect.size.width,rect.size.height);
+ if (geometry() != geo) {
+ widget()->setGeometry(geo);
+ QResizeEvent e(geo.size(), geometry().size());
+ setGeometry(geo);
+ QApplication::sendEvent(widget(), &e);
+ widget()->repaint();
+ }
+}
diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.h b/src/plugins/platforms/cocoa/qcocoawindowsurface.h
new file mode 100644
index 0000000..35f4064
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSURFACE_COCOA_H
+#define QWINDOWSURFACE_COCOA_H
+
+#include <Cocoa/Cocoa.h>
+
+#include "qcocoawindow.h"
+#include "qnsview.h"
+
+#include <QtGui/private/qwindowsurface_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QCocoaWindowSurface : public QWindowSurface
+{
+public:
+ QCocoaWindowSurface(QWidget *window, WId wid);
+ ~QCocoaWindowSurface();
+
+ QPaintDevice *paintDevice();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void resize (const QSize &size);
+
+private:
+
+ QCocoaWindow *m_cocoaWindow;
+ QImage *m_image;
+ QNSView *m_contentView;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.mm b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm
new file mode 100644
index 0000000..443a486
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qcocoawindowsurface.h"
+
+#include <QtCore/qdebug.h>
+
+#include <QtGui/QPainter>
+
+QT_BEGIN_NAMESPACE
+
+QRect flipedRect(const QRect &sourceRect,int height)
+{
+ if (!sourceRect.isValid())
+ return QRect();
+ QRect flippedRect = sourceRect;
+ flippedRect.moveTop(height - sourceRect.y());
+ return flippedRect;
+}
+
+QCocoaWindowSurface::QCocoaWindowSurface(QWidget *window, WId wId)
+ : QWindowSurface(window)
+{
+ m_cocoaWindow = static_cast<QCocoaWindow *>(window->platformWindow());
+
+ const QRect geo = window->geometry();
+ NSRect rect = NSMakeRect(geo.x(),geo.y(),geo.width(),geo.height());
+ m_contentView = [[QNSView alloc] initWithWidget:window];
+ m_cocoaWindow->setContentView(m_contentView);
+
+ m_image = new QImage(window->size(),QImage::Format_ARGB32);
+}
+
+QCocoaWindowSurface::~QCocoaWindowSurface()
+{
+ delete m_image;
+}
+
+QPaintDevice *QCocoaWindowSurface::paintDevice()
+{
+ return m_image;
+}
+
+void QCocoaWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(offset);
+
+ QRect geo = region.boundingRect();
+
+ NSRect rect = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height());
+ [m_contentView displayRect:rect];
+}
+
+void QCocoaWindowSurface::resize(const QSize &size)
+{
+ QWindowSurface::resize(size);
+ delete m_image;
+ m_image = new QImage(size,QImage::Format_ARGB32_Premultiplied);
+ NSSize newSize = NSMakeSize(size.width(),size.height());
+ [m_contentView setImage:m_image];
+
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h
new file mode 100644
index 0000000..0523725
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qnsview.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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 plugins 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 QNSVIEW_H
+#define QNSVIEW_H
+
+#include <Cocoa/Cocoa.h>
+
+#include <QtGui/QImage>
+
+@interface QNSView : NSView {
+ CGImageRef m_cgImage;
+ QWidget *m_widget;
+ Qt::MouseButtons m_buttons;
+}
+
+- (id)init;
+- (id)initWithWidget:(QWidget *)widget;
+
+- (void)setImage:(QImage *)image;
+- (void)drawRect:(NSRect)dirtyRect;
+
+- (BOOL)isFlipped;
+
+- (void)handleMouseEvent:(NSEvent *)theEvent;
+- (void)mouseDown:(NSEvent *)theEvent;
+- (void)mouseDragged:(NSEvent *)theEvent;
+- (void)mouseUp:(NSEvent *)theEvent;
+- (void)mouseMoved:(NSEvent *)theEvent;
+- (void)mouseEntered:(NSEvent *)theEvent;
+- (void)mouseExited:(NSEvent *)theEvent;
+- (void)rightMouseDown:(NSEvent *)theEvent;
+- (void)rightMouseDragged:(NSEvent *)theEvent;
+- (void)rightMouseUp:(NSEvent *)theEvent;
+- (void)otherMouseDown:(NSEvent *)theEvent;
+- (void)otherMouseDragged:(NSEvent *)theEvent;
+- (void)otherMouseUp:(NSEvent *)theEvent;
+
+@end
+
+#endif //QNSVIEW_H
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
new file mode 100644
index 0000000..60de6ba
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qnsview.h"
+
+#include <QtGui/QWindowSystemInterface>
+
+#include <QtCore/QDebug>
+
+@implementation QNSView
+
+- (id) init
+{
+ self = [super init];
+ if (self) {
+ m_cgImage = 0;
+ m_widget = 0;
+ m_buttons = Qt::NoButton;
+ }
+ return self;
+}
+
+- (id)initWithWidget:(QWidget *)widget {
+ self = [self init];
+ if (self) {
+ m_widget = widget;
+ }
+ return self;
+}
+
+- (void) setImage:(QImage *)image
+{
+ CGImageRelease(m_cgImage);
+
+ const uchar *imageData = image->bits();
+ int bitDepth = image->depth();
+ int colorBufferSize = 8;
+ int bytesPrLine = image->bytesPerLine();
+ int width = image->width();
+ int height = image->height();
+
+ CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB();
+
+ CGDataProviderRef cgDataProviderRef = CGDataProviderCreateWithData(
+ NULL,
+ imageData,
+ image->byteCount(),
+ NULL);
+
+ m_cgImage = CGImageCreate(width,
+ height,
+ colorBufferSize,
+ bitDepth,
+ bytesPrLine,
+ cgColourSpaceRef,
+ kCGImageAlphaNone,
+ cgDataProviderRef,
+ NULL,
+ false,
+ kCGRenderingIntentDefault);
+
+ CGColorSpaceRelease(cgColourSpaceRef);
+
+}
+
+- (void) drawRect:(NSRect)dirtyRect
+{
+ if (!m_cgImage)
+ return;
+
+ CGRect dirtyCGRect = NSRectToCGRect(dirtyRect);
+
+ NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext];
+ CGContextRef cgContext = (CGContextRef) [nsGraphicsContext graphicsPort];
+
+ CGContextSaveGState( cgContext );
+ int dy = dirtyCGRect.origin.y + CGRectGetMaxY(dirtyCGRect);
+ CGContextTranslateCTM(cgContext, 0, dy);
+ CGContextScaleCTM(cgContext, 1, -1);
+
+ CGImageRef subImage = CGImageCreateWithImageInRect(m_cgImage, dirtyCGRect);
+ CGContextDrawImage(cgContext,dirtyCGRect,subImage);
+
+ CGContextRestoreGState(cgContext);
+
+ CGImageRelease(subImage);
+
+}
+
+- (BOOL) isFlipped
+{
+ return YES;
+}
+
+- (void)handleMouseEvent:(NSEvent *)theEvent;
+{
+ NSPoint point = [self convertPoint: [theEvent locationInWindow] fromView: nil];
+ QPoint qt_localPoint(point.x,point.y);
+
+ NSTimeInterval timestamp = [theEvent timestamp];
+ ulong qt_timestamp = timestamp * 1000;
+
+ QWindowSystemInterface::handleMouseEvent(m_widget,qt_timestamp,qt_localPoint,QPoint(),m_buttons);
+
+}
+ - (void)mouseDown:(NSEvent *)theEvent
+ {
+ m_buttons |= Qt::LeftButton;
+ [self handleMouseEvent:theEvent];
+ }
+ - (void)mouseDragged:(NSEvent *)theEvent
+ {
+ if (!(m_buttons & Qt::LeftButton))
+ qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton");
+ [self handleMouseEvent:theEvent];
+ }
+ - (void)mouseUp:(NSEvent *)theEvent
+ {
+ m_buttons &= QFlag(~int(Qt::LeftButton));
+ [self handleMouseEvent:theEvent];
+ }
+
+- (void)mouseMoved:(NSEvent *)theEvent
+{
+ qDebug() << "mouseMove";
+ [self handleMouseEvent:theEvent];
+}
+- (void)mouseEntered:(NSEvent *)theEvent
+{
+ Q_UNUSED(theEvent);
+ QWindowSystemInterface::handleEnterEvent(m_widget);
+}
+- (void)mouseExited:(NSEvent *)theEvent
+{
+ Q_UNUSED(theEvent);
+ QWindowSystemInterface::handleLeaveEvent(m_widget);
+}
+- (void)rightMouseDown:(NSEvent *)theEvent
+{
+ m_buttons |= Qt::RightButton;
+ [self handleMouseEvent:theEvent];
+}
+- (void)rightMouseDragged:(NSEvent *)theEvent
+{
+ if (!(m_buttons & Qt::LeftButton))
+ qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton");
+ [self handleMouseEvent:theEvent];
+}
+- (void)rightMouseUp:(NSEvent *)theEvent
+{
+ m_buttons &= QFlag(~int(Qt::RightButton));
+ [self handleMouseEvent:theEvent];
+}
+- (void)otherMouseDown:(NSEvent *)theEvent
+{
+ m_buttons |= Qt::RightButton;
+ [self handleMouseEvent:theEvent];
+}
+- (void)otherMouseDragged:(NSEvent *)theEvent
+{
+ if (!(m_buttons & Qt::LeftButton))
+ qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton");
+ [self handleMouseEvent:theEvent];
+}
+- (void)otherMouseUp:(NSEvent *)theEvent
+{
+ m_buttons &= QFlag(~int(Qt::MiddleButton));
+ [self handleMouseEvent:theEvent];
+}
+
+
+
+@end
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h
new file mode 100644
index 0000000..9fc1d63
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** 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 plugins 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 QNSWINDOWDELEGATE_H
+#define QNSWINDOWDELEGATE_H
+
+#include <Cocoa/Cocoa.h>
+
+#include "qcocoawindow.h"
+
+@interface QNSWindowDelegate : NSObject <NSWindowDelegate>
+{
+ QCocoaWindow *m_cocoaWindow;
+}
+
+- (id)initWithQCocoaWindow: (QCocoaWindow *) cocoaWindow;
+
+- (void)windowDidResize:(NSNotification *)notification;
+- (void)windowWillClose:(NSNotification *)notification;
+
+@end
+
+#endif // QNSWINDOWDELEGATE_H
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
new file mode 100644
index 0000000..c04602b
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qnswindowdelegate.h"
+
+#include <QDebug>
+#include <QWindowSystemInterface>
+
+@implementation QNSWindowDelegate
+
+- (id) initWithQCocoaWindow: (QCocoaWindow *) cocoaWindow
+{
+ self = [super init];
+
+ if (self) {
+ m_cocoaWindow = cocoaWindow;
+ }
+ return self;
+}
+
+- (void)windowDidResize:(NSNotification *)notification
+{
+ Q_UNUSED(notification);
+ if (m_cocoaWindow) {
+ m_cocoaWindow->windowDidResize();
+ }
+}
+
+- (void)windowWillClose:(NSNotification *)notification
+{
+ Q_UNUSED(notification);
+ QWindowSystemInterface::handleCloseEvent(m_cocoaWindow->widget());
+}
+
+@end
diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro
new file mode 100644
index 0000000..65c49e3
--- /dev/null
+++ b/src/plugins/platforms/directfb/directfb.pro
@@ -0,0 +1,35 @@
+TARGET = qdirectfb
+include(../../qpluginbase.pri)
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+isEmpty(DIRECTFB_LIBS) {
+ DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread
+}
+isEmpty(DIRECTFB_INCLUDEPATH) {
+ DIRECTFB_INCLUDEPATH = /usr/include/directfb
+}
+
+INCLUDEPATH += $$DIRECTFB_INCLUDEPATH
+LIBS += $$DIRECTFB_LIBS
+
+SOURCES = main.cpp \
+ qdirectfbintegration.cpp \
+ qdirectfbwindowsurface.cpp \
+ qdirectfbblitter.cpp \
+ qdirectfbconvenience.cpp \
+ qdirectfbinput.cpp \
+ qdirectfbcursor.cpp \
+ qdirectfbwindow.cpp \
+ qdirectfbglcontext.cpp
+HEADERS = qdirectfbintegration.h \
+ qdirectfbwindowsurface.h \
+ qdirectfbblitter.h \
+ qdirectfbconvenience.h \
+ qdirectfbinput.h \
+ qdirectfbcursor.h \
+ qdirectfbwindow.h \
+ qdirectfbglcontext.h
+
+include(../fontdatabases/genericunix/genericunix.pri)
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp
new file mode 100644
index 0000000..f4ece32
--- /dev/null
+++ b/src/plugins/platforms/directfb/main.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QtGui/QPlatformIntegrationPlugin>
+#include "qdirectfbintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QDirectFbIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "directfb";
+ return list;
+}
+
+QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "directfb")
+ return new QDirectFbIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(directfb, QDirectFbIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
new file mode 100644
index 0000000..d379b65
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbblitter.h"
+#include "qdirectfbconvenience.h"
+
+#include <QtGui/private/qpixmap_blitter_p.h>
+
+#include <QDebug>
+
+#include <directfb.h>
+
+QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface)
+ : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability
+ |QBlittable::SourcePixmapCapability
+ |QBlittable::SourceOverPixmapCapability
+ |QBlittable::SourceOverScaledPixmapCapability))
+{
+ if (surface) {
+ m_surface = surface;
+ } else {
+ DFBSurfaceDescription surfaceDesc;
+ memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription));
+ surfaceDesc.width = rect.width();
+ surfaceDesc.height = rect.height();
+ surfaceDesc.caps = DSCAPS_PREMULTIPLIED;
+ surfaceDesc.pixelformat = DSPF_ARGB;
+ surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT);
+
+ IDirectFB *dfb = QDirectFbConvenience::dfbInterface();
+ dfb->CreateSurface(dfb,&surfaceDesc, &m_surface);
+ m_surface->Clear(m_surface,0,0,0,0);
+ }
+
+}
+
+QDirectFbBlitter::~QDirectFbBlitter()
+{
+ unlock();
+ m_surface->Release(m_surface);
+}
+
+void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color)
+{
+ m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha());
+// When the blitter api supports non opaque blits, also remember to change
+// qpixmap_blitter.cpp::fill
+// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX;
+// m_surface->SetDrawingFlags(m_surface, drawingFlags);
+ m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX);
+ m_surface->FillRectangle(m_surface, rect.x(), rect.y(),
+ rect.width(), rect.height());
+}
+
+void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect)
+{
+ QPixmapData *data = pixmap.pixmapData();
+ Q_ASSERT(data->width() && data->height());
+ Q_ASSERT(data->classId() == QPixmapData::BlitterClass);
+ QBlittablePixmapData *blitPm = static_cast<QBlittablePixmapData*>(data);
+ QDirectFbBlitter *dfbBlitter = static_cast<QDirectFbBlitter *>(blitPm->blittable());
+ dfbBlitter->unlock();
+
+ IDirectFBSurface *s = dfbBlitter->m_surface;
+
+ DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX;
+ DFBSurfacePorterDuffRule porterDuff = DSPD_SRC;
+ if (pixmap.hasAlpha()) {
+ blittingFlags = DSBLIT_BLEND_ALPHACHANNEL;
+ porterDuff = DSPD_SRC_OVER;
+ }
+
+ m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags));
+ m_surface->SetPorterDuff(m_surface,porterDuff);
+ m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA);
+
+ const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() };
+
+ DFBResult result;
+ if (rect.width() == srcRect.width() && rect.height() == srcRect.height())
+ result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y());
+ else {
+ const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() };
+ result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect);
+ }
+ if (result != DFB_OK)
+ DirectFBError("QDirectFBBlitter::drawPixmap()", result);
+}
+
+QImage *QDirectFbBlitter::doLock()
+{
+ Q_ASSERT(m_surface);
+ Q_ASSERT(size().isValid());
+
+ void *mem;
+ int bpl;
+ const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast<void**>(&mem), &bpl);
+ if (result == DFB_OK) {
+ DFBSurfacePixelFormat dfbFormat;
+ DFBSurfaceCapabilities dfbCaps;
+ m_surface->GetPixelFormat(m_surface,&dfbFormat);
+ m_surface->GetCapabilities(m_surface,&dfbCaps);
+ QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps);
+ int w, h;
+ m_surface->GetSize(m_surface,&w,&h);
+ m_image = QImage(static_cast<uchar *>(mem),w,h,bpl,format);
+ } else {
+ DirectFBError("Failed to lock image", result);
+ }
+
+ return &m_image;
+}
+
+void QDirectFbBlitter::doUnlock()
+{
+ m_surface->Unlock(m_surface);
+}
diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h
new file mode 100644
index 0000000..1e874ba
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbblitter.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBBLITTER_H
+#define QDIRECTFBBLITTER_H
+
+#include "qdirectfbconvenience.h"
+
+#include <private/qblittable_p.h>
+
+#include <directfb.h>
+
+class QDirectFbBlitter : public QBlittable
+{
+public:
+ QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0);
+ virtual ~QDirectFbBlitter();
+
+ virtual void fillRect(const QRectF &rect, const QColor &color);
+ virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect);
+
+protected:
+ virtual QImage *doLock();
+ virtual void doUnlock();
+
+ IDirectFBSurface *m_surface;
+ QImage m_image;
+
+ friend class QDirectFbConvenience;
+};
+
+class QDirectFbBlitterPixmapData : public QBlittablePixmapData
+{
+public:
+ QBlittable *createBlittable(const QSize &size) const { return new QDirectFbBlitter(size); }
+};
+
+#endif // QDIRECTFBBLITTER_H
diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp
new file mode 100644
index 0000000..91a1b3a
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp
@@ -0,0 +1,376 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbconvenience.h"
+#include "qdirectfbblitter.h"
+
+#include <private/qpixmap_blitter_p.h>
+
+IDirectFB *QDirectFbConvenience::dfbInterface()
+{
+ static IDirectFB *dfb = 0;
+ if (!dfb) {
+ DFBResult result = DirectFBCreate(&dfb);
+ if (result != DFB_OK) {
+ DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result);
+ return 0;
+ }
+ }
+ return dfb;
+}
+
+IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display)
+{
+ IDirectFBDisplayLayer *layer;
+ DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer);
+ if (result != DFB_OK) {
+ DirectFBError("QDirectFbConvenience: "
+ "Unable to get primary display layer!", result);
+ }
+ return layer;
+}
+
+QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps)
+{
+ switch (format) {
+ case DSPF_LUT8:
+ return QImage::Format_Indexed8;
+ case DSPF_RGB24:
+ return QImage::Format_RGB888;
+ case DSPF_ARGB4444:
+ return QImage::Format_ARGB4444_Premultiplied;
+ case DSPF_RGB444:
+ return QImage::Format_RGB444;
+ case DSPF_RGB555:
+ case DSPF_ARGB1555:
+ return QImage::Format_RGB555;
+ case DSPF_RGB16:
+ return QImage::Format_RGB16;
+ case DSPF_ARGB6666:
+ return QImage::Format_ARGB6666_Premultiplied;
+ case DSPF_RGB18:
+ return QImage::Format_RGB666;
+ case DSPF_RGB32:
+ return QImage::Format_RGB32;
+ case DSPF_ARGB: {
+ if (caps & DSCAPS_PREMULTIPLIED)
+ return QImage::Format_ARGB32_Premultiplied;
+ else return QImage::Format_ARGB32; }
+ default:
+ break;
+ }
+ return QImage::Format_Invalid;
+
+}
+
+int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format)
+{
+ return ((0x1f << 7) & format) >> 7;
+}
+
+IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData)
+{
+ QBlittablePixmapData *blittablePmData = static_cast<QBlittablePixmapData *>(pixmapData);
+ if (blittablePmData) {
+ QBlittable *blittable = blittablePmData->blittable();
+ QDirectFbBlitter *dfbBlitter = static_cast<QDirectFbBlitter *>(blittable);
+ return dfbBlitter->m_surface;
+ }
+ return 0;
+}
+
+Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier)
+{
+ switch (identifier){
+ case DIBI_LEFT:
+ return Qt::LeftButton;
+ case DIBI_MIDDLE:
+ return Qt::MidButton;
+ case DIBI_RIGHT:
+ return Qt::RightButton;
+ default:
+ return Qt::NoButton;
+ }
+}
+
+Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask)
+{
+ Qt::MouseButtons buttons = Qt::NoButton;
+
+ if (mask & DIBM_LEFT) {
+ buttons |= Qt::LeftButton;
+ }
+ if (mask & DIBM_MIDDLE) {
+ buttons |= Qt::MidButton;
+ }
+ if (mask & DIBM_RIGHT) {
+ buttons |= Qt::RightButton;
+ }
+ return buttons;
+}
+
+Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask)
+{
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier;
+
+ if (mask & DIMM_SHIFT) {
+ modifiers |= Qt::ShiftModifier;
+ }
+ if (mask & DIMM_ALT) {
+ modifiers |= Qt::AltModifier;
+ }
+ if (mask & DIMM_ALTGR) {
+ modifiers |= Qt::MetaModifier;
+ }
+ if (mask & DIMM_CONTROL) {
+ modifiers |= Qt::ControlModifier;
+ }
+ if (mask & DIMM_META) {
+ modifiers | Qt::MetaModifier;
+ }
+ return modifiers;
+}
+
+QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type)
+{
+ switch(type) {
+ case DWET_BUTTONDOWN:
+ return QEvent::MouseButtonPress;
+ case DWET_BUTTONUP:
+ return QEvent::MouseButtonRelease;
+ case DWET_MOTION:
+ return QEvent::MouseMove;
+ case DWET_WHEEL:
+ return QEvent::Wheel;
+ case DWET_KEYDOWN:
+ return QEvent::KeyPress;
+ case DWET_KEYUP:
+ return QEvent::KeyRelease;
+ default:
+ return QEvent::None;
+ }
+}
+QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0;
+QDirectFbKeyMap *QDirectFbConvenience::keyMap()
+{
+ if (!dfbKeymap)
+ dfbKeymap = new QDirectFbKeyMap();
+ return dfbKeymap;
+}
+
+QDirectFbKeyMap::QDirectFbKeyMap()
+{
+ insert(DIKS_BACKSPACE , Qt::Key_Backspace);
+ insert(DIKS_TAB , Qt::Key_Tab);
+ insert(DIKS_RETURN , Qt::Key_Return);
+ insert(DIKS_ESCAPE , Qt::Key_Escape);
+ insert(DIKS_DELETE , Qt::Key_Delete);
+
+ insert(DIKS_CURSOR_LEFT , Qt::Key_Left);
+ insert(DIKS_CURSOR_RIGHT , Qt::Key_Right);
+ insert(DIKS_CURSOR_UP , Qt::Key_Up);
+ insert(DIKS_CURSOR_DOWN , Qt::Key_Down);
+ insert(DIKS_INSERT , Qt::Key_Insert);
+ insert(DIKS_HOME , Qt::Key_Home);
+ insert(DIKS_END , Qt::Key_End);
+ insert(DIKS_PAGE_UP , Qt::Key_PageUp);
+ insert(DIKS_PAGE_DOWN , Qt::Key_PageDown);
+ insert(DIKS_PRINT , Qt::Key_Print);
+ insert(DIKS_PAUSE , Qt::Key_Pause);
+ insert(DIKS_SELECT , Qt::Key_Select);
+ insert(DIKS_GOTO , Qt::Key_OpenUrl);
+ insert(DIKS_CLEAR , Qt::Key_Clear);
+ insert(DIKS_MENU , Qt::Key_Menu);
+ insert(DIKS_HELP , Qt::Key_Help);
+
+ insert(DIKS_INTERNET , Qt::Key_HomePage);
+ insert(DIKS_MAIL , Qt::Key_LaunchMail);
+ insert(DIKS_FAVORITES , Qt::Key_Favorites);
+
+ insert(DIKS_BACK , Qt::Key_Back);
+ insert(DIKS_FORWARD , Qt::Key_Forward);
+ insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp);
+ insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown);
+ insert(DIKS_MUTE , Qt::Key_VolumeMute);
+ insert(DIKS_PLAYPAUSE , Qt::Key_Pause);
+ insert(DIKS_PLAY , Qt::Key_MediaPlay);
+ insert(DIKS_STOP , Qt::Key_MediaStop);
+ insert(DIKS_RECORD , Qt::Key_MediaRecord);
+ insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious);
+ insert(DIKS_NEXT , Qt::Key_MediaNext);
+
+ insert(DIKS_F1 , Qt::Key_F1);
+ insert(DIKS_F2 , Qt::Key_F2);
+ insert(DIKS_F3 , Qt::Key_F3);
+ insert(DIKS_F4 , Qt::Key_F4);
+ insert(DIKS_F5 , Qt::Key_F5);
+ insert(DIKS_F6 , Qt::Key_F6);
+ insert(DIKS_F7 , Qt::Key_F7);
+ insert(DIKS_F8 , Qt::Key_F8);
+ insert(DIKS_F9 , Qt::Key_F9);
+ insert(DIKS_F10 , Qt::Key_F10);
+ insert(DIKS_F11 , Qt::Key_F11);
+ insert(DIKS_F12 , Qt::Key_F12);
+
+ insert(DIKS_SHIFT , Qt::Key_Shift);
+ insert(DIKS_CONTROL , Qt::Key_Control);
+ insert(DIKS_ALT , Qt::Key_Alt);
+ insert(DIKS_ALTGR , Qt::Key_AltGr);
+
+ insert(DIKS_META , Qt::Key_Meta);
+ insert(DIKS_SUPER , Qt::Key_Super_L); // ???
+ insert(DIKS_HYPER , Qt::Key_Hyper_L); // ???
+
+ insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock);
+ insert(DIKS_NUM_LOCK , Qt::Key_NumLock);
+ insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock);
+
+ insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot);
+ insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering);
+ insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute);
+ insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve);
+ insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron);
+ insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla);
+ insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex);
+ insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis);
+ insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute);
+ insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave);
+ insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota);
+ insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron);
+ insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek);
+ insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound);
+ insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde);
+ insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound);
+ insert(DIKS_SPACE , Qt::Key_Space);
+ insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam);
+ insert(DIKS_QUOTATION , Qt::Key_QuoteDbl);
+ insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign);
+ insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar);
+ insert(DIKS_PERCENT_SIGN , Qt::Key_Percent);
+ insert(DIKS_AMPERSAND , Qt::Key_Ampersand);
+ insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe);
+ insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft);
+ insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight);
+ insert(DIKS_ASTERISK , Qt::Key_Asterisk);
+ insert(DIKS_PLUS_SIGN , Qt::Key_Plus);
+ insert(DIKS_COMMA , Qt::Key_Comma);
+ insert(DIKS_MINUS_SIGN , Qt::Key_Minus);
+ insert(DIKS_PERIOD , Qt::Key_Period);
+ insert(DIKS_SLASH , Qt::Key_Slash);
+ insert(DIKS_0 , Qt::Key_0);
+ insert(DIKS_1 , Qt::Key_1);
+ insert(DIKS_2 , Qt::Key_2);
+ insert(DIKS_3 , Qt::Key_3);
+ insert(DIKS_4 , Qt::Key_4);
+ insert(DIKS_5 , Qt::Key_5);
+ insert(DIKS_6 , Qt::Key_6);
+ insert(DIKS_7 , Qt::Key_7);
+ insert(DIKS_8 , Qt::Key_8);
+ insert(DIKS_9 , Qt::Key_9);
+ insert(DIKS_COLON , Qt::Key_Colon);
+ insert(DIKS_SEMICOLON , Qt::Key_Semicolon);
+ insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less);
+ insert(DIKS_EQUALS_SIGN , Qt::Key_Equal);
+ insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater);
+ insert(DIKS_QUESTION_MARK , Qt::Key_Question);
+ insert(DIKS_AT , Qt::Key_At);
+ insert(DIKS_CAPITAL_A , Qt::Key_A);
+ insert(DIKS_CAPITAL_B , Qt::Key_B);
+ insert(DIKS_CAPITAL_C , Qt::Key_C);
+ insert(DIKS_CAPITAL_D , Qt::Key_D);
+ insert(DIKS_CAPITAL_E , Qt::Key_E);
+ insert(DIKS_CAPITAL_F , Qt::Key_F);
+ insert(DIKS_CAPITAL_G , Qt::Key_G);
+ insert(DIKS_CAPITAL_H , Qt::Key_H);
+ insert(DIKS_CAPITAL_I , Qt::Key_I);
+ insert(DIKS_CAPITAL_J , Qt::Key_J);
+ insert(DIKS_CAPITAL_K , Qt::Key_K);
+ insert(DIKS_CAPITAL_L , Qt::Key_L);
+ insert(DIKS_CAPITAL_M , Qt::Key_M);
+ insert(DIKS_CAPITAL_N , Qt::Key_N);
+ insert(DIKS_CAPITAL_O , Qt::Key_O);
+ insert(DIKS_CAPITAL_P , Qt::Key_P);
+ insert(DIKS_CAPITAL_Q , Qt::Key_Q);
+ insert(DIKS_CAPITAL_R , Qt::Key_R);
+ insert(DIKS_CAPITAL_S , Qt::Key_S);
+ insert(DIKS_CAPITAL_T , Qt::Key_T);
+ insert(DIKS_CAPITAL_U , Qt::Key_U);
+ insert(DIKS_CAPITAL_V , Qt::Key_V);
+ insert(DIKS_CAPITAL_W , Qt::Key_W);
+ insert(DIKS_CAPITAL_X , Qt::Key_X);
+ insert(DIKS_CAPITAL_Y , Qt::Key_Y);
+ insert(DIKS_CAPITAL_Z , Qt::Key_Z);
+ insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft);
+ insert(DIKS_BACKSLASH , Qt::Key_Backslash);
+ insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight);
+ insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum);
+ insert(DIKS_UNDERSCORE , Qt::Key_Underscore);
+ insert(DIKS_SMALL_A , Qt::Key_A);
+ insert(DIKS_SMALL_B , Qt::Key_B);
+ insert(DIKS_SMALL_C , Qt::Key_C);
+ insert(DIKS_SMALL_D , Qt::Key_D);
+ insert(DIKS_SMALL_E , Qt::Key_E);
+ insert(DIKS_SMALL_F , Qt::Key_F);
+ insert(DIKS_SMALL_G , Qt::Key_G);
+ insert(DIKS_SMALL_H , Qt::Key_H);
+ insert(DIKS_SMALL_I , Qt::Key_I);
+ insert(DIKS_SMALL_J , Qt::Key_J);
+ insert(DIKS_SMALL_K , Qt::Key_K);
+ insert(DIKS_SMALL_L , Qt::Key_L);
+ insert(DIKS_SMALL_M , Qt::Key_M);
+ insert(DIKS_SMALL_N , Qt::Key_N);
+ insert(DIKS_SMALL_O , Qt::Key_O);
+ insert(DIKS_SMALL_P , Qt::Key_P);
+ insert(DIKS_SMALL_Q , Qt::Key_Q);
+ insert(DIKS_SMALL_R , Qt::Key_R);
+ insert(DIKS_SMALL_S , Qt::Key_S);
+ insert(DIKS_SMALL_T , Qt::Key_T);
+ insert(DIKS_SMALL_U , Qt::Key_U);
+ insert(DIKS_SMALL_V , Qt::Key_V);
+ insert(DIKS_SMALL_W , Qt::Key_W);
+ insert(DIKS_SMALL_X , Qt::Key_X);
+ insert(DIKS_SMALL_Y , Qt::Key_Y);
+ insert(DIKS_SMALL_Z , Qt::Key_Z);
+ insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft);
+ insert(DIKS_VERTICAL_BAR , Qt::Key_Bar);
+ insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight);
+ insert(DIKS_TILDE , Qt::Key_AsciiTilde);
+}
diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.h b/src/plugins/platforms/directfb/qdirectfbconvenience.h
new file mode 100644
index 0000000..3669159
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbconvenience.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBCONVENIENCE_H
+#define QDIRECTFBCONVENIENCE_H
+
+#include <QtGui/qimage.h>
+#include <QtCore/QHash>
+#include <QtCore/QEvent>
+#include <QtGui/QPixmap>
+
+#include <directfb.h>
+
+class QDirectFbKeyMap: public QHash<DFBInputDeviceKeySymbol, Qt::Key>
+{
+public:
+ QDirectFbKeyMap();
+};
+
+
+class QDirectFbConvenience
+{
+public:
+ static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps);
+ static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; }
+ static int colorDepthForSurface(const DFBSurfacePixelFormat format);
+
+ //This is set by the graphicssystem constructor
+ static IDirectFB *dfbInterface();
+ static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY);
+
+ static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *);
+
+ static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier);
+ static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask);
+ static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask);
+ static QEvent::Type eventType(DFBWindowEventType type);
+
+ static QDirectFbKeyMap *keyMap();
+
+private:
+ static QDirectFbKeyMap *dfbKeymap;
+ friend class QDirectFbIntegration;
+};
+
+#endif // QDIRECTFBCONVENIENCE_H
diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp
new file mode 100644
index 0000000..51502f8
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbcursor.h"
+#include "qdirectfbconvenience.h"
+
+
+QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) :
+ QPlatformCursor(screen), surface(0)
+{
+ QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer);
+ image = new QPlatformCursorImage(0, 0, 0, 0, 0, 0);
+}
+
+void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget)
+{
+ Q_UNUSED(widget);
+ int xSpot;
+ int ySpot;
+ QPixmap map;
+
+ if (cursor->shape() != Qt::BitmapCursor) {
+ image->set(cursor->shape());
+ xSpot = image->hotspot().x();
+ ySpot = image->hotspot().y();
+ QImage *i = image->image();
+ map = QPixmap::fromImage(*i);
+ } else {
+ QPoint point = cursor->hotSpot();
+ xSpot = point.x();
+ ySpot = point.y();
+ map = cursor->pixmap();
+ }
+
+ IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData());
+
+ if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) {
+ return;
+ }
+ m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot);
+ m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED);
+}
diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h
new file mode 100644
index 0000000..ea8b7b0
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbcursor.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBCURSOR_H
+#define QDIRECTFBCURSOR_H
+
+#include <QPlatformCursor>
+#include <directfb.h>
+class QDirectFbScreen;
+class QDirectFbBlitter;
+
+class QDirectFBCursor : public QPlatformCursor
+{
+public:
+ QDirectFBCursor(QPlatformScreen *screem);
+ void changeCursor(QCursor * cursor, QWidget * widget);
+
+private:
+ IDirectFBDisplayLayer * m_layer;
+ IDirectFBSurface * surface;
+ QPlatformCursorImage * image;
+ QDirectFbBlitter *blitter;
+};
+
+#endif // QDIRECTFBCURSOR_H
diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp
new file mode 100644
index 0000000..033ff1e
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbglcontext.h"
+
+#include <directfb/directfbgl.h>
+
+#include <QDebug>
+
+QDirectFbGLContext::QDirectFbGLContext(IDirectFBGL *glContext)
+ : m_dfbGlContext(glContext)
+{
+ DFBResult result;
+ DFBGLAttributes glAttribs;
+ result = m_dfbGlContext->GetAttributes(glContext, &glAttribs);
+ if (result == DFB_OK) {
+ m_windowFormat.setDepthBufferSize(glAttribs.depth_size);
+ m_windowFormat.setStencilBufferSize(glAttribs.stencil_size);
+
+ m_windowFormat.setRedBufferSize(glAttribs.red_size);
+ m_windowFormat.setGreenBufferSize(glAttribs.green_size);
+ m_windowFormat.setBlueBufferSize(glAttribs.blue_size);
+ m_windowFormat.setAlphaBufferSize(glAttribs.alpha_size);
+
+ m_windowFormat.setAccumBufferSize(glAttribs.accum_red_size);
+ m_windowFormat.setAlpha(glAttribs.accum_alpha_size);
+
+ m_windowFormat.setDoubleBuffer(glAttribs.double_buffer);
+ m_windowFormat.setStereo(glAttribs.stereo);
+ }
+}
+
+void QDirectFbGLContext::makeCurrent()
+{
+ m_dfbGlContext->Lock(m_dfbGlContext);
+}
+
+void QDirectFbGLContext::doneCurrent()
+{
+ m_dfbGlContext->Unlock(m_dfbGlContext);
+}
+
+void *QDirectFbGLContext::getProcAddress(const QString &procName)
+{
+ void *proc;
+ DFBResult result = m_dfbGlContext->GetProcAddress(m_dfbGlContext,qPrintable(procName),&proc);
+ if (result == DFB_OK)
+ return proc;
+ return 0;
+}
+
+void QDirectFbGLContext::swapBuffers()
+{
+// m_dfbGlContext->Unlock(m_dfbGlContext); //maybe not in doneCurrent()
+ qDebug() << "Swap buffers";
+}
+
+QPlatformWindowFormat QDirectFbGLContext::platformWindowFormat() const
+{
+ return m_windowFormat;
+}
diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.h b/src/plugins/platforms/directfb/qdirectfbglcontext.h
new file mode 100644
index 0000000..1785666
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbglcontext.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBGLCONTEXT_H
+#define QDIRECTFBGLCONTEXT_H
+
+#include <QPlatformGLContext>
+
+#include "qdirectfbconvenience.h"
+
+class QDirectFbGLContext : public QPlatformGLContext
+{
+public:
+ explicit QDirectFbGLContext(IDirectFBGL *glContext);
+
+ void makeCurrent();
+ void doneCurrent();
+ void swapBuffers();
+ void *getProcAddress(const QString &procName);
+
+ QPlatformWindowFormat platformWindowFormat() const;
+
+
+private:
+ IDirectFBGL *m_dfbGlContext;
+
+ QPlatformWindowFormat m_windowFormat;
+
+};
+
+#endif // QDIRECTFBGLCONTEXT_H
diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp
new file mode 100644
index 0000000..9d2a8a8
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp
@@ -0,0 +1,208 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbinput.h"
+#include "qdirectfbconvenience.h"
+
+#include <QThread>
+#include <QDebug>
+#include <QWindowSystemInterface>
+#include <QMouseEvent>
+#include <QEvent>
+#include <QApplication>
+
+#include <directfb.h>
+
+QDirectFbInput::QDirectFbInput(QObject *parent)
+ : QObject(parent), m_shouldStop(false)
+{
+ m_dfbInterface = QDirectFbConvenience::dfbInterface();
+
+ DFBResult ok = m_dfbInterface->CreateEventBuffer(m_dfbInterface,&m_eventBuffer);
+ if (ok != DFB_OK)
+ DirectFBError("Failed to initialise eventbuffer", ok);
+
+ m_dfbInterface->GetDisplayLayer(m_dfbInterface,DLID_PRIMARY, &m_dfbDisplayLayer);
+
+}
+
+void QDirectFbInput::runInputEventLoop()
+{
+ while (true) {
+ m_eventBuffer->WaitForEvent(m_eventBuffer);
+ if (m_shouldStop) {
+ m_waitStop.release();
+ break;
+ }
+ handleEvents();
+ }
+}
+
+void QDirectFbInput::stopInputEventLoop()
+{
+ m_shouldStop = true;
+ m_waitStop.acquire();
+}
+
+void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw)
+{
+ m_tlwMap.insert(id,tlw);
+ IDirectFBWindow *window;
+ m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,id,&window);
+
+ window->AttachEventBuffer(window,m_eventBuffer);
+}
+
+void QDirectFbInput::removeWindow(WId wId)
+{
+ IDirectFBWindow *window;
+ m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,wId, &window);
+
+ window->DetachEventBuffer(window,m_eventBuffer);
+ m_tlwMap.remove(wId);
+}
+
+void QDirectFbInput::handleEvents()
+{
+ DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer);
+ while(hasEvent == DFB_OK){
+ DFBEvent event;
+ DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer,&event);
+ if (ok != DFB_OK)
+ DirectFBError("Failed to get event",ok);
+ if (event.clazz == DFEC_WINDOW) {
+ switch (event.window.type) {
+ case DWET_BUTTONDOWN:
+ case DWET_BUTTONUP:
+ case DWET_MOTION:
+ handleMouseEvents(event);
+ break;
+ case DWET_WHEEL:
+ handleWheelEvent(event);
+ break;
+ case DWET_KEYDOWN:
+ case DWET_KEYUP:
+ handleKeyEvents(event);
+ break;
+ case DWET_ENTER:
+ case DWET_LEAVE:
+ handleEnterLeaveEvents(event);
+ default:
+ break;
+ }
+
+ }
+
+ hasEvent = m_eventBuffer->HasEvent(m_eventBuffer);
+ }
+}
+
+void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
+{
+ QPoint p(event.window.x, event.window.y);
+ QPoint globalPos = globalPoint(event);
+ Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons);
+
+ IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
+ IDirectFBWindow *window;
+ layer->GetWindow(layer,event.window.window_id,&window);
+
+ long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
+
+ if (event.window.type == DWET_BUTTONDOWN) {
+ window->GrabPointer(window);
+ } else if (event.window.type == DWET_BUTTONUP) {
+ window->UngrabPointer(window);
+ }
+ QWidget *tlw = m_tlwMap.value(event.window.window_id);
+ QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons);
+}
+
+void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
+{
+ QPoint p(event.window.cx, event.window.cy);
+ QPoint globalPos = globalPoint(event);
+ long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
+ QWidget *tlw = m_tlwMap.value(event.window.window_id);
+ QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos,
+ event.window.step*120,
+ Qt::Vertical);
+}
+
+void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
+{
+ QEvent::Type type = QDirectFbConvenience::eventType(event.window.type);
+ Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol);
+ Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers);
+
+ long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000);
+
+ QChar character;
+ if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE)
+ character = QChar(event.window.key_symbol);
+ QWidget *tlw = m_tlwMap.value(event.window.window_id);
+ QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character);
+}
+
+void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event)
+{
+ QWidget *tlw = m_tlwMap.value(event.window.window_id);
+ switch (event.window.type) {
+ case DWET_ENTER:
+ QWindowSystemInterface::handleEnterEvent(tlw);
+ break;
+ case DWET_LEAVE:
+ QWindowSystemInterface::handleLeaveEvent(tlw);
+ break;
+ default:
+ break;
+ }
+}
+
+inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const
+{
+ IDirectFBWindow *window;
+ m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,event.window.window_id,&window);
+ int x,y;
+ window->GetPosition(window,&x,&y);
+ return QPoint(event.window.cx +x, event.window.cy + y);
+}
+
diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h
new file mode 100644
index 0000000..bca155f
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbinput.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBINPUT_H
+#define QDIRECTFBINPUT_H
+
+#include <QSemaphore>
+#include <QObject>
+#include <QHash>
+#include <QPoint>
+#include <QEvent>
+
+#include <QtGui/qwindowdefs.h>
+
+#include <directfb.h>
+
+class QDirectFbInput : public QObject
+{
+ Q_OBJECT
+public:
+ QDirectFbInput(QObject *parent);
+ void addWindow(DFBWindowID id, QWidget *tlw);
+ void removeWindow(WId wId);
+
+public slots:
+ void runInputEventLoop();
+ void stopInputEventLoop();
+ void handleEvents();
+
+private:
+ void handleMouseEvents(const DFBEvent &event);
+ void handleWheelEvent(const DFBEvent &event);
+ void handleKeyEvents(const DFBEvent &event);
+ void handleEnterLeaveEvents(const DFBEvent &event);
+ inline QPoint globalPoint(const DFBEvent &event) const;
+
+
+ IDirectFB *m_dfbInterface;
+ IDirectFBDisplayLayer *m_dfbDisplayLayer;
+ IDirectFBEventBuffer *m_eventBuffer;
+
+ bool m_shouldStop;
+ QSemaphore m_waitStop;
+
+ QHash<DFBWindowID,QWidget *>m_tlwMap;
+};
+
+#endif // QDIRECTFBINPUT_H
diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp
new file mode 100644
index 0000000..8639bdb
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbintegration.h"
+#include "qdirectfbwindowsurface.h"
+#include "qdirectfbblitter.h"
+#include "qdirectfbconvenience.h"
+#include "qdirectfbcursor.h"
+#include "qdirectfbwindow.h"
+
+#include "qgenericunixfontdatabase.h"
+
+#include <private/qwindowsurface_raster_p.h>
+#include <private/qpixmap_raster_p.h>
+
+#include <QtGui/private/qpixmap_blitter_p.h>
+#include <QtGui/private/qpixmapdata_p.h>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QThread>
+
+QT_BEGIN_NAMESPACE
+
+QDirectFbScreen::QDirectFbScreen(int display)
+ :QPlatformScreen()
+{
+ m_layer = QDirectFbConvenience::dfbDisplayLayer(display);
+ m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED);
+
+ DFBDisplayLayerConfig config;
+ m_layer->GetConfiguration(m_layer, &config);
+
+ m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps);
+ m_geometry = QRect(0,0,config.width,config.height);
+ const int dpi = 72;
+ const qreal inch = 25.4;
+ m_depth = QDirectFbConvenience::colorDepthForSurface(config.pixelformat);
+ m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi));
+
+ cursor = new QDirectFBCursor(this);
+}
+
+QDirectFbScreen::~QDirectFbScreen()
+{
+}
+
+QDirectFbIntegration::QDirectFbIntegration()
+ : mFontDb(new QGenericUnixFontDatabase())
+{
+ const QStringList args = QCoreApplication::arguments();
+ int argc = args.size();
+ char **argv = new char*[argc];
+
+ for (int i = 0; i < argc; ++i)
+ argv[i] = qstrdup(args.at(i).toLocal8Bit().constData());
+
+ DFBResult result = DirectFBInit(&argc, &argv);
+ if (result != DFB_OK) {
+ DirectFBError("QDirectFBScreen: error initializing DirectFB",
+ result);
+ }
+ delete[] argv;
+
+
+ QDirectFbScreen *primaryScreen = new QDirectFbScreen(0);
+ mScreens.append(primaryScreen);
+
+ mInputRunner = new QThread;
+ mInput = new QDirectFbInput(0);
+ mInput->moveToThread(mInputRunner);
+ QObject::connect(mInputRunner,SIGNAL(started()),mInput,SLOT(runInputEventLoop()));
+ mInputRunner->start();
+}
+
+QDirectFbIntegration::~QDirectFbIntegration()
+{
+ mInput->stopInputEventLoop();
+ delete mInputRunner;
+ delete mInput;
+}
+
+QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ if (type == QPixmapData::BitmapType)
+ return new QRasterPixmapData(type);
+ else
+ return new QDirectFbBlitterPixmapData;
+}
+
+QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+ QDirectFbInput *input = const_cast<QDirectFbInput *>(mInput);//gah
+ return new QDirectFbWindow(widget,input);
+}
+
+QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId winId) const
+{
+ return new QDirectFbWindowSurface(widget,winId);
+}
+
+QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h
new file mode 100644
index 0000000..965bdd2
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbintegration.h
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QPLATFORMINTEGRATION_DIRECTFB_H
+#define QPLATFORMINTEGRATION_DIRECTFB_H
+
+#include "qdirectfbinput.h"
+
+#include <QtGui/QPlatformIntegration>
+#include <directfb.h>
+#include <directfb_version.h>
+
+QT_BEGIN_NAMESPACE
+
+class QThread;
+class QDirectFBCursor;
+
+class QDirectFbScreen : public QPlatformScreen
+{
+Q_OBJECT
+public:
+ QDirectFbScreen(int display);
+ ~QDirectFbScreen();
+
+ QRect geometry() const { return m_geometry; }
+ int depth() const { return m_depth; }
+ QImage::Format format() const { return m_format; }
+ QSize physicalSize() const { return m_physicalSize; }
+
+public:
+ QRect m_geometry;
+ int m_depth;
+ QImage::Format m_format;
+ QSize m_physicalSize;
+
+ IDirectFBDisplayLayer *m_layer;
+
+private:
+ QDirectFBCursor * cursor;
+
+};
+
+class QDirectFbIntegration : public QPlatformIntegration
+{
+public:
+ QDirectFbIntegration();
+ ~QDirectFbIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+private:
+ QList<QPlatformScreen *> mScreens;
+ QDirectFbInput *mInput;
+ QThread *mInputRunner;
+ QPlatformFontDatabase *mFontDb;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp
new file mode 100644
index 0000000..1cd23ad
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp
@@ -0,0 +1,191 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbwindow.h"
+#include "qdirectfbinput.h"
+#include "qdirectfbglcontext.h"
+
+#include <QWidget>
+
+#include "qdirectfbwindowsurface.h"
+
+#include <directfb.h>
+
+QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler)
+ : QPlatformWindow(tlw), m_inputHandler(inputhandler), m_context(0)
+{
+ IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
+ DFBDisplayLayerConfig layerConfig;
+ layer->GetConfiguration(layer,&layerConfig);
+
+ DFBWindowDescription description;
+ memset(&description,0,sizeof(DFBWindowDescription));
+ description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS
+#if DIRECTFB_MINOR_VERSION >= 1
+ |DWDESC_OPTIONS
+#endif
+ |DWDESC_CAPS);
+ description.width = tlw->rect().width();
+ description.height = tlw->rect().height();
+ description.posx = tlw->rect().x();
+ description.posy = tlw->rect().y();
+
+ if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED)
+ description.surface_caps = DSCAPS_PREMULTIPLIED;
+ description.pixelformat = layerConfig.pixelformat;
+
+#if DIRECTFB_MINOR_VERSION >= 1
+ description.options = DFBWindowOptions(DWOP_ALPHACHANNEL);
+#endif
+ description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL);
+ description.surface_caps = DSCAPS_PREMULTIPLIED;
+
+ DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow);
+ if (result != DFB_OK) {
+ DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result);
+ }
+
+ m_dfbWindow->SetOpacity(m_dfbWindow,0xff);
+
+ setVisible(widget()->isVisible());
+
+ DFBWindowID id;
+ m_dfbWindow->GetID(m_dfbWindow, &id);
+ m_inputHandler->addWindow(id,tlw);
+}
+
+QDirectFbWindow::~QDirectFbWindow()
+{
+ m_inputHandler->removeWindow(winId());
+ m_dfbWindow->Destroy(m_dfbWindow);
+}
+
+void QDirectFbWindow::setGeometry(const QRect &rect)
+{
+ bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size());
+ QPlatformWindow::setGeometry(rect);
+ if (widget()->isVisible() && !(widget()->testAttribute(Qt::WA_DontShowOnScreen))) {
+ m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(),
+ rect.width(), rect.height());
+
+ //Hack. When moving since the WindowSurface of a window becomes invalid when moved
+ if (isMoveOnly) { //if resize then windowsurface is updated.
+ widget()->windowSurface()->resize(rect.size());
+ widget()->update();
+ }
+ }
+}
+
+void QDirectFbWindow::setOpacity(qreal level)
+{
+ const quint8 windowOpacity = quint8(level * 0xff);
+ m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity);
+}
+
+void QDirectFbWindow::setVisible(bool visible)
+{
+ if (visible) {
+ int x = geometry().x();
+ int y = geometry().y();
+ m_dfbWindow->MoveTo(m_dfbWindow,x,y);
+ } else {
+ IDirectFBDisplayLayer *displayLayer;
+ QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer);
+
+ DFBDisplayLayerConfig config;
+ displayLayer->GetConfiguration(displayLayer,&config);
+ m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1);
+ }
+}
+
+Qt::WindowFlags QDirectFbWindow::setWindowFlags(Qt::WindowFlags flags)
+{
+ switch (flags & Qt::WindowType_Mask) {
+ case Qt::ToolTip: {
+ DFBWindowOptions options;
+ m_dfbWindow->GetOptions(m_dfbWindow,&options);
+ options = DFBWindowOptions(options | DWOP_GHOST);
+ m_dfbWindow->SetOptions(m_dfbWindow,options);
+ break; }
+ default:
+ break;
+ }
+
+ m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE);
+ return flags;
+}
+
+void QDirectFbWindow::raise()
+{
+ m_dfbWindow->RaiseToTop(m_dfbWindow);
+}
+
+void QDirectFbWindow::lower()
+{
+ m_dfbWindow->LowerToBottom(m_dfbWindow);
+}
+
+WId QDirectFbWindow::winId() const
+{
+ DFBWindowID id;
+ m_dfbWindow->GetID(m_dfbWindow, &id);
+ return WId(id);
+}
+
+QPlatformGLContext *QDirectFbWindow::glContext() const
+{
+ if (!m_context) {
+ IDirectFBSurface *surface;
+ DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&surface);
+ if (result != DFB_OK) {
+ qWarning("could not retrieve surface in QDirectFbWindow::glContext()");
+ return 0;
+ }
+ IDirectFBGL *gl;
+ result = surface->GetGL(surface,&gl);
+ if (result != DFB_OK) {
+ qWarning("could not retrieve IDirectFBGL in QDirectFbWindow::glContext()");
+ return 0;
+ }
+ const_cast<QDirectFbWindow *>(this)->m_context = new QDirectFbGLContext(gl);
+ }
+ return m_context;
+}
diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h
new file mode 100644
index 0000000..19491c5
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbwindow.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QDIRECTFBWINDOW_H
+#define QDIRECTFBWINDOW_H
+
+#include <QPlatformWindow>
+
+#include "qdirectfbconvenience.h"
+#include "qdirectfbinput.h"
+
+QT_BEGIN_NAMESPACE
+
+class QDirectFbWindow : public QPlatformWindow
+{
+public:
+ QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler);
+ ~QDirectFbWindow();
+
+ void setGeometry(const QRect &rect);
+ void setOpacity(qreal level);
+
+ void setVisible(bool visible);
+
+ Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags);
+ void raise();
+ void lower();
+ WId winId() const;
+
+ QPlatformGLContext *glContext() const;
+
+private:
+ IDirectFBWindow *m_dfbWindow;
+ QDirectFbInput *m_inputHandler;
+
+ QPlatformGLContext *m_context;
+};
+
+QT_END_NAMESPACE
+
+#endif // QDIRECTFBWINDOW_H
diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp
new file mode 100644
index 0000000..b1a8899
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp
@@ -0,0 +1,141 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qdirectfbwindowsurface.h"
+#include "qdirectfbintegration.h"
+#include "qdirectfbblitter.h"
+#include "qdirectfbconvenience.h"
+#include <private/qpixmap_blitter_p.h>
+
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId)
+ : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0)
+{
+
+ IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
+
+ DFBWindowID id(wId);
+ IDirectFBWindow *dfbWindow;
+
+ layer->GetWindow(layer,id,&dfbWindow);
+
+ dfbWindow->GetSurface(dfbWindow,&m_dfbSurface);
+//WRONGSIZE
+ QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface);
+ m_pmdata = new QDirectFbBlitterPixmapData;
+ m_pmdata->setBlittable(blitter);
+ m_pixmap = new QPixmap(m_pmdata);
+}
+
+QDirectFbWindowSurface::~QDirectFbWindowSurface()
+{
+ delete m_pixmap;
+}
+
+QPaintDevice *QDirectFbWindowSurface::paintDevice()
+{
+ return m_pixmap;
+}
+
+void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ m_pmdata->blittable()->unlock();
+
+ QVector<QRect> rects = region.rects();
+ for (int i = 0 ; i < rects.size(); i++) {
+ const QRect rect = rects.at(i);
+ DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()};
+ m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
+ }
+}
+
+void QDirectFbWindowSurface::resize(const QSize &size)
+{
+ QWindowSurface::resize(size);
+
+ //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable
+ m_dfbSurface->AddRef(m_dfbSurface);
+ QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface);
+ m_pmdata->setBlittable(blitter);
+}
+
+static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy)
+{
+ const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() };
+ surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy);
+ const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy };
+ surface->Flip(surface, &region, DFBSurfaceFlipFlags(DSFLIP_BLIT));
+}
+
+bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy)
+{
+ m_pmdata->blittable()->unlock();
+
+ if (!m_dfbSurface || area.isEmpty())
+ return false;
+ m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX);
+ if (area.rectCount() == 1) {
+ scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy);
+ } else {
+ const QVector<QRect> rects = area.rects();
+ const int n = rects.size();
+ for (int i=0; i<n; ++i) {
+ scrollSurface(m_dfbSurface, rects.at(i), dx, dy);
+ }
+ }
+ return true;
+}
+
+void QDirectFbWindowSurface::beginPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+void QDirectFbWindowSurface::endPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h
new file mode 100644
index 0000000..aaa74d4
--- /dev/null
+++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QWINDOWSURFACE_DIRECTFB_H
+#define QWINDOWSURFACE_DIRECTFB_H
+
+#include <QtGui/private/qwindowsurface_p.h>
+#include <private/qpixmap_blitter_p.h>
+
+#include <directfb.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDirectFbWindowSurface : public QWindowSurface
+{
+public:
+ QDirectFbWindowSurface(QWidget *window, WId wid);
+ ~QDirectFbWindowSurface();
+
+ QPaintDevice *paintDevice();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void resize (const QSize &size);
+ bool scroll(const QRegion &area, int dx, int dy);
+
+ void beginPaint(const QRegion &region);
+ void endPaint(const QRegion &region);
+
+private:
+ void lockSurfaceToImage();
+
+ QPixmap *m_pixmap;
+ QBlittablePixmapData *m_pmdata;
+
+ IDirectFBSurface *m_dfbSurface;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp
new file mode 100644
index 0000000..b203fe8
--- /dev/null
+++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp
@@ -0,0 +1,316 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglconvenience.h"
+
+QT_BEGIN_NAMESPACE
+
+QVector<EGLint> q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format)
+{
+ int redSize = format.redBufferSize();
+ int greenSize = format.greenBufferSize();
+ int blueSize = format.blueBufferSize();
+ int alphaSize = format.alphaBufferSize();
+ int depthSize = format.depthBufferSize();
+ int stencilSize = format.stencilBufferSize();
+ int sampleCount = format.samples();
+
+ // QPlatformWindowFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that
+ // type has been requested. So we must check QPlatformWindowFormat's booleans too if size is -1:
+ if (format.alpha() && alphaSize <= 0)
+ alphaSize = 1;
+ if (format.depth() && depthSize <= 0)
+ depthSize = 1;
+ if (format.stencil() && stencilSize <= 0)
+ stencilSize = 1;
+ if (format.sampleBuffers() && sampleCount <= 0)
+ sampleCount = 1;
+
+ // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide
+ // the best performance. The EGL config selection algorithm is a bit stange in this regard:
+ // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard
+ // 32-bit configs completely from the selection. So it then comes to the sorting algorithm.
+ // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort
+ // order is special and described as "by larger _total_ number of color bits.". So EGL will
+ // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on
+ // to say "If the requested number of bits in attrib_list for a particular component is 0,
+ // then the number of bits for that component is not considered". This part of the spec also
+ // seems to imply that setting the red/green/blue bits to zero means none of the components
+ // are considered and EGL disregards the entire sorting rule. It then looks to the next
+ // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being
+ // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are
+ // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit,
+ // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that
+ // if the application sets the red/green/blue size to 5/6/5 on the QPlatformWindowFormat,
+ // they will probably get a 32-bit config, even when there's an RGB565 config available.
+
+ // Now normalize the values so -1 becomes 0
+ redSize = redSize > 0 ? redSize : 0;
+ greenSize = greenSize > 0 ? greenSize : 0;
+ blueSize = blueSize > 0 ? blueSize : 0;
+ alphaSize = alphaSize > 0 ? alphaSize : 0;
+ depthSize = depthSize > 0 ? depthSize : 0;
+ stencilSize = stencilSize > 0 ? stencilSize : 0;
+ sampleCount = sampleCount > 0 ? sampleCount : 0;
+
+ QVector<EGLint> configAttributes;
+
+ configAttributes.append(EGL_RED_SIZE);
+ configAttributes.append(redSize);
+
+ configAttributes.append(EGL_GREEN_SIZE);
+ configAttributes.append(greenSize);
+
+ configAttributes.append(EGL_BLUE_SIZE);
+ configAttributes.append(blueSize);
+
+ configAttributes.append(EGL_ALPHA_SIZE);
+ configAttributes.append(alphaSize);
+
+ configAttributes.append(EGL_DEPTH_SIZE);
+ configAttributes.append(depthSize);
+
+ configAttributes.append(EGL_STENCIL_SIZE);
+ configAttributes.append(stencilSize);
+
+ configAttributes.append(EGL_SAMPLES);
+ configAttributes.append(sampleCount);
+
+ configAttributes.append(EGL_SAMPLE_BUFFERS);
+ configAttributes.append(sampleCount? 1:0);
+
+ return configAttributes;
+}
+
+bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes)
+{
+ int i = -1;
+ // Reduce the complexity of a configuration request to ask for less
+ // because the previous request did not result in success. Returns
+ // true if the complexity was reduced, or false if no further
+ // reductions in complexity are possible.
+
+ i = configAttributes->indexOf(EGL_SWAP_BEHAVIOR);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ }
+
+#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
+ // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't
+ // find a config which supports pre-multiplied formats, remove the flag on the surface type:
+
+ i = configAttributes->indexOf(EGL_SURFACE_TYPE);
+ if (i >= 0) {
+ EGLint surfaceType = configAttributes->at(i +1);
+ if (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) {
+ surfaceType ^= EGL_VG_ALPHA_FORMAT_PRE_BIT;
+ configAttributes->replace(i+1,surfaceType);
+ return true;
+ }
+ }
+#endif
+
+ // EGL chooses configs with the highest color depth over
+ // those with smaller (but faster) lower color depths. One
+ // way around this is to set EGL_BUFFER_SIZE to 16, which
+ // trumps the others. Of course, there may not be a 16-bit
+ // config available, so it's the first restraint we remove.
+ i = configAttributes->indexOf(EGL_BUFFER_SIZE);
+ if (i >= 0) {
+ if (configAttributes->at(i+1) == 16) {
+ configAttributes->remove(i,2);
+ return true;
+ }
+ }
+
+ i = configAttributes->indexOf(EGL_SAMPLE_BUFFERS);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ i = configAttributes->indexOf(EGL_SAMPLES);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ }
+ return true;
+ }
+
+ i = configAttributes->indexOf(EGL_ALPHA_SIZE);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+#if defined(EGL_BIND_TO_TEXTURE_RGBA) && defined(EGL_BIND_TO_TEXTURE_RGB)
+ i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGBA);
+ if (i >= 0) {
+ configAttributes->replace(i,EGL_BIND_TO_TEXTURE_RGB);
+ configAttributes->replace(i+1,TRUE);
+
+ }
+#endif
+ return true;
+ }
+
+ i = configAttributes->indexOf(EGL_STENCIL_SIZE);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ return true;
+ }
+ i = configAttributes->indexOf(EGL_DEPTH_SIZE);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ return true;
+ }
+#ifdef EGL_BIND_TO_TEXTURE_RGB
+ i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGB);
+ if (i >= 0) {
+ configAttributes->remove(i,2);
+ return true;
+ }
+#endif
+
+ return false;
+}
+
+EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format)
+{
+ EGLConfig cfg = 0;
+ QVector<EGLint> configureAttributes = q_createConfigAttributesFromFormat(format);
+ configureAttributes.append(EGL_SURFACE_TYPE); //we only support eglconfigs for windows for now
+ configureAttributes.append(EGL_WINDOW_BIT);
+
+ configureAttributes.append(EGL_RENDERABLE_TYPE);
+ if (format.windowApi() == QPlatformWindowFormat::OpenVG) {
+ configureAttributes.append(EGL_OPENVG_BIT);
+ } else {
+ configureAttributes.append(EGL_OPENGL_ES2_BIT);
+ }
+ configureAttributes.append(EGL_NONE);
+
+ do {
+ // Get the number of matching configurations for this set of properties.
+ EGLint matching = 0;
+ if (!eglChooseConfig(display, configureAttributes.constData(), 0, 0, &matching) || !matching)
+ continue;
+
+// // If we want the best pixel format, then return the first
+// // matching configuration.
+// if (match == QEgl::BestPixelFormat) {
+// eglChooseConfig(display, props.properties(), &cfg, 1, &matching);
+// if (matching < 1)
+// continue;
+// return cfg;
+// }
+
+ // Fetch all of the matching configurations and find the
+ // first that matches the pixel format we wanted.
+ int i = configureAttributes.indexOf(EGL_RED_SIZE);
+ int confAttrRed = configureAttributes.at(i+1);
+ i = configureAttributes.indexOf(EGL_GREEN_SIZE);
+ int confAttrGreen = configureAttributes.at(i+1);
+ i = configureAttributes.indexOf(EGL_BLUE_SIZE);
+ int confAttrBlue = configureAttributes.at(i+1);
+ i = configureAttributes.indexOf(EGL_ALPHA_SIZE);
+ int confAttrAlpha = configureAttributes.at(i+1);
+
+ EGLint size = matching;
+ EGLConfig *configs = new EGLConfig [size];
+ eglChooseConfig(display, configureAttributes.constData(), configs, size, &matching);
+ for (EGLint index = 0; index < size; ++index) {
+ EGLint red, green, blue, alpha;
+ eglGetConfigAttrib(display, configs[index], EGL_RED_SIZE, &red);
+ eglGetConfigAttrib(display, configs[index], EGL_GREEN_SIZE, &green);
+ eglGetConfigAttrib(display, configs[index], EGL_BLUE_SIZE, &blue);
+ eglGetConfigAttrib(display, configs[index], EGL_ALPHA_SIZE, &alpha);
+ if (red == confAttrRed &&
+ green == confAttrGreen &&
+ blue == confAttrBlue &&
+ (confAttrAlpha == 0 ||
+ alpha == confAttrAlpha)) {
+ cfg = configs[index];
+ delete [] configs;
+ return cfg;
+ }
+ }
+ delete [] configs;
+ } while (q_reduceConfigAttributes(&configureAttributes));
+ qWarning("Cant find EGLConfig, returning null config");
+ return 0;
+}
+
+QPlatformWindowFormat qt_qPlatformWindowFormatFromConfig(EGLDisplay display, const EGLConfig config)
+{
+ QPlatformWindowFormat format;
+ EGLint redSize = 0;
+ EGLint greenSize = 0;
+ EGLint blueSize = 0;
+ EGLint alphaSize = 0;
+ EGLint depthSize = 0;
+ EGLint stencilSize = 0;
+ EGLint sampleCount = 0;
+ EGLint level = 0;
+
+ eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize);
+ eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize);
+ eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize);
+ eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize);
+ eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize);
+ eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize);
+ eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount);
+ eglGetConfigAttrib(display, config, EGL_LEVEL, &level);
+
+ format.setRedBufferSize(redSize);
+ format.setGreenBufferSize(greenSize);
+ format.setBlueBufferSize(blueSize);
+ format.setAlphaBufferSize(alphaSize);
+ format.setDepthBufferSize(depthSize);
+ format.setStencilBufferSize(stencilSize);
+ format.setSamples(sampleCount);
+ format.setDirectRendering(true); // All EGL contexts are direct-rendered
+ format.setRgba(true); // EGL doesn't support colour index rendering
+ format.setStereo(false); // EGL doesn't support stereo buffers
+ format.setAccumBufferSize(0); // EGL doesn't support accululation buffers
+
+ // Clear the EGL error state because some of the above may
+ // have errored out because the attribute is not applicable
+ // to the surface type. Such errors don't matter.
+ eglGetError();
+
+ return format;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h
new file mode 100644
index 0000000..604262b
--- /dev/null
+++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QEGLCONVENIENCE_H
+#define QEGLCONVENIENCE_H
+
+
+#include <QtGui/QPlatformWindowFormat>
+#include <QtCore/QVector>
+
+#include <EGL/egl.h>
+QT_BEGIN_NAMESPACE
+
+QVector<EGLint> q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format);
+bool q_reduceConfigAttributes(QVector<EGLint> *configAttributes);
+EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format);
+QPlatformWindowFormat qt_qPlatformWindowFormatFromConfig(EGLDisplay display, const EGLConfig config);
+
+QT_END_NAMESPACE
+
+#endif //QEGLCONVENIENCE_H
diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
new file mode 100644
index 0000000..ae3b539
--- /dev/null
+++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
@@ -0,0 +1,155 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglplatformcontext.h"
+
+
+#include <QtGui/QPlatformWindow>
+
+#include "qeglconvenience.h"
+
+#include <EGL/egl.h>
+
+QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi)
+ : QPlatformGLContext()
+ , m_eglDisplay(display)
+ , m_eglSurface(surface)
+ , m_eglApi(eglApi)
+{
+ if (m_eglSurface == EGL_NO_SURFACE) {
+ qWarning("Createing QEGLPlatformContext with no surface");
+ }
+
+ eglBindAPI(m_eglApi);
+ m_eglContext = eglCreateContext(m_eglDisplay,config, 0,contextAttrs);
+ if (m_eglContext == EGL_NO_CONTEXT) {
+ qWarning("Could not create the egl context\n");
+ eglTerminate(m_eglDisplay);
+ qFatal("EGL error");
+ }
+
+ m_windowFormat = qt_qPlatformWindowFormatFromConfig(display,config);
+}
+
+QEGLPlatformContext::~QEGLPlatformContext()
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglContext::~QEglContext(): %p\n",this);
+#endif
+ if (m_eglSurface != EGL_NO_SURFACE) {
+ doneCurrent();
+ eglDestroySurface(m_eglDisplay, m_eglSurface);
+ m_eglSurface = EGL_NO_SURFACE;
+ }
+
+ if (m_eglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(m_eglDisplay, m_eglContext);
+ m_eglContext = EGL_NO_CONTEXT;
+ }
+}
+
+void QEGLPlatformContext::makeCurrent()
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglContext::makeCurrent: %p\n",this);
+#endif
+ eglBindAPI(m_eglApi);
+ bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext);
+ if (!ok)
+ qWarning("QEGLPlatformContext::makeCurrent: eglError: %d, this: %p \n", eglGetError(), this);
+#ifdef QEGL_EXTRA_DEBUG
+ static bool showDebug = true;
+ if (showDebug) {
+ showDebug = false;
+ const char *str = (const char*)glGetString(GL_VENDOR);
+ qWarning("Vendor %s\n", str);
+ str = (const char*)glGetString(GL_RENDERER);
+ qWarning("Renderer %s\n", str);
+ str = (const char*)glGetString(GL_VERSION);
+ qWarning("Version %s\n", str);
+
+ str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION);
+ qWarning("Extensions %s\n",str);
+
+ str = (const char*)glGetString(GL_EXTENSIONS);
+ qWarning("Extensions %s\n", str);
+
+ }
+#endif
+}
+void QEGLPlatformContext::doneCurrent()
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglContext::doneCurrent:%p\n",this);
+#endif
+ eglBindAPI(m_eglApi);
+ bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ if (!ok)
+ qWarning("QEGLPlatformContext::doneCurrent(): eglError: %d, this: %p \n", eglGetError(), this);
+}
+void QEGLPlatformContext::swapBuffers()
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglContext::swapBuffers:%p\n",this);
+#endif
+ eglBindAPI(m_eglApi);
+ bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface);
+ if (!ok)
+ qWarning("QEGLPlatformContext::swapBuffers(): eglError: %d, this: %p \n", eglGetError(), this);
+}
+void* QEGLPlatformContext::getProcAddress(const QString& procName)
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglContext::getProcAddress%p\n",this);
+#endif
+ eglBindAPI(m_eglApi);
+ return (void *)eglGetProcAddress(qPrintable(procName));
+}
+
+void QEGLPlatformContext::makeDefaultSaredContext()
+{
+ setDefaultSharedContext(this);
+}
+
+QPlatformWindowFormat QEGLPlatformContext::platformWindowFormat() const
+{
+ return m_windowFormat;
+}
diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h
new file mode 100644
index 0000000..ae1a891
--- /dev/null
+++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QOPENKODEGLINTEGRATION_H
+#define QOPENKODEGLINTEGRATION_H
+
+#include <QtGui/QPlatformGLContext>
+#include <EGL/egl.h>
+
+class QEGLPlatformContext : public QPlatformGLContext
+{
+public:
+ QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi);
+ ~QEGLPlatformContext();
+
+ void makeCurrent();
+ void doneCurrent();
+ void swapBuffers();
+ void* getProcAddress(const QString& procName);
+
+ void makeDefaultSaredContext();
+
+ QPlatformWindowFormat platformWindowFormat() const;
+private:
+ EGLContext m_eglContext;
+ EGLDisplay m_eglDisplay;
+ EGLSurface m_eglSurface;
+ EGLenum m_eglApi;
+
+ QPlatformWindowFormat m_windowFormat;
+};
+
+#endif //QOPENKODEGLINTEGRATION_H
diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro
new file mode 100644
index 0000000..7ad8fd9
--- /dev/null
+++ b/src/plugins/platforms/eglfs/eglfs.pro
@@ -0,0 +1,31 @@
+TARGET = qeglfs
+TEMPLATE = lib
+CONFIG += plugin
+
+QT += opengl
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+#DEFINES += QEGL_EXTRA_DEBUG
+
+#DEFINES += Q_OPENKODE
+
+SOURCES = main.cpp \
+ qeglfsintegration.cpp \
+ ../eglconvenience/qeglconvenience.cpp \
+ ../eglconvenience/qeglplatformcontext.cpp \
+ qeglfswindow.cpp \
+ qeglfswindowsurface.cpp \
+ qeglfsscreen.cpp
+
+HEADERS = qeglfsintegration.h \
+ ../eglconvenience/qeglconvenience.h \
+ ../eglconvenience/qeglplatformcontext.h \
+ qeglfswindow.h \
+ qeglfswindowsurface.h \
+ qeglfsscreen.h
+
+include(../fontdatabases/genericunix/genericunix.pri)
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/main.cpp
new file mode 100644
index 0000000..d0a82b7
--- /dev/null
+++ b/src/plugins/platforms/eglfs/main.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 <QtGui/QPlatformIntegrationPlugin>
+#include "qeglfsintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEglIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QEglIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "EglFS";
+ return list;
+}
+
+QPlatformIntegration* QEglIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "eglfs")
+ return new QEglFSIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(eglintegration, QEglIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
new file mode 100644
index 0000000..a48fde8
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglfsintegration.h"
+
+#include "qeglfswindow.h"
+#include "qeglfswindowsurface.h"
+
+#include <QtGui/QPlatformWindow>
+#include <QtGui/QPlatformWindowFormat>
+#include <QtOpenGL/private/qpixmapdata_gl_p.h>
+
+#include "qgenericunixfontdatabase.h"
+
+#include <EGL/egl.h>
+
+QT_BEGIN_NAMESPACE
+
+QEglFSIntegration::QEglFSIntegration()
+ : mFontDb(new QGenericUnixFontDatabase())
+{
+ m_primaryScreen = new QEglFSScreen(EGL_DEFAULT_DISPLAY);
+
+ mScreens.append(m_primaryScreen);
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglIntegration\n");
+#endif
+}
+
+QPixmapData *QEglFSIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglIntegration::createPixmapData %d\n", type);
+#endif
+ return new QGLPixmapData(type);
+}
+
+QPlatformWindow *QEglFSIntegration::createPlatformWindow(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglIntegration::createPlatformWindow %p\n",widget);
+#endif
+ return new QEglFSWindow(widget, m_primaryScreen);
+}
+
+
+QWindowSurface *QEglFSIntegration::createWindowSurface(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglIntegration::createWindowSurface %p\n",widget);
+#endif
+ return new QEglFSWindowSurface(m_primaryScreen,widget);
+}
+
+QPlatformFontDatabase *QEglFSIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h
new file mode 100644
index 0000000..0342539
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 EGLINTEGRATION_H
+#define EGLINTEGRATION_H
+
+#include "qeglfsscreen.h"
+
+#include <QtGui/QPlatformIntegration>
+#include <QtGui/QPlatformScreen>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSIntegration : public QPlatformIntegration
+{
+public:
+ QEglFSIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+private:
+ QPlatformFontDatabase *mFontDb;
+ QList<QPlatformScreen *> mScreens;
+ QEglFSScreen *m_primaryScreen;
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
new file mode 100644
index 0000000..9a40b86
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
@@ -0,0 +1,203 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglfsscreen.h"
+
+#include "../eglconvenience/qeglconvenience.h"
+#include "../eglconvenience/qeglplatformcontext.h"
+
+#ifdef Q_OPENKODE
+#include <KD/kd.h>
+#include <KD/NV_initialize.h>
+#endif //Q_OPENKODE
+
+QT_BEGIN_NAMESPACE
+
+// #define QEGL_EXTRA_DEBUG
+
+#ifdef QEGL_EXTRA_DEBUG
+struct AttrInfo { EGLint attr; const char *name; };
+static struct AttrInfo attrs[] = {
+ {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"},
+ {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"},
+ {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"},
+ {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"},
+ {EGL_RED_SIZE, "EGL_RED_SIZE"},
+ {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"},
+ {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"},
+ {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"},
+ {EGL_CONFIG_ID, "EGL_CONFIG_ID"},
+ {EGL_LEVEL, "EGL_LEVEL"},
+ {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"},
+ {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"},
+ {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"},
+ {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"},
+ {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"},
+ {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"},
+ {EGL_SAMPLES, "EGL_SAMPLES"},
+ {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"},
+ {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"},
+ {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"},
+ {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"},
+ {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"},
+ {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"},
+ {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"},
+ {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"},
+ {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"},
+ {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"},
+ {-1, 0}};
+#endif //QEGL_EXTRA_DEBUG
+
+QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display)
+ : m_depth(32), m_format(QImage::Format_ARGB32_Premultiplied), m_platformContext(0)
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglScreen %p\n", this);
+#endif
+
+ EGLint major, minor;
+#ifdef QEGL_EXTRA_DEBUG
+ EGLint index;
+#endif
+ if (!eglBindAPI(EGL_OPENGL_ES_API)) {
+ qWarning("Could not bind GL_ES API\n");
+ qFatal("EGL error");
+ }
+
+ m_dpy = eglGetDisplay(display);
+ if (m_dpy == EGL_NO_DISPLAY) {
+ qWarning("Could not open egl display\n");
+ qFatal("EGL error");
+ }
+ qWarning("Opened display %p\n", m_dpy);
+
+ if (!eglInitialize(m_dpy, &major, &minor)) {
+ qWarning("Could not initialize egl display\n");
+ qFatal("EGL error");
+ }
+
+ qWarning("Initialized display %d %d\n", major, minor);
+
+ QPlatformWindowFormat platformFormat;
+ platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL);
+
+ QByteArray depthString = qgetenv("QT_QPA_EGLFS_DEPTH");
+ if (depthString.toInt() == 16) {
+ platformFormat.setDepth(16);
+ platformFormat.setRedBufferSize(5);
+ platformFormat.setGreenBufferSize(6);
+ platformFormat.setBlueBufferSize(5);
+ m_depth = 16;
+ m_format = QImage::Format_RGB16;
+ } else {
+ platformFormat.setDepth(32);
+ platformFormat.setRedBufferSize(8);
+ platformFormat.setGreenBufferSize(8);
+ platformFormat.setBlueBufferSize(8);
+ }
+
+ if (!qgetenv("QT_QPA_EGLFS_MULTISAMPLE").isEmpty()) {
+ platformFormat.setSampleBuffers(true);
+ }
+
+ int swapInterval = 1;
+ QByteArray swapIntervalString = qgetenv("QT_QPA_EGLFS_SWAPINTERVAL");
+ if (!swapIntervalString.isEmpty()) {
+ bool ok;
+ swapInterval = swapIntervalString.toInt(&ok);
+ if (!ok)
+ swapInterval = 1;
+ }
+
+ EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat);
+ eglSwapInterval(display, swapInterval);
+
+ EGLNativeWindowType eglWindow = 0;
+#ifdef Q_OPENKODE
+ if (kdInitializeNV() == KD_ENOTINITIALIZED) {
+ qFatal("Did not manage to initialize openkode");
+ }
+ KDWindow *window = kdCreateWindow(m_dpy,config,0);
+
+ kdRealizeWindow(window,&eglWindow);
+#endif
+
+ m_surface = eglCreateWindowSurface(m_dpy, config, eglWindow, NULL);
+ if (m_surface == EGL_NO_SURFACE) {
+ qWarning("Could not create the egl surface: error = 0x%x\n", eglGetError());
+ eglTerminate(m_dpy);
+ qFatal("EGL error");
+ }
+ // qWarning("Created surface %dx%d\n", w, h);
+
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("Configuration %d matches requirements\n", (int)config);
+
+ for (index = 0; attrs[index].attr != -1; ++index) {
+ EGLint value;
+ if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) {
+ qWarning("\t%s: %d\n", attrs[index].name, (int)value);
+ }
+ }
+ qWarning("\n");
+#endif
+
+ EGLint temp;
+ EGLint attribList[32];
+
+ temp = 0;
+
+ attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION;
+ attribList[temp++] = 2; // GLES version 2
+ attribList[temp++] = EGL_NONE;
+
+ m_platformContext = new QEGLPlatformContext(m_dpy,config,attribList,m_surface,EGL_OPENGL_ES_API);
+
+// qWarning("Created platformcontext");
+ EGLint w,h;
+
+ eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w);
+ eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h);
+
+ m_geometry = QRect(0,0,w,h);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h
new file mode 100644
index 0000000..9ed1b04
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QEGLSCREEN_H
+#define QEGLSCREEN_H
+
+#include <QPlatformScreen>
+
+
+#include <EGL/egl.h>
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformGLContext;
+
+class QEglFSScreen : public QPlatformScreen //huh: FullScreenScreen ;) just to follow namespace
+{
+public:
+ QEglFSScreen(EGLNativeDisplayType display);
+ ~QEglFSScreen() {}
+
+ QRect geometry() const { return m_geometry; }
+ int depth() const { return m_depth; }
+ QImage::Format format() const { return m_format; }
+
+ QPlatformGLContext *platformContext() const { return m_platformContext; }
+
+private:
+ QRect m_geometry;
+ int m_depth;
+ QImage::Format m_format;
+ QPlatformGLContext *m_platformContext;
+ EGLDisplay m_dpy;
+ EGLSurface m_surface;
+};
+
+QT_END_NAMESPACE
+#endif // QEGLSCREEN_H
diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp
new file mode 100644
index 0000000..d0e15d3
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglfswindow.h"
+
+#include <QtGui/QWindowSystemInterface>
+
+QT_BEGIN_NAMESPACE
+
+QEglFSWindow::QEglFSWindow(QWidget *w, QEglFSScreen *screen)
+ : QPlatformWindow(w), m_screen(screen)
+{
+ static int serialNo = 0;
+ m_winid = ++serialNo;
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid));
+#endif
+}
+
+
+void QEglFSWindow::setGeometry(const QRect &)
+{
+ // We only support full-screen windows
+ QRect rect(m_screen->availableGeometry());
+ QWindowSystemInterface::handleGeometryChange(this->widget(), rect);
+
+ QPlatformWindow::setGeometry(rect);
+}
+
+WId QEglFSWindow::winId() const
+{
+ return m_winid;
+}
+
+
+
+QPlatformGLContext *QEglFSWindow::glContext() const
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglWindow::glContext %p\n", m_screen->platformContext());
+#endif
+ Q_ASSERT(m_screen);
+ return m_screen->platformContext();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h
new file mode 100644
index 0000000..43f185b
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfswindow.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QEGLWINDOW_H
+#define QEGLWINDOW_H
+
+#include "qeglfsintegration.h"
+#include "qeglfsscreen.h"
+
+
+#include <QPlatformWindow>
+#include <QtGui/QWidget>
+
+#include <EGL/egl.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSWindow : public QPlatformWindow
+{
+public:
+ QEglFSWindow(QWidget *w, QEglFSScreen *screen);
+
+ void setGeometry(const QRect &);
+ WId winId() const;
+
+ QPlatformGLContext *glContext() const;
+
+private:
+ QEglFSScreen *m_screen;
+ WId m_winid;
+};
+QT_END_NAMESPACE
+#endif // QEGLWINDOW_H
diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp
new file mode 100644
index 0000000..fcea4d3
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qeglfswindowsurface.h"
+
+#include <QtGui/QPlatformGLContext>
+
+#include <QtOpenGL/private/qgl_p.h>
+#include <QtOpenGL/private/qglpaintdevice_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSPaintDevice : public QGLPaintDevice
+{
+public:
+ QEglFSPaintDevice(QEglFSScreen *screen, QWidget *widget)
+ :QGLPaintDevice(), m_screen(screen)
+ {
+ #ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglPaintDevice %p, %p, %p",this, screen, widget);
+ #endif
+ QGLFormat format;
+ m_context = new QGLContext(format, widget);
+ m_context->create();
+ }
+
+ QSize size() const { return m_screen->geometry().size(); }
+ QGLContext* context() const { return m_context;}
+
+ QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); }
+
+ void beginPaint(){
+ QGLPaintDevice::beginPaint();
+ }
+private:
+ QEglFSScreen *m_screen;
+ QGLContext *m_context;
+};
+
+
+QEglFSWindowSurface::QEglFSWindowSurface( QEglFSScreen *screen, QWidget *window )
+ :QWindowSurface(window)
+{
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglWindowSurface %p, %p", window, screen);
+#endif
+ m_paintDevice = new QEglFSPaintDevice(screen,window);
+}
+
+void QEglFSWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(region);
+ Q_UNUSED(offset);
+#ifdef QEGL_EXTRA_DEBUG
+ qWarning("QEglWindowSurface::flush %p",widget);
+#endif
+ widget->platformWindow()->glContext()->swapBuffers();
+}
+
+void QEglFSWindowSurface::resize(const QSize &size)
+{
+ Q_UNUSED(size);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.h b/src/plugins/platforms/eglfs/qeglfswindowsurface.h
new file mode 100644
index 0000000..f8aca40
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QEGLWINDOWSURFACE_H
+#define QEGLWINDOWSURFACE_H
+
+#include "qeglfsintegration.h"
+#include "qeglfswindow.h"
+
+#include <QtGui/private/qwindowsurface_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSWindowSurface : public QWindowSurface
+{
+public:
+ QEglFSWindowSurface(QEglFSScreen *screen, QWidget *window);
+ ~QEglFSWindowSurface() {}
+
+ QPaintDevice *paintDevice() { return m_paintDevice; }
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void resize(const QSize &size);
+private:
+ QPaintDevice *m_paintDevice;
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLWINDOWSURFACE_H
diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp
new file mode 100644
index 0000000..b000a18
--- /dev/null
+++ b/src/plugins/platforms/fb_base/fb_base.cpp
@@ -0,0 +1,507 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "fb_base.h"
+#include <qpainter.h>
+#include <qdebug.h>
+#include <qbitmap.h>
+#include <QPlatformCursor>
+#include <QWindowSystemInterface>
+
+QPlatformSoftwareCursor::QPlatformSoftwareCursor(QPlatformScreen *scr)
+ : QPlatformCursor(scr), currentRect(QRect()), prevRect(QRect())
+{
+ graphic = new QPlatformCursorImage(0, 0, 0, 0, 0, 0);
+ setCursor(Qt::ArrowCursor);
+}
+
+QRect QPlatformSoftwareCursor::getCurrentRect()
+{
+ QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(),
+ -graphic->hotspot().y());
+ rect.translate(QCursor::pos());
+ QPoint screenOffset = screen->geometry().topLeft();
+ rect.translate(-screenOffset); // global to local translation
+ return rect;
+}
+
+
+void QPlatformSoftwareCursor::pointerEvent(const QMouseEvent & e)
+{
+ Q_UNUSED(e);
+ QPoint screenOffset = screen->geometry().topLeft();
+ currentRect = getCurrentRect();
+ // global to local translation
+ if (onScreen || screen->geometry().intersects(currentRect.translated(screenOffset))) {
+ setDirty();
+ }
+}
+
+QRect QPlatformSoftwareCursor::drawCursor(QPainter & painter)
+{
+ dirty = false;
+ if (currentRect.isNull())
+ return QRect();
+
+ // We need this because the cursor might be dirty due to moving off screen
+ QPoint screenOffset = screen->geometry().topLeft();
+ // global to local translation
+ if (!currentRect.translated(screenOffset).intersects(screen->geometry()))
+ return QRect();
+
+ prevRect = currentRect;
+ painter.drawImage(prevRect, *graphic->image());
+ onScreen = true;
+ return prevRect;
+}
+
+QRect QPlatformSoftwareCursor::dirtyRect()
+{
+ if (onScreen) {
+ onScreen = false;
+ return prevRect;
+ }
+ return QRect();
+}
+
+void QPlatformSoftwareCursor::setCursor(Qt::CursorShape shape)
+{
+ graphic->set(shape);
+}
+
+void QPlatformSoftwareCursor::setCursor(const QImage &image, int hotx, int hoty)
+{
+ graphic->set(image, hotx, hoty);
+}
+
+void QPlatformSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY)
+{
+ graphic->set(data, mask, width, height, hotX, hotY);
+}
+
+void QPlatformSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget)
+{
+ Q_UNUSED(widget);
+ Qt::CursorShape shape = widgetCursor->shape();
+
+ if (shape == Qt::BitmapCursor) {
+ // application supplied cursor
+ QPoint spot = widgetCursor->hotSpot();
+ setCursor(widgetCursor->pixmap().toImage(), spot.x(), spot.y());
+ } else {
+ // system cursor
+ setCursor(shape);
+ }
+ currentRect = getCurrentRect();
+ QPoint screenOffset = screen->geometry().topLeft(); // global to local translation
+ if (onScreen || screen->geometry().intersects(currentRect.translated(screenOffset)))
+ setDirty();
+}
+
+QFbScreen::QFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false)
+{
+ mScreenImage = new QImage(mGeometry.size(), mFormat);
+ redrawTimer.setSingleShot(true);
+ redrawTimer.setInterval(0);
+ QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw()));
+}
+
+void QFbScreen::setGeometry(QRect rect)
+{
+ delete mScreenImage;
+ mGeometry = rect;
+ mScreenImage = new QImage(mGeometry.size(), mFormat);
+ delete compositePainter;
+ compositePainter = 0;
+ invalidateRectCache();
+}
+
+void QFbScreen::setDepth(int depth)
+{
+ mDepth = depth;
+}
+
+void QFbScreen::setPhysicalSize(QSize size)
+{
+ mPhysicalSize = size;
+}
+
+void QFbScreen::setFormat(QImage::Format format)
+{
+ mFormat = format;
+ delete mScreenImage;
+ mScreenImage = new QImage(mGeometry.size(), mFormat);
+ delete compositePainter;
+ compositePainter = 0;
+}
+
+QFbScreen::~QFbScreen()
+{
+ delete compositePainter;
+ delete mScreenImage;
+}
+
+void QFbScreen::setDirty(const QRect &rect)
+{
+ QRect intersection = rect.intersected(mGeometry);
+ QPoint screenOffset = mGeometry.topLeft();
+ repaintRegion += intersection.translated(-screenOffset); // global to local translation
+ if (!redrawTimer.isActive()) {
+ redrawTimer.start();
+ }
+}
+
+void QFbScreen::generateRects()
+{
+ cachedRects.clear();
+ QPoint screenOffset = mGeometry.topLeft();
+ QRegion remainingScreen(mGeometry.translated(-screenOffset)); // global to local translation
+
+ for (int i = 0; i < windowStack.length(); i++) {
+ if (remainingScreen.isEmpty())
+ break;
+ if (!windowStack[i]->visible())
+ continue;
+ if (windowStack[i]->widget()->isMinimized())
+ continue;
+
+ if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) {
+ QRect localGeometry = windowStack.at(i)->geometry().translated(-screenOffset); // global to local translation
+ remainingScreen -= localGeometry;
+ QRegion windowRegion(localGeometry);
+ windowRegion -= remainingScreen;
+ foreach(QRect rect, windowRegion.rects()) {
+ cachedRects += QPair<QRect, int>(rect, i);
+ }
+ }
+ }
+ foreach (QRect rect, remainingScreen.rects())
+ cachedRects += QPair<QRect, int>(rect, -1);
+ isUpToDate = true;
+ return;
+}
+
+
+
+QRegion QFbScreen::doRedraw()
+{
+ QPoint screenOffset = mGeometry.topLeft();
+
+ QRegion touchedRegion;
+ if (cursor && cursor->isDirty() && cursor->isOnScreen()) {
+ QRect lastCursor = cursor->dirtyRect();
+ repaintRegion += lastCursor;
+ }
+ if (repaintRegion.isEmpty() && (!cursor || !cursor->isDirty())) {
+ return touchedRegion;
+ }
+
+ QVector<QRect> rects = repaintRegion.rects();
+
+ if (!isUpToDate)
+ generateRects();
+
+ if (!compositePainter)
+ compositePainter = new QPainter(mScreenImage);
+ for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) {
+ QRegion rectRegion = rects[rectIndex];
+
+ for(int i = 0; i < cachedRects.length(); i++) {
+ QRect screenSubRect = cachedRects[i].first;
+ int layer = cachedRects[i].second;
+ QRegion intersect = rectRegion.intersected(screenSubRect);
+
+ if (intersect.isEmpty())
+ continue;
+
+ rectRegion -= intersect;
+
+ // we only expect one rectangle, but defensive coding...
+ foreach (QRect rect, intersect.rects()) {
+ bool firstLayer = true;
+ if (layer == -1) {
+ compositePainter->fillRect(rect, Qt::black);
+ firstLayer = false;
+ layer = windowStack.size() - 1;
+ }
+
+ for (int layerIndex = layer; layerIndex != -1; layerIndex--) {
+ if (!windowStack[layerIndex]->visible())
+ continue;
+ if (windowStack[layerIndex]->widget()->isMinimized())
+ continue;
+ QRect windowRect = windowStack[layerIndex]->geometry().translated(-screenOffset);
+ QRect windowIntersect = rect.translated(-windowRect.left(),
+ -windowRect.top());
+ compositePainter->drawImage(rect, windowStack[layerIndex]->surface->image(),
+ windowIntersect);
+ if (firstLayer) {
+ firstLayer = false;
+ }
+ }
+ }
+ }
+ }
+
+ QRect cursorRect;
+ if (cursor && (cursor->isDirty() || repaintRegion.intersects(cursor->lastPainted()))) {
+ cursorRect = cursor->drawCursor(*compositePainter);
+ touchedRegion += cursorRect;
+ }
+ touchedRegion += repaintRegion;
+ repaintRegion = QRegion();
+
+
+
+// qDebug() << "QFbScreen::doRedraw" << windowStack.size() << mScreenImage->size() << touchedRegion;
+
+
+ return touchedRegion;
+}
+
+void QFbScreen::addWindow(QFbWindow *surface)
+{
+ windowStack.prepend(surface);
+ surface->mScreens.append(this);
+ invalidateRectCache();
+ setDirty(surface->geometry());
+}
+
+void QFbScreen::removeWindow(QFbWindow * surface)
+{
+ windowStack.removeOne(surface);
+ surface->mScreens.removeOne(this);
+ invalidateRectCache();
+ setDirty(surface->geometry());
+}
+
+void QFbWindow::raise()
+{
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->raise(this);
+ ++i;
+ }
+}
+
+void QFbScreen::raise(QPlatformWindow * surface)
+{
+ QFbWindow *s = static_cast<QFbWindow *>(surface);
+ int index = windowStack.indexOf(s);
+ if (index <= 0)
+ return;
+ windowStack.move(index, 0);
+ invalidateRectCache();
+ setDirty(s->geometry());
+}
+
+void QFbWindow::lower()
+{
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->lower(this);
+ ++i;
+ }
+}
+
+void QFbScreen::lower(QPlatformWindow * surface)
+{
+ QFbWindow *s = static_cast<QFbWindow *>(surface);
+ int index = windowStack.indexOf(s);
+ if (index == -1 || index == (windowStack.size() - 1))
+ return;
+ windowStack.move(index, windowStack.size() - 1);
+ invalidateRectCache();
+ setDirty(s->geometry());
+}
+
+QWidget * QFbScreen::topLevelAt(const QPoint & p) const
+{
+ for(int i = 0; i < windowStack.size(); i++) {
+ if (windowStack[i]->geometry().contains(p, false) &&
+ windowStack[i]->visible() &&
+ !windowStack[i]->widget()->isMinimized()) {
+ return windowStack[i]->widget();
+ }
+ }
+ return 0;
+}
+
+QFbWindow::QFbWindow(QWidget *window)
+ :QPlatformWindow(window),
+ visibleFlag(false)
+{
+ static QAtomicInt winIdGenerator(1);
+ windowId = winIdGenerator.fetchAndAddRelaxed(1);
+}
+
+
+QFbWindow::~QFbWindow()
+{
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->removeWindow(this);
+ ++i;
+ }
+}
+
+
+QFbWindowSurface::QFbWindowSurface(QFbScreen *screen, QWidget *window)
+ : QWindowSurface(window),
+ mScreen(screen)
+{
+ mImage = QImage(window->size(), mScreen->format());
+
+ platformWindow = static_cast<QFbWindow*>(window->platformWindow());
+ platformWindow->surface = this;
+}
+
+QFbWindowSurface::~QFbWindowSurface()
+{
+}
+
+void QFbWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(offset);
+
+
+// qDebug() << "QFbWindowSurface::flush" << region;
+
+
+ platformWindow->repaint(region);
+}
+
+
+void QFbWindow::repaint(const QRegion &region)
+{
+ QRect currentGeometry = geometry();
+
+ QRect dirtyClient = region.boundingRect();
+ QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(),
+ currentGeometry.top() + dirtyClient.top(),
+ dirtyClient.width(),
+ dirtyClient.height());
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ QRect oldGeometryLocal = oldGeometry;
+ oldGeometry = currentGeometry;
+ while (i != end) {
+ // If this is a move, redraw the previous location
+ if (oldGeometryLocal != currentGeometry) {
+ (*i)->setDirty(oldGeometryLocal);
+ }
+ (*i)->setDirty(dirtyRegion);
+ ++i;
+ }
+}
+
+void QFbWindowSurface::resize(const QSize &size)
+{
+ // change the widget's QImage if this is a resize
+ if (mImage.size() != size)
+ mImage = QImage(size, mScreen->format());
+ QWindowSurface::resize(size);
+}
+
+void QFbWindow::setGeometry(const QRect &rect)
+{
+// store previous geometry for screen update
+ oldGeometry = geometry();
+
+
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->invalidateRectCache();
+ ++i;
+ }
+//### QWindowSystemInterface::handleGeometryChange(window(), rect);
+
+ QPlatformWindow::setGeometry(rect);
+}
+
+bool QFbWindowSurface::scroll(const QRegion &area, int dx, int dy)
+{
+ return QWindowSurface::scroll(area, dx, dy);
+}
+
+void QFbWindowSurface::beginPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+void QFbWindowSurface::endPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+void QFbWindow::setVisible(bool visible)
+{
+ visibleFlag = visible;
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->invalidateRectCache();
+ (*i)->setDirty(geometry());
+ ++i;
+ }
+}
+
+Qt::WindowFlags QFbWindow::setWindowFlags(Qt::WindowFlags type)
+{
+ flags = type;
+ QList<QFbScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QFbScreen *>::const_iterator end = mScreens.constEnd();
+ while (i != end) {
+ (*i)->invalidateRectCache();
+ ++i;
+ }
+ return flags;
+}
+
+Qt::WindowFlags QFbWindow::windowFlags() const
+{
+ return flags;
+}
diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h
new file mode 100644
index 0000000..45a5663
--- /dev/null
+++ b/src/plugins/platforms/fb_base/fb_base.h
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QLIGHTHOUSEGRAPHICSSCREEN_H
+#define QLIGHTHOUSEGRAPHICSSCREEN_H
+
+#include <qrect.h>
+#include <qimage.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <QPlatformCursor>
+#include <QPlatformScreen>
+#include <QPlatformWindow>
+#include <QtGui/private/qwindowsurface_p.h>
+
+class QMouseEvent;
+class QSize;
+class QPainter;
+
+class QFbScreen;
+
+class QPlatformSoftwareCursor : public QPlatformCursor
+{
+public:
+ QPlatformSoftwareCursor(QPlatformScreen * scr);
+
+ // output methods
+ QRect dirtyRect();
+ virtual QRect drawCursor(QPainter & painter);
+
+ // input methods
+ virtual void pointerEvent(const QMouseEvent & event);
+ virtual void changeCursor(QCursor * widgetCursor, QWidget * widget);
+
+ virtual void setDirty() { dirty = true; screen->setDirty(QRect()); }
+ virtual bool isDirty() { return dirty; }
+ virtual bool isOnScreen() { return onScreen; }
+ virtual QRect lastPainted() { return prevRect; }
+
+protected:
+ QPlatformCursorImage * graphic;
+
+private:
+ void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY);
+ void setCursor(Qt::CursorShape shape);
+ void setCursor(const QImage &image, int hotx, int hoty);
+ QRect currentRect; // next place to draw the cursor
+ QRect prevRect; // last place the cursor was drawn
+ QRect getCurrentRect();
+ bool dirty;
+ bool onScreen;
+};
+
+class QFbWindow;
+
+class QFbWindowSurface : public QWindowSurface
+{
+public:
+ QFbWindowSurface(QFbScreen *screen, QWidget *window);
+ ~QFbWindowSurface();
+
+ virtual QPaintDevice *paintDevice() { return &mImage; }
+ virtual void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ virtual bool scroll(const QRegion &area, int dx, int dy);
+
+ virtual void beginPaint(const QRegion &region);
+ virtual void endPaint(const QRegion &region);
+
+
+ const QImage image() { return mImage; }
+ void resize(const QSize &size);
+
+protected:
+ friend class QFbWindow;
+ QFbWindow *platformWindow;
+
+ QFbScreen *mScreen;
+ QImage mImage;
+};
+
+
+class QFbWindow : public QPlatformWindow
+{
+public:
+
+ QFbWindow(QWidget *window);
+ ~QFbWindow();
+
+
+ virtual void setVisible(bool visible);
+ virtual bool visible() { return visibleFlag; }
+
+ virtual void raise();
+ virtual void lower();
+
+ void setGeometry(const QRect &rect);
+
+ virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type);
+ virtual Qt::WindowFlags windowFlags() const;
+
+ WId winId() const { return windowId; }
+
+ virtual void repaint(const QRegion&);
+
+protected:
+ friend class QFbWindowSurface;
+ friend class QFbScreen;
+ QFbWindowSurface *surface;
+ QList<QFbScreen *> mScreens;
+ QRect oldGeometry;
+ bool visibleFlag;
+ Qt::WindowFlags flags;
+
+ WId windowId;
+};
+
+class QFbScreen : public QPlatformScreen
+{
+ Q_OBJECT
+public:
+ QFbScreen();
+ ~QFbScreen();
+
+ virtual QRect geometry() const { return mGeometry; }
+ virtual int depth() const { return mDepth; }
+ virtual QImage::Format format() const { return mFormat; }
+ virtual QSize physicalSize() const { return mPhysicalSize; }
+
+ virtual void setGeometry(QRect rect);
+ virtual void setDepth(int depth);
+ virtual void setFormat(QImage::Format format);
+ virtual void setPhysicalSize(QSize size);
+
+ virtual void setDirty(const QRect &rect);
+
+ virtual void removeWindow(QFbWindow * surface);
+ virtual void addWindow(QFbWindow * surface);
+ virtual void raise(QPlatformWindow * surface);
+ virtual void lower(QPlatformWindow * surface);
+ virtual QWidget * topLevelAt(const QPoint & p) const;
+
+ QImage * image() const { return mScreenImage; }
+ QPaintDevice * paintDevice() const { return mScreenImage; }
+
+protected:
+ QList<QFbWindow *> windowStack;
+ QRegion repaintRegion;
+ QPlatformSoftwareCursor * cursor;
+ QTimer redrawTimer;
+
+protected slots:
+ virtual QRegion doRedraw();
+
+protected:
+ QRect mGeometry;
+ int mDepth;
+ QImage::Format mFormat;
+ QSize mPhysicalSize;
+ QImage *mScreenImage;
+
+private:
+ QPainter * compositePainter;
+ void generateRects();
+ QList<QPair<QRect, int> > cachedRects;
+
+ void invalidateRectCache() { isUpToDate = false; }
+ friend class QFbWindowSurface;
+ friend class QFbWindow;
+ bool isUpToDate;
+};
+
+#endif // QLIGHTHOUSEGRAPHICSSCREEN_H
diff --git a/src/plugins/platforms/fb_base/fb_base.pri b/src/plugins/platforms/fb_base/fb_base.pri
new file mode 100644
index 0000000..41bd87f
--- /dev/null
+++ b/src/plugins/platforms/fb_base/fb_base.pri
@@ -0,0 +1,2 @@
+SOURCES += ../fb_base/fb_base.cpp
+HEADERS += ../fb_base/fb_base.h
diff --git a/src/plugins/platforms/fb_base/fb_base.pro b/src/plugins/platforms/fb_base/fb_base.pro
new file mode 100644
index 0000000..e08c0c5
--- /dev/null
+++ b/src/plugins/platforms/fb_base/fb_base.pro
@@ -0,0 +1,23 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2009-11-05T13:22:31
+#
+#-------------------------------------------------
+
+#QT -= core gui
+TARGET = fb_base
+#include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems
+
+TEMPLATE = lib
+
+#DEFINES += STATIC_LIBRARY
+CONFIG += staticlib
+
+SOURCES += fb_base.cpp
+
+HEADERS += fb_base.h
+
+target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
+INSTALLS += target
diff --git a/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri
new file mode 100644
index 0000000..21aedba
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri
@@ -0,0 +1,82 @@
+DEFINES += QT_NO_FONTCONFIG
+HEADERS += \
+ $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h \
+ $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h
+
+SOURCES += \
+ $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp \
+ $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp
+
+INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/harfbuzz/src
+
+INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix
+
+CONFIG += opentype
+
+contains(QT_CONFIG, freetype) {
+ SOURCES += \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbase.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbbox.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftdebug.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftglyph.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftinit.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftmm.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/fttype1.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftsynth.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbitmap.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/bdf/bdf.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cache/ftcache.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cff/cff.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cid/type1cid.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/gzip/ftgzip.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pcf/pcf.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pfr/pfr.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/psaux/psaux.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pshinter/pshinter.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/psnames/psmodule.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/raster/raster.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/sfnt/sfnt.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/smooth/smooth.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/truetype/truetype.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/type1/type1.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/type42/type42.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/winfonts/winfnt.c \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/lzw/ftlzw.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvalid.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvbase.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgdef.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvjstf.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvcommn.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgpos.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgsub.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvmod.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afangles.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afglobal.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/aflatin.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afmodule.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afdummy.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afhints.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afloader.c\
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/autofit.c
+
+ symbian {
+ SOURCES += \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftsystem.c
+ } else {
+ SOURCES += \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/builds/unix/ftsystem.c
+ INCLUDEPATH += \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/builds/unix
+ }
+
+ INCLUDEPATH += \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/src \
+ $$QT_SOURCE_TREE/src/3rdparty/freetype/include
+
+ DEFINES += FT2_BUILD_LIBRARY FT_CONFIG_OPTION_SYSTEM_ZLIB
+ } else:contains(QT_CONFIG, system-freetype) {
+ # pull in the proper freetype2 include directory
+ include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri)
+ LIBS_PRIVATE += -lfreetype
+ }
+
diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
new file mode 100644
index 0000000..4634477
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp
@@ -0,0 +1,326 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qbasicunixfontdatabase.h"
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/QPlatformScreen>
+
+#include <QtCore/QFile>
+#include <QtCore/QLibraryInfo>
+#include <QtCore/QDir>
+
+#undef QT_NO_FREETYPE
+#include <QtGui/private/qfontengine_ft_p.h>
+#include <QtGui/private/qfontengine_p.h>
+
+#include <ft2build.h>
+#include FT_TRUETYPE_TABLES_H
+
+#define SimplifiedChineseCsbBit 18
+#define TraditionalChineseCsbBit 20
+#define JapaneseCsbBit 17
+#define KoreanCsbBit 21
+
+static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = {
+ // Any,
+ { 127, 127 },
+ // Latin,
+ { 0, 127 },
+ // Greek,
+ { 7, 127 },
+ // Cyrillic,
+ { 9, 127 },
+ // Armenian,
+ { 10, 127 },
+ // Hebrew,
+ { 11, 127 },
+ // Arabic,
+ { 13, 127 },
+ // Syriac,
+ { 71, 127 },
+ //Thaana,
+ { 72, 127 },
+ //Devanagari,
+ { 15, 127 },
+ //Bengali,
+ { 16, 127 },
+ //Gurmukhi,
+ { 17, 127 },
+ //Gujarati,
+ { 18, 127 },
+ //Oriya,
+ { 19, 127 },
+ //Tamil,
+ { 20, 127 },
+ //Telugu,
+ { 21, 127 },
+ //Kannada,
+ { 22, 127 },
+ //Malayalam,
+ { 23, 127 },
+ //Sinhala,
+ { 73, 127 },
+ //Thai,
+ { 24, 127 },
+ //Lao,
+ { 25, 127 },
+ //Tibetan,
+ { 70, 127 },
+ //Myanmar,
+ { 74, 127 },
+ // Georgian,
+ { 26, 127 },
+ // Khmer,
+ { 80, 127 },
+ // SimplifiedChinese,
+ { 126, 127 },
+ // TraditionalChinese,
+ { 126, 127 },
+ // Japanese,
+ { 126, 127 },
+ // Korean,
+ { 56, 127 },
+ // Vietnamese,
+ { 0, 127 }, // same as latin1
+ // Other,
+ { 126, 127 },
+ // Ogham,
+ { 78, 127 },
+ // Runic,
+ { 79, 127 },
+ // Nko,
+ { 14, 127 },
+};
+
+static QSupportedWritingSystems determineWritingSystemsFromTrueTypeBits(quint32 unicodeRange[4], quint32 codePageRange[2])
+{
+ QSupportedWritingSystems writingSystems;
+ bool hasScript = false;
+
+ int i;
+ for(i = 0; i < QFontDatabase::WritingSystemsCount; i++) {
+ int bit = requiredUnicodeBits[i][0];
+ int index = bit/32;
+ int flag = 1 << (bit&31);
+ if (bit != 126 && unicodeRange[index] & flag) {
+ bit = requiredUnicodeBits[i][1];
+ index = bit/32;
+
+ flag = 1 << (bit&31);
+ if (bit == 127 || unicodeRange[index] & flag) {
+ writingSystems.setSupported(QFontDatabase::WritingSystem(i));
+ hasScript = true;
+ // qDebug("font %s: index=%d, flag=%8x supports script %d", familyName.latin1(), index, flag, i);
+ }
+ }
+ }
+ if(codePageRange[0] & (1 << SimplifiedChineseCsbBit)) {
+ writingSystems.setSupported(QFontDatabase::SimplifiedChinese);
+ hasScript = true;
+ //qDebug("font %s supports Simplified Chinese", familyName.latin1());
+ }
+ if(codePageRange[0] & (1 << TraditionalChineseCsbBit)) {
+ writingSystems.setSupported(QFontDatabase::TraditionalChinese);
+ hasScript = true;
+ //qDebug("font %s supports Traditional Chinese", familyName.latin1());
+ }
+ if(codePageRange[0] & (1 << JapaneseCsbBit)) {
+ writingSystems.setSupported(QFontDatabase::Japanese);
+ hasScript = true;
+ //qDebug("font %s supports Japanese", familyName.latin1());
+ }
+ if(codePageRange[0] & (1 << KoreanCsbBit)) {
+ writingSystems.setSupported(QFontDatabase::Korean);
+ hasScript = true;
+ //qDebug("font %s supports Korean", familyName.latin1());
+ }
+ if (!hasScript)
+ writingSystems.setSupported(QFontDatabase::Symbol);
+
+ return writingSystems;
+}
+
+static inline bool scriptRequiresOpenType(int script)
+{
+ return ((script >= QUnicodeTables::Syriac && script <= QUnicodeTables::Sinhala)
+ || script == QUnicodeTables::Khmer || script == QUnicodeTables::Nko);
+}
+
+void QBasicUnixFontDatabase::populateFontDatabase()
+{
+ QPlatformFontDatabase::populateFontDatabase();
+ QString fontpath = fontDir();
+
+ if(!QFile::exists(fontpath)) {
+ qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?",
+ qPrintable(fontpath));
+ }
+
+ QDir dir(fontpath);
+ dir.setNameFilters(QStringList() << QLatin1String("*.ttf")
+ << QLatin1String("*.ttc") << QLatin1String("*.pfa")
+ << QLatin1String("*.pfb"));
+ dir.refresh();
+ for (int i = 0; i < int(dir.count()); ++i) {
+ const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));
+// qDebug() << "looking at" << file;
+ addTTFile(QByteArray(), file);
+ }
+}
+
+QFontEngine *QBasicUnixFontDatabase::fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *usrPtr)
+{
+ QFontEngineFT *engine;
+ FontFile *fontfile = static_cast<FontFile *> (usrPtr);
+ QFontEngine::FaceId fid;
+ fid.filename = fontfile->fileName.toLocal8Bit();
+ fid.index = fontfile->indexValue;
+ engine = new QFontEngineFT(fontDef);
+
+ bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias);
+ QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono;
+ if (!engine->init(fid,antialias,format)) {
+ delete engine;
+ engine = 0;
+ return engine;
+ }
+ if (engine->invalid()) {
+ delete engine;
+ engine = 0;
+ } else if (scriptRequiresOpenType(script)) {
+ HB_Face hbFace = engine->harfbuzzFace();
+ if (!hbFace || !hbFace->supported_scripts[script]) {
+ delete engine;
+ engine = 0;
+ }
+ }
+
+ return engine;
+}
+
+QStringList QBasicUnixFontDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const
+{
+ Q_UNUSED(family);
+ Q_UNUSED(style);
+ Q_UNUSED(script);
+ return QStringList();
+}
+
+QStringList QBasicUnixFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName)
+{
+ return addTTFile(fontData,fileName.toLocal8Bit());
+}
+
+void QBasicUnixFontDatabase::releaseHandle(void *handle)
+{
+ FontFile *file = static_cast<FontFile *>(handle);
+ delete file;
+}
+
+QStringList QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file)
+{
+ extern FT_Library qt_getFreetype();
+ FT_Library library = qt_getFreetype();
+
+ int index = 0;
+ int numFaces = 0;
+ QStringList families;
+ do {
+ FT_Face face;
+ FT_Error error;
+ if (!fontData.isEmpty()) {
+ error = FT_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face);
+ } else {
+ error = FT_New_Face(library, file.constData(), index, &face);
+ }
+ if (error != FT_Err_Ok) {
+ qDebug() << "FT_New_Face failed with index" << index << ":" << hex << error;
+ break;
+ }
+ numFaces = face->num_faces;
+
+ int weight = QFont::Normal;
+
+ QFont::Style style = QFont::StyleNormal;
+ if (face->style_flags & FT_STYLE_FLAG_ITALIC)
+ style = QFont::StyleItalic;
+
+ if (face->style_flags & FT_STYLE_FLAG_BOLD)
+ weight = QFont::Bold;
+
+ QSupportedWritingSystems writingSystems;
+ // detect symbol fonts
+ for (int i = 0; i < face->num_charmaps; ++i) {
+ FT_CharMap cm = face->charmaps[i];
+ if (cm->encoding == ft_encoding_adobe_custom
+ || cm->encoding == ft_encoding_symbol) {
+ writingSystems.setSupported(QFontDatabase::Symbol);
+ break;
+ }
+ }
+
+ TT_OS2 *os2 = (TT_OS2 *)FT_Get_Sfnt_Table(face, ft_sfnt_os2);
+ if (os2) {
+ quint32 unicodeRange[4] = {
+ os2->ulUnicodeRange1, os2->ulUnicodeRange2, os2->ulUnicodeRange3, os2->ulUnicodeRange4
+ };
+ quint32 codePageRange[2] = {
+ os2->ulCodePageRange1, os2->ulCodePageRange2
+ };
+
+ writingSystems = determineWritingSystemsFromTrueTypeBits(unicodeRange, codePageRange);
+ }
+
+ QString family = QString::fromAscii(face->family_name);
+ FontFile *fontFile = new FontFile;
+ fontFile->fileName = file;
+ fontFile->indexValue = index;
+
+ registerFont(family,"",weight,style,100,true,true,0,writingSystems,fontFile);
+
+ families.append(family);
+
+ FT_Done_Face(face);
+ ++index;
+ } while (index < numFaces);
+ return families;
+}
diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h
new file mode 100644
index 0000000..0af118d
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QBASICUNIXFONTDATABASE_H
+#define QBASICUNIXFONTDATABASE_H
+
+#include <QPlatformFontDatabase>
+#include <QtCore/QByteArray>
+#include <QtCore/QString>
+
+struct FontFile
+{
+ QString fileName;
+ int indexValue;
+};
+
+class QBasicUnixFontDatabase : public QPlatformFontDatabase
+{
+public:
+ void populateFontDatabase();
+ QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle);
+ QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName);
+ void releaseHandle(void *handle);
+
+ static QStringList addTTFile(const QByteArray &fontData, const QByteArray &file);
+};
+
+#endif // QBASICUNIXFONTDATABASE_H
diff --git a/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri b/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri
new file mode 100644
index 0000000..19c74ed
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri
@@ -0,0 +1,12 @@
+include(../basicunix/basicunix.pri)
+
+HEADERS += \
+ $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h
+
+SOURCES += \
+ $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+
+INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig
+LIBS_PRIVATE += -lfontconfig
+
+
diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp
new file mode 100644
index 0000000..c9d1b74
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -0,0 +1,572 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qfontconfigdatabase.h"
+
+#include <QtCore/QList>
+#include <QtGui/private/qfont_p.h>
+
+#include <QtCore/QElapsedTimer>
+
+#include <QtGui/private/qapplication_p.h>
+#include <QtGui/QPlatformScreen>
+
+#include <QtGui/private/qfontengine_ft_p.h>
+#include <QtGui/private/qfontengine_p.h>
+
+
+
+#include <ft2build.h>
+#include FT_TRUETYPE_TABLES_H
+
+#include <fontconfig/fontconfig.h>
+
+#define SimplifiedChineseCsbBit 18
+#define TraditionalChineseCsbBit 20
+#define JapaneseCsbBit 17
+#define KoreanCsbBit 21
+
+static inline bool requiresOpenType(int writingSystem)
+{
+ return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala)
+ || writingSystem == QFontDatabase::Khmer || writingSystem == QFontDatabase::Nko);
+}
+static inline bool scriptRequiresOpenType(int script)
+{
+ return ((script >= QUnicodeTables::Syriac && script <= QUnicodeTables::Sinhala)
+ || script == QUnicodeTables::Khmer || script == QUnicodeTables::Nko);
+}
+
+static int getFCWeight(int fc_weight)
+{
+ int qtweight = QFont::Black;
+ if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_MEDIUM) / 2)
+ qtweight = QFont::Light;
+ else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2)
+ qtweight = QFont::Normal;
+ else if (fc_weight <= (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2)
+ qtweight = QFont::DemiBold;
+ else if (fc_weight <= (FC_WEIGHT_BOLD + FC_WEIGHT_BLACK) / 2)
+ qtweight = QFont::Bold;
+
+ return qtweight;
+}
+
+static const char *specialLanguages[] = {
+ "en", // Common
+ "el", // Greek
+ "ru", // Cyrillic
+ "hy", // Armenian
+ "he", // Hebrew
+ "ar", // Arabic
+ "syr", // Syriac
+ "div", // Thaana
+ "hi", // Devanagari
+ "bn", // Bengali
+ "pa", // Gurmukhi
+ "gu", // Gujarati
+ "or", // Oriya
+ "ta", // Tamil
+ "te", // Telugu
+ "kn", // Kannada
+ "ml", // Malayalam
+ "si", // Sinhala
+ "th", // Thai
+ "lo", // Lao
+ "bo", // Tibetan
+ "my", // Myanmar
+ "ka", // Georgian
+ "ko", // Hangul
+ "", // Ogham
+ "", // Runic
+ "km", // Khmer
+ "" // N'Ko
+};
+enum { SpecialLanguageCount = sizeof(specialLanguages) / sizeof(const char *) };
+
+static const ushort specialChars[] = {
+ 0, // English
+ 0, // Greek
+ 0, // Cyrillic
+ 0, // Armenian
+ 0, // Hebrew
+ 0, // Arabic
+ 0, // Syriac
+ 0, // Thaana
+ 0, // Devanagari
+ 0, // Bengali
+ 0, // Gurmukhi
+ 0, // Gujarati
+ 0, // Oriya
+ 0, // Tamil
+ 0xc15, // Telugu
+ 0xc95, // Kannada
+ 0xd15, // Malayalam
+ 0xd9a, // Sinhala
+ 0, // Thai
+ 0, // Lao
+ 0, // Tibetan
+ 0x1000, // Myanmar
+ 0, // Georgian
+ 0, // Hangul
+ 0x1681, // Ogham
+ 0x16a0, // Runic
+ 0, // Khmer
+ 0x7ca // N'Ko
+};
+enum { SpecialCharCount = sizeof(specialChars) / sizeof(ushort) };
+
+// this could become a list of all languages used for each writing
+// system, instead of using the single most common language.
+static const char *languageForWritingSystem[] = {
+ 0, // Any
+ "en", // Latin
+ "el", // Greek
+ "ru", // Cyrillic
+ "hy", // Armenian
+ "he", // Hebrew
+ "ar", // Arabic
+ "syr", // Syriac
+ "div", // Thaana
+ "hi", // Devanagari
+ "bn", // Bengali
+ "pa", // Gurmukhi
+ "gu", // Gujarati
+ "or", // Oriya
+ "ta", // Tamil
+ "te", // Telugu
+ "kn", // Kannada
+ "ml", // Malayalam
+ "si", // Sinhala
+ "th", // Thai
+ "lo", // Lao
+ "bo", // Tibetan
+ "my", // Myanmar
+ "ka", // Georgian
+ "km", // Khmer
+ "zh-cn", // SimplifiedChinese
+ "zh-tw", // TraditionalChinese
+ "ja", // Japanese
+ "ko", // Korean
+ "vi", // Vietnamese
+ 0, // Symbol
+ 0, // Ogham
+ 0, // Runic
+ 0 // N'Ko
+};
+enum { LanguageCount = sizeof(languageForWritingSystem) / sizeof(const char *) };
+
+// Unfortunately FontConfig doesn't know about some languages. We have to test these through the
+// charset. The lists below contain the systems where we need to do this.
+static const ushort sampleCharForWritingSystem[] = {
+ 0, // Any
+ 0, // Latin
+ 0, // Greek
+ 0, // Cyrillic
+ 0, // Armenian
+ 0, // Hebrew
+ 0, // Arabic
+ 0, // Syriac
+ 0, // Thaana
+ 0, // Devanagari
+ 0, // Bengali
+ 0, // Gurmukhi
+ 0, // Gujarati
+ 0, // Oriya
+ 0, // Tamil
+ 0xc15, // Telugu
+ 0xc95, // Kannada
+ 0xd15, // Malayalam
+ 0xd9a, // Sinhala
+ 0, // Thai
+ 0, // Lao
+ 0, // Tibetan
+ 0x1000, // Myanmar
+ 0, // Georgian
+ 0, // Khmer
+ 0, // SimplifiedChinese
+ 0, // TraditionalChinese
+ 0, // Japanese
+ 0, // Korean
+ 0, // Vietnamese
+ 0, // Symbol
+ 0x1681, // Ogham
+ 0x16a0, // Runic
+ 0x7ca // N'Ko
+};
+enum { SampleCharCount = sizeof(sampleCharForWritingSystem) / sizeof(ushort) };
+
+// Newer FontConfig let's us sort out fonts that contain certain glyphs, but no
+// open type tables for is directly. Do this so we don't pick some strange
+// pseudo unicode font
+static const char *openType[] = {
+ 0, // Any
+ 0, // Latin
+ 0, // Greek
+ 0, // Cyrillic
+ 0, // Armenian
+ 0, // Hebrew
+ 0, // Arabic
+ "syrc", // Syriac
+ "thaa", // Thaana
+ "deva", // Devanagari
+ "beng", // Bengali
+ "guru", // Gurmukhi
+ "gurj", // Gujarati
+ "orya", // Oriya
+ "taml", // Tamil
+ "telu", // Telugu
+ "knda", // Kannada
+ "mlym", // Malayalam
+ "sinh", // Sinhala
+ 0, // Thai
+ 0, // Lao
+ "tibt", // Tibetan
+ "mymr", // Myanmar
+ 0, // Georgian
+ "khmr", // Khmer
+ 0, // SimplifiedChinese
+ 0, // TraditionalChinese
+ 0, // Japanese
+ 0, // Korean
+ 0, // Vietnamese
+ 0, // Symbol
+ 0, // Ogham
+ 0, // Runic
+ "nko " // N'Ko
+};
+
+void QFontconfigDatabase::populateFontDatabase()
+{
+ FcFontSet *fonts;
+
+ QString familyName;
+ FcChar8 *value = 0;
+ int weight_value;
+ int slant_value;
+ int spacing_value;
+ FcChar8 *file_value;
+ int indexValue;
+ FcChar8 *foundry_value;
+ FcBool scalable;
+ FcBool antialias;
+
+ {
+ FcObjectSet *os = FcObjectSetCreate();
+ FcPattern *pattern = FcPatternCreate();
+ const char *properties [] = {
+ FC_FAMILY, FC_WEIGHT, FC_SLANT,
+ FC_SPACING, FC_FILE, FC_INDEX,
+ FC_LANG, FC_CHARSET, FC_FOUNDRY, FC_SCALABLE, FC_PIXEL_SIZE, FC_WEIGHT,
+ FC_WIDTH,
+#if FC_VERSION >= 20297
+ FC_CAPABILITY,
+#endif
+ (const char *)0
+ };
+ const char **p = properties;
+ while (*p) {
+ FcObjectSetAdd(os, *p);
+ ++p;
+ }
+ fonts = FcFontList(0, pattern, os);
+ FcObjectSetDestroy(os);
+ FcPatternDestroy(pattern);
+ }
+
+ for (int i = 0; i < fonts->nfont; i++) {
+ if (FcPatternGetString(fonts->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch)
+ continue;
+ // capitalize(value);
+ familyName = QString::fromUtf8((const char *)value);
+ slant_value = FC_SLANT_ROMAN;
+ weight_value = FC_WEIGHT_MEDIUM;
+ spacing_value = FC_PROPORTIONAL;
+ file_value = 0;
+ indexValue = 0;
+ scalable = FcTrue;
+
+
+ if (FcPatternGetInteger (fonts->fonts[i], FC_SLANT, 0, &slant_value) != FcResultMatch)
+ slant_value = FC_SLANT_ROMAN;
+ if (FcPatternGetInteger (fonts->fonts[i], FC_WEIGHT, 0, &weight_value) != FcResultMatch)
+ weight_value = FC_WEIGHT_MEDIUM;
+ if (FcPatternGetInteger (fonts->fonts[i], FC_SPACING, 0, &spacing_value) != FcResultMatch)
+ spacing_value = FC_PROPORTIONAL;
+ if (FcPatternGetString (fonts->fonts[i], FC_FILE, 0, &file_value) != FcResultMatch)
+ file_value = 0;
+ if (FcPatternGetInteger (fonts->fonts[i], FC_INDEX, 0, &indexValue) != FcResultMatch)
+ indexValue = 0;
+ if (FcPatternGetBool(fonts->fonts[i], FC_SCALABLE, 0, &scalable) != FcResultMatch)
+ scalable = FcTrue;
+ if (FcPatternGetString(fonts->fonts[i], FC_FOUNDRY, 0, &foundry_value) != FcResultMatch)
+ foundry_value = 0;
+ if(FcPatternGetBool(fonts->fonts[i],FC_ANTIALIAS,0,&antialias) != FcResultMatch)
+ antialias = true;
+
+ QSupportedWritingSystems writingSystems;
+ FcLangSet *langset = 0;
+ FcResult res = FcPatternGetLangSet(fonts->fonts[i], FC_LANG, 0, &langset);
+ if (res == FcResultMatch) {
+ for (int i = 1; i < LanguageCount; ++i) {
+ const FcChar8 *lang = (const FcChar8*) languageForWritingSystem[i];
+ if (lang) {
+ FcLangResult langRes = FcLangSetHasLang(langset, lang);
+ if (langRes != FcLangDifferentLang)
+ writingSystems.setSupported(QFontDatabase::WritingSystem(i));
+ }
+ }
+ } else {
+ // we set Other to supported for symbol fonts. It makes no
+ // sense to merge these with other ones, as they are
+ // special in a way.
+ writingSystems.setSupported(QFontDatabase::Other);
+ }
+
+ FcCharSet *cs = 0;
+ res = FcPatternGetCharSet(fonts->fonts[i], FC_CHARSET, 0, &cs);
+ if (res == FcResultMatch) {
+ // some languages are not supported by FontConfig, we rather check the
+ // charset to detect these
+ for (int i = 1; i < SampleCharCount; ++i) {
+ if (!sampleCharForWritingSystem[i])
+ continue;
+ if (FcCharSetHasChar(cs, sampleCharForWritingSystem[i]))
+ writingSystems.setSupported(QFontDatabase::WritingSystem(i));
+ }
+ }
+
+#if FC_VERSION >= 20297
+ for (int j = 1; j < LanguageCount; ++j) {
+ if (writingSystems.supported(QFontDatabase::WritingSystem(j))
+ && requiresOpenType(j) && openType[j]) {
+ FcChar8 *cap;
+ res = FcPatternGetString (fonts->fonts[i], FC_CAPABILITY, 0, &cap);
+ if (res != FcResultMatch || !strstr((const char *)cap, openType[j]))
+ writingSystems.setSupported(QFontDatabase::WritingSystem(j),false);
+ }
+ }
+#endif
+
+ FontFile *fontFile = new FontFile;
+ fontFile->fileName = QLatin1String((const char *)file_value);
+ fontFile->indexValue = indexValue;
+
+ QFont::Style style = (slant_value == FC_SLANT_ITALIC)
+ ? QFont::StyleItalic
+ : ((slant_value == FC_SLANT_OBLIQUE)
+ ? QFont::StyleOblique
+ : QFont::StyleNormal);
+ int weight = getFCWeight(weight_value);
+
+ double pixel_size = 0;
+ if (!scalable) {
+ int width = 100;
+ FcPatternGetInteger (fonts->fonts[i], FC_WIDTH, 0, &width);
+ FcPatternGetDouble (fonts->fonts[i], FC_PIXEL_SIZE, 0, &pixel_size);
+ }
+
+ QPlatformFontDatabase::registerFont(familyName,QLatin1String((const char *)foundry_value),weight,style,100,antialias,scalable,pixel_size,writingSystems,fontFile);
+// qDebug() << familyName << (const char *)foundry_value << weight << style << &writingSystems << scalable << true << pixel_size;
+ }
+
+ FcFontSetDestroy (fonts);
+
+ struct FcDefaultFont {
+ const char *qtname;
+ const char *rawname;
+ bool fixed;
+ };
+ const FcDefaultFont defaults[] = {
+ { "Serif", "serif", false },
+ { "Sans Serif", "sans-serif", false },
+ { "Monospace", "monospace", true },
+ { 0, 0, false }
+ };
+ const FcDefaultFont *f = defaults;
+ // aliases only make sense for 'common', not for any of the specials
+ QSupportedWritingSystems ws;
+ ws.setSupported(QFontDatabase::Latin);
+
+ while (f->qtname) {
+ registerFont(f->qtname,"",50,QFont::StyleNormal,100,true,true,0,ws,0);
+ registerFont(f->qtname,"",50,QFont::StyleItalic,100,true,true,0,ws,0);
+ registerFont(f->qtname,"",50,QFont::StyleOblique,100,true,true,0,ws,0);
+ ++f;
+ }
+
+ //Lighthouse has very lazy population of the font db. We want it to be initialized when
+ //QApplication is constructed, so that the population procedure can do something like this to
+ //set the default font
+// const FcDefaultFont *s = defaults;
+// QFont font("Sans Serif");
+// font.setPointSize(9);
+// QApplication::setFont(font);
+}
+
+QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::Script script, void *usrPtr)
+{
+ QFontDef fontDef = f;
+
+ QFontEngineFT *engine;
+ FontFile *fontfile = static_cast<FontFile *> (usrPtr);
+ QFontEngine::FaceId fid;
+ fid.filename = fontfile->fileName.toLocal8Bit();
+ fid.index = fontfile->indexValue;
+
+ //try and get the pattern
+ FcPattern *pattern = FcPatternCreate();
+
+ bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias);
+ QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono;
+
+ engine = new QFontEngineFT(fontDef);
+
+ FcValue value;
+ value.type = FcTypeString;
+ QByteArray cs = fontDef.family.toUtf8();
+ value.u.s = (const FcChar8 *)cs.data();
+ FcPatternAdd(pattern,FC_FAMILY,value,true);
+
+
+ value.u.s = (const FcChar8 *)fid.filename.data();
+ FcPatternAdd(pattern,FC_FILE,value,true);
+
+ value.type = FcTypeInteger;
+ value.u.i = fid.index;
+ FcPatternAdd(pattern,FC_INDEX,value,true);
+
+ QFontEngineFT::HintStyle default_hint_style;
+
+ if (FcConfigSubstitute(0,pattern,FcMatchPattern)) {
+
+ //hinting
+ int hint_style = 0;
+ if (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch)
+ hint_style = QFontEngineFT::HintFull;
+ switch (hint_style) {
+ case FC_HINT_NONE:
+ default_hint_style = QFontEngineFT::HintNone;
+ break;
+ case FC_HINT_SLIGHT:
+ default_hint_style = QFontEngineFT::HintLight;
+ break;
+ case FC_HINT_MEDIUM:
+ default_hint_style = QFontEngineFT::HintMedium;
+ break;
+ default:
+ default_hint_style = QFontEngineFT::HintFull;
+ break;
+ }
+ }
+
+ engine->setDefaultHintStyle(default_hint_style);
+ if (!engine->init(fid,antialias,format)) {
+ delete engine;
+ engine = 0;
+ return engine;
+ }
+ if (engine->invalid()) {
+ delete engine;
+ engine = 0;
+ } else if (scriptRequiresOpenType(script)) {
+ HB_Face hbFace = engine->harfbuzzFace();
+ if (!hbFace || !hbFace->supported_scripts[script]) {
+ delete engine;
+ engine = 0;
+ }
+ }
+
+ return engine;
+}
+
+QStringList QFontconfigDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const
+{
+ QStringList fallbackFamilies;
+ FcPattern *pattern = FcPatternCreate();
+ if (!pattern)
+ return fallbackFamilies;
+
+ FcValue value;
+ value.type = FcTypeString;
+ QByteArray cs = family.toUtf8();
+ value.u.s = (const FcChar8 *)cs.data();
+ FcPatternAdd(pattern,FC_FAMILY,value,true);
+
+ int slant_value = FC_SLANT_ROMAN;
+ if (style == QFont::StyleItalic)
+ slant_value = FC_SLANT_ITALIC;
+ else if (style == QFont::StyleOblique)
+ slant_value = FC_SLANT_OBLIQUE;
+ FcPatternAddInteger(pattern, FC_SLANT, slant_value);
+
+ if (script != QUnicodeTables::Common && *specialLanguages[script] != '\0') {
+ Q_ASSERT(script < QUnicodeTables::ScriptCount);
+ FcLangSet *ls = FcLangSetCreate();
+ FcLangSetAdd(ls, (const FcChar8*)specialLanguages[script]);
+ FcPatternAddLangSet(pattern, FC_LANG, ls);
+ FcLangSetDestroy(ls);
+ }
+
+ FcConfigSubstitute(0, pattern, FcMatchPattern);
+ FcConfigSubstitute(0, pattern, FcMatchFont);
+
+ FcResult result = FcResultMatch;
+ FcFontSet *fontSet = FcFontSort(0,pattern,FcFalse,0,&result);
+
+ if (fontSet && result == FcResultMatch)
+ {
+ for (int i = 0; i < fontSet->nfont; i++) {
+ FcChar8 *value = 0;
+ if (FcPatternGetString(fontSet->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch)
+ continue;
+ // capitalize(value);
+ QString familyName = QString::fromUtf8((const char *)value);
+ if (!fallbackFamilies.contains(familyName,Qt::CaseInsensitive)) {
+ fallbackFamilies << familyName;
+ }
+
+ }
+ }
+// qDebug() << "fallbackFamilies for:" << family << fallbackFamilies;
+
+ return fallbackFamilies;
+}
diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h
new file mode 100644
index 0000000..33382dc
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QFONTCONFIGDATABASE_H
+#define QFONTCONFIGDATABASE_H
+
+#include <QPlatformFontDatabase>
+#include "qbasicunixfontdatabase.h"
+
+class QFontconfigDatabase : public QBasicUnixFontDatabase
+{
+public:
+ void populateFontDatabase();
+ QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle);
+ QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const;
+};
+
+#endif // QFONTCONFIGDATABASE_H
diff --git a/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri b/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri
new file mode 100644
index 0000000..dbcfbce
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri
@@ -0,0 +1,10 @@
+contains(QT_CONFIG, fontconfig) {
+ include(../fontconfig/fontconfig.pri)
+ DEFINES += Q_FONTCONFIGDATABASE
+} else {
+ include(../basicunix/basicunix.pri)
+}
+
+INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/genericunix
+HEADERS += \
+ $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h
diff --git a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h
new file mode 100644
index 0000000..327c8f5
--- /dev/null
+++ b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QGENERICUNIXFONTDATABASE_H
+#define QGENERICUNIXFONTDATABASE_H
+
+#ifdef Q_FONTCONFIGDATABASE
+#include "qfontconfigdatabase.h"
+typedef QFontconfigDatabase QGenericUnixFontDatabase;
+#else
+#include "qbasicunixfontdatabase.h"
+typedef QBasicUnixFontDatabase QGenericUnixFontDatabase;
+#endif //Q_FONTCONFIGDATABASE
+
+#endif // QGENERICUNIXFONTDATABASE_H
diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro
new file mode 100644
index 0000000..216b899
--- /dev/null
+++ b/src/plugins/platforms/linuxfb/linuxfb.pro
@@ -0,0 +1,13 @@
+TARGET = qlinuxfbgraphicssystem
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+SOURCES = main.cpp qlinuxfbintegration.cpp
+HEADERS = qlinuxfbintegration.h
+
+include(../fb_base/fb_base.pri)
+include(../fontdatabases/genericunix/genericunix.pri)
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp
new file mode 100644
index 0000000..c5f7fe0
--- /dev/null
+++ b/src/plugins/platforms/linuxfb/main.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QPlatformIntegrationPlugin>
+#include "qlinuxfbintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QLinuxFbIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "LinuxFb";
+ return list;
+}
+
+QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "linuxfb")
+ return new QLinuxFbIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
new file mode 100644
index 0000000..aa1d401
--- /dev/null
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
@@ -0,0 +1,866 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qlinuxfbintegration.h"
+#include "../fb_base/fb_base.h"
+#include "qgenericunixfontdatabase.h"
+#include <QtGui/private/qpixmap_raster_p.h>
+#include <private/qcore_unix_p.h> // overrides QT_OPEN
+#include <qimage.h>
+#include <qdebug.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <sys/kd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <limits.h>
+#include <signal.h>
+
+#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD)
+#include <linux/fb.h>
+
+#ifdef __i386__
+#include <asm/mtrr.h>
+#endif
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QLinuxFbIntegrationPrivate
+{
+public:
+ QLinuxFbIntegrationPrivate();
+ ~QLinuxFbIntegrationPrivate();
+
+ void openTty();
+ void closeTty();
+
+ int fd;
+ int startupw;
+ int startuph;
+ int startupd;
+ bool blank;
+
+ bool doGraphicsMode;
+#ifdef QT_QWS_DEPTH_GENERIC
+ bool doGenericColors;
+#endif
+ int ttyfd;
+ long oldKdMode;
+ QString ttyDevice;
+ QString displaySpec;
+};
+
+QLinuxFbIntegrationPrivate::QLinuxFbIntegrationPrivate()
+ : fd(-1), blank(true), doGraphicsMode(true),
+#ifdef QT_QWS_DEPTH_GENERIC
+ doGenericColors(false),
+#endif
+ ttyfd(-1), oldKdMode(KD_TEXT)
+{
+}
+
+QLinuxFbIntegrationPrivate::~QLinuxFbIntegrationPrivate()
+{
+ closeTty();
+}
+
+void QLinuxFbIntegrationPrivate::openTty()
+{
+ const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0};
+
+ if (ttyDevice.isEmpty()) {
+ for (const char * const *dev = devs; *dev; ++dev) {
+ ttyfd = QT_OPEN(*dev, O_RDWR);
+ if (ttyfd != -1)
+ break;
+ }
+ } else {
+ ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR);
+ }
+
+ if (ttyfd == -1)
+ return;
+
+ if (doGraphicsMode) {
+ ioctl(ttyfd, KDGETMODE, &oldKdMode);
+ if (oldKdMode != KD_GRAPHICS) {
+ int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS);
+ if (ret == -1)
+ doGraphicsMode = false;
+ }
+ }
+
+ // No blankin' screen, no blinkin' cursor!, no cursor!
+ const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c";
+ QT_WRITE(ttyfd, termctl, sizeof(termctl));
+}
+
+void QLinuxFbIntegrationPrivate::closeTty()
+{
+ if (ttyfd == -1)
+ return;
+
+ if (doGraphicsMode)
+ ioctl(ttyfd, KDSETMODE, oldKdMode);
+
+ // Blankin' screen, blinkin' cursor!
+ const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c";
+ QT_WRITE(ttyfd, termctl, sizeof(termctl));
+
+ QT_CLOSE(ttyfd);
+ ttyfd = -1;
+}
+
+QLinuxFbIntegration::QLinuxFbIntegration()
+ :fontDb(new QGenericUnixFontDatabase())
+{
+ d_ptr = new QLinuxFbIntegrationPrivate();
+
+ // XXX
+ QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY"));
+
+ if (!connect(displaySpec))
+ qFatal("QLinuxFbIntegration: could not initialize screen");
+ initDevice();
+
+ // Create a QImage directly on the screen's framebuffer.
+ // This is the blit target for copying windows to the screen.
+ mPrimaryScreen = new QLinuxFbScreen(data, w, h, lstep,
+ screenFormat);
+ mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight));
+ mScreens.append(mPrimaryScreen);
+}
+
+QLinuxFbIntegration::~QLinuxFbIntegration()
+{
+ delete mPrimaryScreen;
+ delete d_ptr;
+}
+
+bool QLinuxFbIntegration::connect(const QString &displaySpec)
+{
+ const QStringList args = displaySpec.split(QLatin1Char(':'));
+
+ if (args.contains(QLatin1String("nographicsmodeswitch")))
+ d_ptr->doGraphicsMode = false;
+
+#ifdef QT_QWS_DEPTH_GENERIC
+ if (args.contains(QLatin1String("genericcolors")))
+ d_ptr->doGenericColors = true;
+#endif
+
+ QRegExp ttyRegExp(QLatin1String("tty=(.*)"));
+ if (args.indexOf(ttyRegExp) != -1)
+ d_ptr->ttyDevice = ttyRegExp.cap(1);
+
+#if 0
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN
+ if (args.contains(QLatin1String("littleendian")))
+#endif
+ QScreen::setFrameBufferLittleEndian(true);
+#endif
+#endif
+
+ // Check for explicitly specified device
+ const int len = 8; // "/dev/fbx"
+ int m = displaySpec.indexOf(QLatin1String("/dev/fb"));
+
+ QString dev;
+ if (m > 0)
+ dev = displaySpec.mid(m, len);
+ else
+ dev = QLatin1String("/dev/fb0");
+
+ if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0)
+ d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR);
+ if (d_ptr->fd == -1) {
+ if (access(dev.toLatin1().constData(), R_OK) == 0)
+ d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY);
+ if (d_ptr->fd == 1) {
+ qWarning("Error opening framebuffer device %s", qPrintable(dev));
+ return false;
+ }
+ }
+
+ fb_fix_screeninfo finfo;
+ fb_var_screeninfo vinfo;
+ //#######################
+ // Shut up Valgrind
+ memset(&vinfo, 0, sizeof(vinfo));
+ memset(&finfo, 0, sizeof(finfo));
+ //#######################
+
+ /* Get fixed screen information */
+ if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) {
+ perror("QLinuxFbIntegration::connect");
+ qWarning("Error reading fixed information");
+ return false;
+ }
+
+ if (finfo.type == FB_TYPE_VGA_PLANES) {
+ qWarning("VGA16 video mode not supported");
+ return false;
+ }
+
+ /* Get variable screen information */
+ if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) {
+ perror("QLinuxFbIntegration::connect");
+ qWarning("Error reading variable information");
+ return false;
+ }
+
+ grayscale = vinfo.grayscale;
+ d = vinfo.bits_per_pixel;
+ if (d == 24) {
+ d = vinfo.red.length + vinfo.green.length + vinfo.blue.length;
+ if (d <= 0)
+ d = 24; // reset if color component lengths are not reported
+ } else if (d == 16) {
+ d = vinfo.red.length + vinfo.green.length + vinfo.blue.length;
+ if (d <= 0)
+ d = 16;
+ }
+ lstep = finfo.line_length;
+
+ int xoff = vinfo.xoffset;
+ int yoff = vinfo.yoffset;
+ const char* qwssize;
+ if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) {
+ if (d_ptr->fd != -1) {
+ if ((uint)w > vinfo.xres) w = vinfo.xres;
+ if ((uint)h > vinfo.yres) h = vinfo.yres;
+ }
+ dw=w;
+ dh=h;
+ int xxoff, yyoff;
+ if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) {
+ if (xxoff < 0 || xxoff + w > (int)(vinfo.xres))
+ xxoff = vinfo.xres - w;
+ if (yyoff < 0 || yyoff + h > (int)(vinfo.yres))
+ yyoff = vinfo.yres - h;
+ xoff += xxoff;
+ yoff += yyoff;
+ } else {
+ xoff += (vinfo.xres - w)/2;
+ yoff += (vinfo.yres - h)/2;
+ }
+ } else {
+ dw=w=vinfo.xres;
+ dh=h=vinfo.yres;
+ }
+
+ if (w == 0 || h == 0) {
+ qWarning("QLinuxFbIntegration::connect(): Unable to find screen geometry, "
+ "will use 320x240.");
+ dw = w = 320;
+ dh = h = 240;
+ }
+
+ setPixelFormat(vinfo);
+
+ // Handle display physical size spec.
+ QStringList displayArgs = displaySpec.split(QLatin1Char(':'));
+ QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)"));
+ int dimIdxW = displayArgs.indexOf(mmWidthRx);
+ QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)"));
+ int dimIdxH = displayArgs.indexOf(mmHeightRx);
+ if (dimIdxW >= 0) {
+ mmWidthRx.exactMatch(displayArgs.at(dimIdxW));
+ physWidth = mmWidthRx.cap(1).toInt();
+ if (dimIdxH < 0)
+ physHeight = dh*physWidth/dw;
+ }
+ if (dimIdxH >= 0) {
+ mmHeightRx.exactMatch(displayArgs.at(dimIdxH));
+ physHeight = mmHeightRx.cap(1).toInt();
+ if (dimIdxW < 0)
+ physWidth = dw*physHeight/dh;
+ }
+ if (dimIdxW < 0 && dimIdxH < 0) {
+ if (vinfo.width != 0 && vinfo.height != 0
+ && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) {
+ physWidth = vinfo.width;
+ physHeight = vinfo.height;
+ } else {
+ const int dpi = 72;
+ physWidth = qRound(dw * 25.4 / dpi);
+ physHeight = qRound(dh * 25.4 / dpi);
+ }
+ }
+
+ dataoffset = yoff * lstep + xoff * d / 8;
+ //qDebug("Using %dx%dx%d screen",w,h,d);
+
+ /* Figure out the size of the screen in bytes */
+ size = h * lstep;
+
+ mapsize = finfo.smem_len;
+
+ data = (unsigned char *)-1;
+ if (d_ptr->fd != -1)
+ data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE,
+ MAP_SHARED, d_ptr->fd, 0);
+
+ if ((long)data == -1) {
+ perror("QLinuxFbIntegration::connect");
+ qWarning("Error: failed to map framebuffer device to memory.");
+ return false;
+ } else {
+ data += dataoffset;
+ }
+
+#if 0
+ canaccel = useOffscreen();
+ if(canaccel)
+ setupOffScreen();
+#endif
+ canaccel = false;
+
+ // Now read in palette
+ if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) {
+ screencols= (vinfo.bits_per_pixel==8) ? 256 : 16;
+ int loopc;
+ fb_cmap startcmap;
+ startcmap.start=0;
+ startcmap.len=screencols;
+ startcmap.red=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ startcmap.green=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ startcmap.blue=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ startcmap.transp=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) {
+ perror("QLinuxFbIntegration::connect");
+ qWarning("Error reading palette from framebuffer, using default palette");
+ createPalette(startcmap, vinfo, finfo);
+ }
+ int bits_used = 0;
+ for(loopc=0;loopc<screencols;loopc++) {
+ screenclut[loopc]=qRgb(startcmap.red[loopc] >> 8,
+ startcmap.green[loopc] >> 8,
+ startcmap.blue[loopc] >> 8);
+ bits_used |= startcmap.red[loopc]
+ | startcmap.green[loopc]
+ | startcmap.blue[loopc];
+ }
+ // WORKAROUND: Some framebuffer drivers only return 8 bit
+ // color values, so we need to not bit shift them..
+ if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) {
+ for(loopc=0;loopc<screencols;loopc++) {
+ screenclut[loopc] = qRgb(startcmap.red[loopc],
+ startcmap.green[loopc],
+ startcmap.blue[loopc]);
+ }
+ qWarning("8 bits cmap returned due to faulty FB driver, colors corrected");
+ }
+ free(startcmap.red);
+ free(startcmap.green);
+ free(startcmap.blue);
+ free(startcmap.transp);
+ } else {
+ screencols=0;
+ }
+
+ return true;
+}
+
+bool QLinuxFbIntegration::initDevice()
+{
+ d_ptr->openTty();
+
+ // Grab current mode so we can reset it
+ fb_var_screeninfo vinfo;
+ fb_fix_screeninfo finfo;
+ //#######################
+ // Shut up Valgrind
+ memset(&vinfo, 0, sizeof(vinfo));
+ memset(&finfo, 0, sizeof(finfo));
+ //#######################
+
+ if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) {
+ perror("QLinuxFbScreen::initDevice");
+ qFatal("Error reading variable information in card init");
+ return false;
+ }
+
+#ifdef DEBUG_VINFO
+ qDebug("Greyscale %d",vinfo.grayscale);
+ qDebug("Nonstd %d",vinfo.nonstd);
+ qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length,
+ vinfo.red.msb_right);
+ qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length,
+ vinfo.green.msb_right);
+ qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length,
+ vinfo.blue.msb_right);
+ qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length,
+ vinfo.transp.msb_right);
+#endif
+
+ d_ptr->startupw=vinfo.xres;
+ d_ptr->startuph=vinfo.yres;
+ d_ptr->startupd=vinfo.bits_per_pixel;
+ grayscale = vinfo.grayscale;
+
+ if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) {
+ perror("QLinuxFbScreen::initDevice");
+ qCritical("Error reading fixed information in card init");
+ // It's not an /error/ as such, though definitely a bad sign
+ // so we return true
+ return true;
+ }
+
+#ifdef __i386__
+ // Now init mtrr
+ if(!::getenv("QWS_NOMTRR")) {
+ int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0);
+ // MTRR entry goes away when file is closed - i.e.
+ // hopefully when QWS is killed
+ if(mfd != -1) {
+ mtrr_sentry sentry;
+ sentry.base=(unsigned long int)finfo.smem_start;
+ //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start);
+ // Size needs to be in 4k chunks, but that's not always
+ // what we get thanks to graphics card registers. Write combining
+ // these is Not Good, so we write combine what we can
+ // (which is not much - 4 megs on an 8 meg card, it seems)
+ unsigned int size=finfo.smem_len;
+ size=size >> 22;
+ size=size << 22;
+ sentry.size=size;
+ sentry.type=MTRR_TYPE_WRCOMB;
+ if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) {
+ //printf("Couldn't add mtrr entry for %lx %lx, %s\n",
+ //sentry.base,sentry.size,strerror(errno));
+ }
+ }
+
+ // Should we close mfd here?
+ //QT_CLOSE(mfd);
+ }
+#endif
+ if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR))
+ {
+ fb_cmap cmap;
+ createPalette(cmap, vinfo, finfo);
+ if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) {
+ perror("QLinuxFbScreen::initDevice");
+ qWarning("Error writing palette to framebuffer");
+ }
+ free(cmap.red);
+ free(cmap.green);
+ free(cmap.blue);
+ free(cmap.transp);
+ }
+
+#if 0
+ if (canaccel) {
+ *entryp=0;
+ *lowest = mapsize;
+ insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start
+ }
+
+ shared->fifocount = 0;
+ shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen)
+ shared->linestep = 0;
+ shared->cliptop = 0xffffffff;
+ shared->clipleft = 0xffffffff;
+ shared->clipright = 0xffffffff;
+ shared->clipbottom = 0xffffffff;
+ shared->rop = 0xffffffff;
+#endif
+
+#ifdef QT_QWS_DEPTH_GENERIC
+ if (pixelFormat() == QImage::Format_Invalid && screencols == 0
+ && d_ptr->doGenericColors)
+ {
+ qt_set_generic_blit(this, vinfo.bits_per_pixel,
+ vinfo.red.length, vinfo.green.length,
+ vinfo.blue.length, vinfo.transp.length,
+ vinfo.red.offset, vinfo.green.offset,
+ vinfo.blue.offset, vinfo.transp.offset);
+ }
+#endif
+
+#if 0
+#ifndef QT_NO_QWS_CURSOR
+ QScreenCursor::initSoftwareCursor();
+#endif
+#endif
+ blank(false);
+
+ return true;
+}
+
+void QLinuxFbIntegration::setPixelFormat(struct fb_var_screeninfo info)
+{
+ const fb_bitfield rgba[4] = { info.red, info.green,
+ info.blue, info.transp };
+
+ QImage::Format format = QImage::Format_Invalid;
+
+ switch (d) {
+ case 32: {
+ const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0},
+ {0, 8, 0}, {24, 8, 0}};
+ const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0},
+ {16, 8, 0}, {24, 8, 0}};
+ if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_ARGB32;
+ } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB32;
+ } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB32;
+ pixeltype = BGRPixel;
+ }
+ break;
+ }
+ case 24: {
+ const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0},
+ {0, 8, 0}, {0, 0, 0}};
+ const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0},
+ {16, 8, 0}, {0, 0, 0}};
+ if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB888;
+ } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB888;
+ pixeltype = BGRPixel;
+ }
+ break;
+ }
+ case 18: {
+ const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0},
+ {0, 6, 0}, {0, 0, 0}};
+ if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0)
+ format = QImage::Format_RGB666;
+ break;
+ }
+ case 16: {
+ const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0},
+ {0, 5, 0}, {0, 0, 0}};
+ const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0},
+ {11, 5, 0}, {0, 0, 0}};
+ if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB16;
+ } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB16;
+ pixeltype = BGRPixel;
+ }
+ break;
+ }
+ case 15: {
+ const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0},
+ {0, 5, 0}, {15, 1, 0}};
+ const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0},
+ {10, 5, 0}, {15, 1, 0}};
+ if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB555;
+ } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) {
+ format = QImage::Format_RGB555;
+ pixeltype = BGRPixel;
+ }
+ break;
+ }
+ case 12: {
+ const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0},
+ {0, 4, 0}, {0, 0, 0}};
+ if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0)
+ format = QImage::Format_RGB444;
+ break;
+ }
+ case 8:
+ break;
+ case 1:
+ format = QImage::Format_Mono; //###: LSB???
+ break;
+ default:
+ break;
+ }
+
+ screenFormat = format;
+}
+
+void QLinuxFbIntegration::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo)
+{
+ if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) {
+ screencols= (vinfo.bits_per_pixel==8) ? 256 : 16;
+ cmap.start=0;
+ cmap.len=screencols;
+ cmap.red=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ cmap.green=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ cmap.blue=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+ cmap.transp=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*screencols);
+
+ if (screencols==16) {
+ if (finfo.type == FB_TYPE_PACKED_PIXELS) {
+ // We'll setup a grayscale cmap for 4bpp linear
+ int val = 0;
+ for (int idx = 0; idx < 16; ++idx, val += 17) {
+ cmap.red[idx] = (val<<8)|val;
+ cmap.green[idx] = (val<<8)|val;
+ cmap.blue[idx] = (val<<8)|val;
+ screenclut[idx]=qRgb(val, val, val);
+ }
+ } else {
+ // Default 16 colour palette
+ // Green is now trolltech green so certain images look nicer
+ // black d_gray l_gray white red green blue cyan magenta yellow
+ unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 };
+ unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F };
+ unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 };
+
+ for (int idx = 0; idx < 16; ++idx) {
+ cmap.red[idx] = ((reds[idx]) << 8)|reds[idx];
+ cmap.green[idx] = ((greens[idx]) << 8)|greens[idx];
+ cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx];
+ cmap.transp[idx] = 0;
+ screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]);
+ }
+ }
+ } else {
+ if (grayscale) {
+ // Build grayscale palette
+ int i;
+ for(i=0;i<screencols;++i) {
+ int bval = screencols == 256 ? i : (i << 4);
+ ushort val = (bval << 8) | bval;
+ cmap.red[i] = val;
+ cmap.green[i] = val;
+ cmap.blue[i] = val;
+ cmap.transp[i] = 0;
+ screenclut[i] = qRgb(bval,bval,bval);
+ }
+ } else {
+ // 6x6x6 216 color cube
+ int idx = 0;
+ for(int ir = 0x0; ir <= 0xff; ir+=0x33) {
+ for(int ig = 0x0; ig <= 0xff; ig+=0x33) {
+ for(int ib = 0x0; ib <= 0xff; ib+=0x33) {
+ cmap.red[idx] = (ir << 8)|ir;
+ cmap.green[idx] = (ig << 8)|ig;
+ cmap.blue[idx] = (ib << 8)|ib;
+ cmap.transp[idx] = 0;
+ screenclut[idx]=qRgb(ir, ig, ib);
+ ++idx;
+ }
+ }
+ }
+ // Fill in rest with 0
+ for (int loopc=0; loopc<40; ++loopc) {
+ screenclut[idx]=0;
+ ++idx;
+ }
+ screencols=idx;
+ }
+ }
+ } else if(finfo.visual==FB_VISUAL_DIRECTCOLOR) {
+ cmap.start=0;
+ int rbits=0,gbits=0,bbits=0;
+ switch (vinfo.bits_per_pixel) {
+ case 8:
+ rbits=vinfo.red.length;
+ gbits=vinfo.green.length;
+ bbits=vinfo.blue.length;
+ if(rbits==0 && gbits==0 && bbits==0) {
+ // cyber2000 driver bug hack
+ rbits=3;
+ gbits=3;
+ bbits=2;
+ }
+ break;
+ case 15:
+ rbits=5;
+ gbits=5;
+ bbits=5;
+ break;
+ case 16:
+ rbits=5;
+ gbits=6;
+ bbits=5;
+ break;
+ case 18:
+ case 19:
+ rbits=6;
+ gbits=6;
+ bbits=6;
+ break;
+ case 24: case 32:
+ rbits=gbits=bbits=8;
+ break;
+ }
+ screencols=cmap.len=1<<qMax(rbits,qMax(gbits,bbits));
+ cmap.red=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*256);
+ cmap.green=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*256);
+ cmap.blue=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*256);
+ cmap.transp=(unsigned short int *)
+ malloc(sizeof(unsigned short int)*256);
+ for(unsigned int i = 0x0; i < cmap.len; i++) {
+ cmap.red[i] = i*65535/((1<<rbits)-1);
+ cmap.green[i] = i*65535/((1<<gbits)-1);
+ cmap.blue[i] = i*65535/((1<<bbits)-1);
+ cmap.transp[i] = 0;
+ }
+ }
+}
+
+void QLinuxFbIntegration::blank(bool on)
+{
+ if (d_ptr->blank == on)
+ return;
+
+#if defined(QT_QWS_IPAQ)
+ if (on)
+ system("apm -suspend");
+#else
+ if (d_ptr->fd == -1)
+ return;
+// Some old kernel versions don't have this. These defines should go
+// away eventually
+#if defined(FBIOBLANK)
+#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING)
+ ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING);
+#else
+ ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0);
+#endif
+#endif
+#endif
+
+ d_ptr->blank = on;
+}
+
+QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QRasterPixmapData(type);
+}
+
+QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) const
+{
+ QFbWindowSurface * surface =
+ new QFbWindowSurface(mPrimaryScreen, widget);
+ return surface;
+}
+
+QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const
+{
+ QFbWindow *w = new QFbWindow(widget);
+ mPrimaryScreen->addWindow(w);
+ return w;
+}
+
+QPlatformFontDatabase *QLinuxFbIntegration::fontDatabase() const
+{
+ return fontDb;
+}
+
+QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w,
+ int h, int lstep, QImage::Format screenFormat) : compositePainter(0)
+{
+ data = d;
+ mGeometry = QRect(0,0,w,h);
+ bytesPerLine = lstep;
+ mFormat = screenFormat;
+ mDepth = 16;
+ mScreenImage = new QImage(mGeometry.width(), mGeometry.height(),
+ mFormat);
+ mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(),
+ bytesPerLine, mFormat);
+ cursor = new QPlatformSoftwareCursor(this);
+}
+
+void QLinuxFbScreen::setGeometry(QRect rect)
+{
+ mGeometry = rect;
+ delete mFbScreenImage;
+ mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(),
+ bytesPerLine, mFormat);
+ delete compositePainter;
+ compositePainter = 0;
+
+ delete mScreenImage;
+ mScreenImage = new QImage(mGeometry.width(), mGeometry.height(),
+ mFormat);
+}
+
+void QLinuxFbScreen::setFormat(QImage::Format format)
+{
+ mFormat = format;
+ delete mFbScreenImage;
+ mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(),
+ bytesPerLine, mFormat);
+ delete compositePainter;
+ compositePainter = 0;
+
+ delete mScreenImage;
+ mScreenImage = new QImage(mGeometry.width(), mGeometry.height(),
+ mFormat);
+}
+
+QRegion QLinuxFbScreen::doRedraw()
+{
+ QRegion touched;
+ touched = QFbScreen::doRedraw();
+
+ if (!compositePainter) {
+ compositePainter = new QPainter(mFbScreenImage);
+ }
+
+ QVector<QRect> rects = touched.rects();
+ for (int i = 0; i < rects.size(); i++)
+ compositePainter->drawImage(rects[i], *mScreenImage, rects[i]);
+ return touched;
+}
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
new file mode 100644
index 0000000..e93495c
--- /dev/null
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** 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 plugins 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 QGRAPHICSSYSTEM_LINUXFB_H
+#define QGRAPHICSSYSTEM_LINUXFB_H
+
+#include <QPlatformIntegration>
+#include "../fb_base/fb_base.h"
+
+QT_BEGIN_NAMESPACE
+
+class QLinuxFbScreen : public QFbScreen
+{
+ Q_OBJECT
+public:
+ QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat);
+ void setGeometry(QRect rect);
+ void setFormat(QImage::Format format);
+
+public slots:
+ QRegion doRedraw();
+
+private:
+ QImage * mFbScreenImage;
+ uchar * data;
+ int bytesPerLine;
+
+ QPainter *compositePainter;
+};
+
+class QLinuxFbIntegrationPrivate;
+struct fb_cmap;
+struct fb_var_screeninfo;
+struct fb_fix_screeninfo;
+
+class QLinuxFbIntegration : public QPlatformIntegration
+{
+public:
+ QLinuxFbIntegration();
+ ~QLinuxFbIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+private:
+ QLinuxFbScreen *mPrimaryScreen;
+ QList<QPlatformScreen *> mScreens;
+ QLinuxFbIntegrationPrivate *d_ptr;
+
+ enum PixelType { NormalPixel, BGRPixel };
+
+ QRgb screenclut[256];
+ int screencols;
+
+ uchar * data;
+
+ QImage::Format screenFormat;
+ int w;
+ int lstep;
+ int h;
+ int d;
+ PixelType pixeltype;
+ bool grayscale;
+
+ int dw;
+ int dh;
+
+ int size; // Screen size
+ int mapsize; // Total mapped memory
+
+ int displayId;
+
+ int physWidth;
+ int physHeight;
+
+ bool canaccel;
+ int dataoffset;
+ int cacheStart;
+
+ bool connect(const QString &displaySpec);
+ bool initDevice();
+ void setPixelFormat(struct fb_var_screeninfo);
+ void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo);
+ void blank(bool on);
+ QPlatformFontDatabase *fontDb;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp
new file mode 100644
index 0000000..82c15c2
--- /dev/null
+++ b/src/plugins/platforms/minimal/main.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 <QtGui/QPlatformIntegrationPlugin>
+#include "qminimalintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QMinimalIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QMinimalIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "Minimal";
+ return list;
+}
+
+QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "minimal")
+ return new QMinimalIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(minimal, QMinimalIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro
new file mode 100644
index 0000000..438a88e
--- /dev/null
+++ b/src/plugins/platforms/minimal/minimal.pro
@@ -0,0 +1,13 @@
+TARGET = qminimal
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+SOURCES = main.cpp \
+ qminimalintegration.cpp \
+ qminimalwindowsurface.cpp
+HEADERS = qminimalintegration.h \
+ qminimalwindowsurface.h
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp
new file mode 100644
index 0000000..c90e92e
--- /dev/null
+++ b/src/plugins/platforms/minimal/qminimalintegration.cpp
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qminimalintegration.h"
+#include "qminimalwindowsurface.h"
+
+#include <QtGui/private/qpixmap_raster_p.h>
+#include <QtGui/QPlatformWindow>
+
+QMinimalIntegration::QMinimalIntegration()
+{
+ QMinimalScreen *mPrimaryScreen = new QMinimalScreen();
+
+ mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320);
+ mPrimaryScreen->mDepth = 16;
+ mPrimaryScreen->mFormat = QImage::Format_RGB16;
+
+ mScreens.append(mPrimaryScreen);
+}
+
+QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QRasterPixmapData(type);
+}
+
+QPlatformWindow *QMinimalIntegration::createPlatformWindow(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+ return new QPlatformWindow(widget);
+}
+
+QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget, WId winId) const
+{
+ Q_UNUSED(winId);
+ return new QMinimalWindowSurface(widget);
+}
diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h
new file mode 100644
index 0000000..95b952e
--- /dev/null
+++ b/src/plugins/platforms/minimal/qminimalintegration.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QPLATFORMINTEGRATION_MINIMAL_H
+#define QPLATFORMINTEGRATION_MINIMAL_H
+
+#include <QtGui/QPlatformIntegration>
+#include <QtGui/QPlatformScreen>
+
+QT_BEGIN_NAMESPACE
+
+class QMinimalScreen : public QPlatformScreen
+{
+public:
+ QMinimalScreen()
+ : mDepth(16), mFormat(QImage::Format_RGB16) {}
+
+ QRect geometry() const { return mGeometry; }
+ int depth() const { return mDepth; }
+ QImage::Format format() const { return mFormat; }
+
+public:
+ QRect mGeometry;
+ int mDepth;
+ QImage::Format mFormat;
+ QSize mPhysicalSize;
+};
+
+class QMinimalIntegration : public QPlatformIntegration
+{
+public:
+ QMinimalIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+private:
+ QList<QPlatformScreen *> mScreens;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp
new file mode 100644
index 0000000..acf0e6e
--- /dev/null
+++ b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qminimalwindowsurface.h"
+#include <QtCore/qdebug.h>
+#include <QtGui/private/qapplication_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QMinimalWindowSurface::QMinimalWindowSurface(QWidget *window)
+ : QWindowSurface(window)
+{
+ //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this;
+}
+
+QMinimalWindowSurface::~QMinimalWindowSurface()
+{
+}
+
+QPaintDevice *QMinimalWindowSurface::paintDevice()
+{
+ //qDebug() << "QMinimalWindowSurface::paintDevice";
+ return &mImage;
+}
+
+void QMinimalWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(region);
+ Q_UNUSED(offset);
+
+ static int c = 0;
+ QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0'));
+ qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData();
+ mImage.save(filename);
+}
+
+void QMinimalWindowSurface::resize(const QSize &size)
+{
+ //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect;
+ QWindowSurface::resize(size);
+ QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format();
+ if (mImage.size() != size)
+ mImage = QImage(size, format);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.h b/src/plugins/platforms/minimal/qminimalwindowsurface.h
new file mode 100644
index 0000000..98b26f6
--- /dev/null
+++ b/src/plugins/platforms/minimal/qminimalwindowsurface.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QWINDOWSURFACE_MINIMAL_H
+#define QWINDOWSURFACE_MINIMAL_H
+
+#include <QtGui/private/qwindowsurface_p.h>
+
+#include <QtGui/QPlatformWindow>
+
+QT_BEGIN_NAMESPACE
+
+class QMinimalWindowSurface : public QWindowSurface
+{
+public:
+ QMinimalWindowSurface(QWidget *window);
+ ~QMinimalWindowSurface();
+
+ QPaintDevice *paintDevice();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void resize(const QSize &size);
+
+private:
+ QImage mImage;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp
new file mode 100644
index 0000000..527747e
--- /dev/null
+++ b/src/plugins/platforms/openkode/main.cpp
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 <QtGui/QPlatformIntegrationPlugin>
+#include "qopenkodeintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOpenKODEPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QOpenKODEPlugin::keys() const
+{
+ QStringList list;
+ list << "OpenKODE";
+ return list;
+}
+
+QPlatformIntegration * QOpenKODEPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "openkode")
+ return new QOpenKODEIntegration;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(openkode, QOpenKODEPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro
new file mode 100644
index 0000000..c8ae415
--- /dev/null
+++ b/src/plugins/platforms/openkode/openkode.pro
@@ -0,0 +1,42 @@
+TARGET = qopenkodeintegration
+include(../../qpluginbase.pri)
+
+QT += opengl
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+SOURCES = main.cpp \
+ qopenkodeintegration.cpp \
+ qopenkodewindow.cpp \
+ ../eglconvenience/qeglplatformcontext.cpp \
+ ../eglconvenience/qeglconvenience.cpp \
+ qopenkodeeventloopintegration.cpp
+
+HEADERS = qopenkodeintegration.h \
+ qopenkodewindow.h \
+ ../eglconvenience/qeglplatformcontext.h \
+ ../eglconvenience/qeglconvenience.h \
+ qopenkodeeventloopintegration.h \
+ openkodekeytranslator.h
+
+include (../fontdatabases/genericunix/genericunix.pri)
+
+RESOURCES = resources.qrc
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
+
+LIBS += -lKD -lEGL
+!isEmpty(QMAKE_INCDIR_OPENGL_ES2){
+ INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2
+}
+!isEmpty(QMAKE_LIBDIR_OPENGL_ES2){
+ for(p, QMAKE_LIBDIR_OPENGL_ES2) {
+ exists($$p):LIBS += -L$$p
+ }
+}
+!isEmpty(QMAKE_LIBS_OPENGL_ES2){
+ LIBS += $$QMAKE_LIBS_OPENGL_ES2
+} else {
+ LIBS += -lGLESv2
+}
diff --git a/src/plugins/platforms/openkode/openkodekeytranslator.h b/src/plugins/platforms/openkode/openkodekeytranslator.h
new file mode 100644
index 0000000..0070edc
--- /dev/null
+++ b/src/plugins/platforms/openkode/openkodekeytranslator.h
@@ -0,0 +1,244 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 OPENKODEKEYTRANSLATOR_H
+#define OPENKODEKEYTRANSLATOR_H
+
+#ifdef KD_ATX_keyboard
+
+#include <KD/ATX_keyboard.h>
+
+QT_BEGIN_NAMESPACE
+
+Qt::Key keyTranslator( int key )
+{
+ switch (key) {
+// KD_KEY_ACCEPT_ATX:
+// KD_KEY_AGAIN_ATX:
+// KD_KEY_ALLCANDIDATES_ATX
+// KD_KEY_ALPHANUMERIC_ATX
+ case KD_KEY_ALT_ATX:
+ return Qt::Key_Alt;
+ case KD_KEY_ALTGRAPH_ATX:
+ return Qt::Key_AltGr;
+// KD_KEY_APPS_ATX
+// KD_KEY_ATTN_ATX
+// KD_KEY_BROWSERBACK_ATX
+// KD_KEY_BROWSERFAVORITES_ATX
+// KD_KEY_BROWSERFORWARD_ATX
+// KD_KEY_BROWSERHOME_ATX
+// KD_KEY_BROWSERREFRESH_ATX
+// KD_KEY_BROWSERSEARCH_ATX
+// KD_KEY_BROWSERSTOP_ATX
+ case KD_KEY_CAPSLOCK_ATX:
+ return Qt::Key_CapsLock;
+ case KD_KEY_CLEAR_ATX:
+ return Qt::Key_Clear;
+ case KD_KEY_CODEINPUT_ATX:
+ return Qt::Key_Codeinput;
+// KD_KEY_COMPOSE_ATX
+ case KD_KEY_CONTROL_ATX:
+ return Qt::Key_Control;
+// KD_KEY_CRSEL_ATX
+// KD_KEY_CONVERT_ATX
+ case KD_KEY_COPY_ATX:
+ return Qt::Key_Copy;
+ case KD_KEY_CUT_ATX:
+ return Qt::Key_Cut;
+ case KD_KEY_DOWN_ATX:
+ return Qt::Key_Down;
+ case KD_KEY_END_ATX:
+ return Qt::Key_End;
+ case KD_KEY_ENTER_ATX:
+ return Qt::Key_Enter;
+// KD_KEY_ERASEEOF_ATX
+// KD_KEY_EXECUTE_ATX
+// KD_KEY_EXSEL_ATX
+ case KD_KEY_F1_ATX:
+ return Qt::Key_F1;
+ case KD_KEY_F2_ATX:
+ return Qt::Key_F2;
+ case KD_KEY_F3_ATX:
+ return Qt::Key_F3;
+ case KD_KEY_F4_ATX:
+ return Qt::Key_F4;
+ case KD_KEY_F5_ATX:
+ return Qt::Key_F5;
+ case KD_KEY_F6_ATX:
+ return Qt::Key_F6;
+ case KD_KEY_F7_ATX:
+ return Qt::Key_F7;
+ case KD_KEY_F8_ATX:
+ return Qt::Key_F8;
+ case KD_KEY_F9_ATX:
+ return Qt::Key_F9;
+ case KD_KEY_F10_ATX:
+ return Qt::Key_F10;
+ case KD_KEY_F11_ATX:
+ return Qt::Key_F11;
+ case KD_KEY_F12_ATX:
+ return Qt::Key_F12;
+ case KD_KEY_F13_ATX:
+ return Qt::Key_F13;
+ case KD_KEY_F14_ATX:
+ return Qt::Key_F14;
+ case KD_KEY_F15_ATX:
+ return Qt::Key_F15;
+ case KD_KEY_F16_ATX:
+ return Qt::Key_F16;
+ case KD_KEY_F17_ATX:
+ return Qt::Key_F17;
+ case KD_KEY_F18_ATX:
+ return Qt::Key_F18;
+ case KD_KEY_F19_ATX:
+ return Qt::Key_F19;
+ case KD_KEY_F20_ATX:
+ return Qt::Key_F20;
+ case KD_KEY_F21_ATX:
+ return Qt::Key_F21;
+ case KD_KEY_F22_ATX:
+ return Qt::Key_F22;
+ case KD_KEY_F23_ATX:
+ return Qt::Key_F23;
+ case KD_KEY_F24_ATX:
+ return Qt::Key_F24;
+// KD_KEY_FINALMODE_ATX
+// KD_KEY_FIND_ATX
+// KD_KEY_FULLWIDTH_ATX
+// KD_KEY_HALFWIDTH_ATX
+ case KD_KEY_HANGULMODE_ATX:
+ return Qt::Key_Hangul;
+// KD_KEY_HANJAMODE_ATX
+ case KD_KEY_HELP_ATX:
+ return Qt::Key_Help;
+ case KD_KEY_HIRAGANA_ATX:
+ return Qt::Key_Hiragana;
+ case KD_KEY_HOME_ATX:
+ return Qt::Key_Home;
+ case KD_KEY_INSERT_ATX:
+ return Qt::Key_Insert;
+// KD_KEY_JAPANESEHIRAGANA_ATX:
+// KD_KEY_JAPANESEKATAKANA_ATX
+// KD_KEY_JAPANESEROMAJI_ATX
+// KD_KEY_JUNJAMODE_ATX
+ case KD_KEY_KANAMODE_ATX:
+ return Qt::Key_Kana_Lock; //?
+ case KD_KEY_KANJIMODE_ATX:
+ return Qt::Key_Kanji;
+// KD_KEY_KATAKANA_ATX
+// KD_KEY_LAUNCHAPPLICATION1_ATX
+// KD_KEY_LAUNCHAPPLICATION2_ATX
+ case KD_KEY_LAUNCHMAIL_ATX:
+ return Qt::Key_MailForward;
+ case KD_KEY_LEFT_ATX:
+ return Qt::Key_Left;
+ case KD_KEY_META_ATX:
+ return Qt::Key_Meta;
+ case KD_KEY_MEDIANEXTTRACK_ATX:
+ return Qt::Key_MediaNext;
+ case KD_KEY_MEDIAPLAYPAUSE_ATX:
+ return Qt::Key_MediaPause;
+ case KD_KEY_MEDIAPREVIOUSTRACK_ATX:
+ return Qt::Key_MediaPrevious;
+ case KD_KEY_MEDIASTOP_ATX:
+ return Qt::Key_MediaStop;
+ case KD_KEY_MODECHANGE_ATX:
+ return Qt::Key_Mode_switch;
+// KD_KEY_NONCONVERT_ATX
+ case KD_KEY_NUMLOCK_ATX:
+ return Qt::Key_NumLock;
+ case KD_KEY_PAGEDOWN_ATX:
+ return Qt::Key_PageDown;
+ case KD_KEY_PAGEUP_ATX:
+ return Qt::Key_PageUp;
+ case KD_KEY_PASTE_ATX:
+ return Qt::Key_Paste;
+ case KD_KEY_PAUSE_ATX:
+ return Qt::Key_Pause;
+ case KD_KEY_PLAY_ATX:
+ return Qt::Key_Play;
+// KD_KEY_PREVIOUSCANDIDATE_ATX
+ case KD_KEY_PRINTSCREEN_ATX:
+ return Qt::Key_Print;
+// case KD_KEY_PROCESS_ATX
+// case KD_KEY_PROPS_ATX
+ case KD_KEY_RIGHT_ATX:
+ return Qt::Key_Right;
+// KD_KEY_ROMANCHARACTERS_ATX
+ case KD_KEY_SCROLL_ATX:
+ return Qt::Key_ScrollLock;
+ case KD_KEY_SELECT_ATX:
+ return Qt::Key_Select;
+// KD_KEY_SELECTMEDIA_ATX
+ case KD_KEY_SHIFT_ATX:
+ return Qt::Key_Shift;
+ case KD_KEY_STOP_ATX:
+ return Qt::Key_Stop;
+ case KD_KEY_UP_ATX:
+ return Qt::Key_Up;
+// KD_KEY_UNDO_ATX
+ case KD_KEY_VOLUMEDOWN_ATX:
+ return Qt::Key_VolumeDown;
+ case KD_KEY_VOLUMEMUTE_ATX:
+ return Qt::Key_VolumeMute;
+ case KD_KEY_VOLUMEUP_ATX:
+ return Qt::Key_VolumeUp;
+ case KD_KEY_WIN_ATX:
+ return Qt::Key_Meta;
+ case KD_KEY_ZOOM_ATX:
+ return Qt::Key_Zoom;
+ case 0x8:
+ return Qt::Key_Backspace;
+ case 0x1b:
+ return Qt::Key_Escape;
+ case 0x9:
+ return Qt::Key_Tab;
+
+ default:
+ break;
+ }
+
+ return Qt::Key_Escape;
+}
+
+QT_END_NAMESPACE
+#endif //KD_ATX_keyboard
+#endif // OPENKODEKEYTRANSLATOR_H
diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp
new file mode 100644
index 0000000..73d874c
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qopenkodeeventloopintegration.h"
+
+#include <QDebug>
+
+#include <KD/kd.h>
+#include <KD/ATX_keyboard.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int QT_EVENT_WAKEUP_EVENTLOOP = KD_EVENT_USER + 1;
+
+void kdprocessevent( const KDEvent *event)
+{
+ switch (event->type) {
+ case KD_EVENT_INPUT:
+ qDebug() << "KD_EVENT_INPUT";
+ break;
+ case KD_EVENT_INPUT_POINTER:
+ qDebug() << "KD_EVENT_INPUT_POINTER";
+ break;
+ case KD_EVENT_WINDOW_CLOSE:
+ qDebug() << "KD_EVENT_WINDOW_CLOSE";
+ break;
+ case KD_EVENT_WINDOWPROPERTY_CHANGE:
+ qDebug() << "KD_EVENT_WINDOWPROPERTY_CHANGE";
+ qDebug() << event->data.windowproperty.pname;
+ break;
+ case KD_EVENT_WINDOW_FOCUS:
+ qDebug() << "KD_EVENT_WINDOW_FOCUS";
+ break;
+ case KD_EVENT_WINDOW_REDRAW:
+ qDebug() << "KD_EVENT_WINDOW_REDRAW";
+ break;
+ case KD_EVENT_USER:
+ qDebug() << "KD_EVENT_USER";
+ break;
+ case KD_EVENT_INPUT_KEY_ATX:
+ qDebug() << "KD_EVENT_INPUT_KEY_ATX";
+ break;
+ case QT_EVENT_WAKEUP_EVENTLOOP:
+// qDebug() << "QT_EVENT_WAKEUP_EVENTLOOP";
+ break;
+ default:
+ break;
+ }
+
+ kdDefaultEvent(event);
+
+}
+
+QOpenKODEEventLoopIntegration::QOpenKODEEventLoopIntegration()
+{
+ m_kdThread = kdThreadSelf();
+ kdInstallCallback(&kdprocessevent,QT_EVENT_WAKEUP_EVENTLOOP,this);
+}
+
+void QOpenKODEEventLoopIntegration::processEvents(qint64 msec)
+{
+ if (msec == 0)
+ msec = -1;
+ const KDEvent *event = kdWaitEvent(msec*1000);
+ if (event) {
+ kdDefaultEvent(event);
+ while ((event = kdWaitEvent(0)) != 0) {
+ kdDefaultEvent(event);
+ }
+ }
+}
+
+void QOpenKODEEventLoopIntegration::wakeup()
+{
+ KDEvent *event = kdCreateEvent();
+ event->type = QT_EVENT_WAKEUP_EVENTLOOP;
+ event->userptr = this;
+ kdPostThreadEvent(event,m_kdThread);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h
new file mode 100644
index 0000000..61bd444
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QOPENKODEEVENTLOOPINTEGRATION_H
+#define QOPENKODEEVENTLOOPINTEGRATION_H
+
+#include <QtGui/QPlatformEventLoopIntegration>
+
+class KDThread;
+class KDEvent;
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+class QOpenKODEEventLoopIntegration : public QPlatformEventLoopIntegration
+{
+public:
+ QOpenKODEEventLoopIntegration();
+ void processEvents(qint64 msec);
+ void wakeup();
+
+ void processInputEvent(const KDEvent *event);
+private:
+
+ KDThread *m_kdThread;
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif // QOPENKODEEVENTLOOPINTEGRATION_H
diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp
new file mode 100644
index 0000000..60be897
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qopenkodeintegration.h"
+#include "qopenkodewindow.h"
+#include "qopenkodeeventloopintegration.h"
+
+#include <QtOpenGL/private/qpixmapdata_gl_p.h>
+#include <QtOpenGL/private/qwindowsurface_gl_p.h>
+
+#include <QtGui/private/qpixmap_raster_p.h>
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qthread.h>
+#include <QtCore/qfile.h>
+
+#include "qgenericunixfontdatabase.h"
+
+#include <KD/kd.h>
+#include <KD/NV_display.h>
+#include <KD/NV_initialize.h>
+
+#include <EGL/egl.h>
+
+#include "GLES2/gl2ext.h"
+
+QT_BEGIN_NAMESPACE
+
+QOpenKODEScreen::QOpenKODEScreen(KDDisplayNV *kdDisplay, KDDesktopNV *kdDesktop)
+ : mIsFullScreen(false)
+{
+ qDebug() << "QOpenKODEScreen::QOpenKODEIntegrationScreen()";
+
+ KDboolean enabled = KD_TRUE;
+ kdSetDisplayPropertybvNV(kdDisplay,
+ KD_DISPLAYPROPERTY_ENABLED_NV,
+ &enabled);
+ KDboolean power = KD_DISPLAY_POWER_ON;
+ kdSetDisplayPropertyivNV(kdDisplay,
+ KD_DISPLAYPROPERTY_POWER_NV,
+ &power);
+
+ kdSetDisplayPropertycvNV(kdDisplay,
+ KD_DISPLAYPROPERTY_DESKTOP_NAME_NV,
+ KD_DEFAULT_DESKTOP_NV);
+
+ KDDisplayModeNV mode;
+ if (kdGetDisplayModeNV(kdDisplay, &mode)) {
+ qErrnoWarning(kdGetError(), "Could not get display mode");
+ return;
+ }
+
+ qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh;
+
+ KDint desktopSize[] = { mode.width, mode.height };
+
+ if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) {
+ qErrnoWarning(kdGetError(), "Could not set desktop size");
+ return;
+ }
+
+ // Once we've set up the desktop and display we don't need them anymore
+ kdReleaseDisplayNV(kdDisplay);
+ kdReleaseDesktopNV(kdDesktop);
+
+ mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ if (mEglDisplay == EGL_NO_DISPLAY) {
+ qErrnoWarning("EGL failed to obtain display");
+ }
+
+ /* Initialize EGL display */
+ EGLBoolean rvbool = eglInitialize(mEglDisplay, 0, 0);
+ if (!rvbool) {
+ qErrnoWarning("EGL failed to initialize display");
+ }
+
+// cursor = new QOpenKODECursor(this);
+
+ mGeometry = QRect(0, 0, mode.width, mode.height);
+ mDepth = 24;
+ mFormat = QImage::Format_RGB32;
+
+
+}
+
+QOpenKODEIntegration::QOpenKODEIntegration()
+ : mEventLoopIntegration(0), mFontDb(new QGenericUnixFontDatabase())
+{
+ if (kdInitializeNV() == KD_ENOTINITIALIZED) {
+ qFatal("Did not manage to initialize openkode");
+ }
+
+ KDDisplaySystemNV *kdDisplaySystem = kdCreateDisplaySystemSnapshotNV(this);
+ KDint32 displayCount = 0;
+ kdGetDisplaySystemPropertyivNV(kdDisplaySystem, KD_DISPLAYPROPERTY_COUNT_NV, 0, &displayCount);
+
+ for (int i = 0; i < displayCount; i++) {
+ KDchar *displayName = 0;
+ KDsize displayNameLength = 0;
+ kdGetDisplaySystemPropertycvNV(kdDisplaySystem,KD_DISPLAYPROPERTY_NAME_NV,i,0,&displayNameLength);
+ if (!displayNameLength)
+ continue;
+ displayName = new KDchar[displayNameLength];
+ kdGetDisplaySystemPropertycvNV(kdDisplaySystem,KD_DISPLAYPROPERTY_NAME_NV,i,displayName,&displayNameLength);
+
+ KDDisplayNV *display = kdGetDisplayNV(displayName,this);
+ if (!display || display == (void*)-1) {
+ qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer");
+ return;
+ }
+ if (displayNameLength)
+ delete displayName;
+
+ KDchar *desktopName = 0;
+ KDsize desktopNameLength = 0;
+ bool openkodeImpDoesNotFail = false;
+ if (openkodeImpDoesNotFail) {
+ qDebug() << "printing desktopname";
+ kdGetDisplayPropertycvNV(display,KD_DISPLAYPROPERTY_DESKTOP_NAME_NV,desktopName,&desktopNameLength);
+ if (desktopNameLength) {
+ desktopName = new KDchar[desktopNameLength];
+ kdGetDisplayPropertycvNV(display,KD_DISPLAYPROPERTY_DESKTOP_NAME_NV,desktopName,&desktopNameLength);
+ } else {
+ desktopName = KD_DEFAULT_DESKTOP_NV;
+ }
+ } else {
+ desktopName = KD_DEFAULT_DESKTOP_NV;
+ }
+
+ KDDesktopNV *desktop = kdGetDesktopNV(desktopName,this);
+ if (!desktop || desktop == (void*)-1) {
+ qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer");
+ kdReleaseDisplayNV(display);
+ return;
+ }
+ if (desktopNameLength)
+ delete desktopName;
+
+ QOpenKODEScreen *screen = new QOpenKODEScreen(display,desktop);
+ mScreens.append(screen);
+ }
+}
+
+QOpenKODEIntegration::~QOpenKODEIntegration()
+{
+ delete mEventLoopIntegration;
+ delete mFontDb;
+}
+
+QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QGLPixmapData(type);
+}
+
+QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) const
+{
+ return new QOpenKODEWindow(tlw);
+}
+
+QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId) const
+{
+ QWindowSurface *returnSurface = 0;
+ switch (widget->platformWindowFormat().windowApi()) {
+
+ case QPlatformWindowFormat::Raster:
+ case QPlatformWindowFormat::OpenGL:
+ returnSurface = new QGLWindowSurface(widget);
+ break;
+
+ case QPlatformWindowFormat::OpenVG:
+// returnSurface = new QVGWindowSurface(widget);
+ break;
+
+ default:
+ returnSurface = new QGLWindowSurface(widget);
+ break;
+ }
+
+ return returnSurface;
+}
+
+bool QOpenKODEIntegration::hasOpenGL() const
+{
+ return true;
+}
+
+QPlatformEventLoopIntegration *QOpenKODEIntegration::createEventLoopIntegration() const
+{
+ if (!mEventLoopIntegration) {
+ QOpenKODEIntegration *that = const_cast<QOpenKODEIntegration *>(this);
+ that->mEventLoopIntegration = new QOpenKODEEventLoopIntegration;
+ }
+ return mEventLoopIntegration;
+}
+
+QPlatformFontDatabase *QOpenKODEIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h
new file mode 100644
index 0000000..a067491
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodeintegration.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QGRAPHICSSYSTEM_OPENKODE_H
+#define QGRAPHICSSYSTEM_OPENKODE_H
+
+#include "qopenkodeeventloopintegration.h"
+
+#include <QtCore/qsemaphore.h>
+
+#include <QtGui/QPlatformIntegration>
+#include <QtGui/QPlatformScreen>
+#include <QtGui/QPlatformGLContext>
+#include <QtGui/QPlatformFontDatabase>
+
+#include <GLES2/gl2.h>
+#include <EGL/egl.h>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+struct KDDesktopNV;
+struct KDDisplayNV;
+class QOpenKODECursor;
+
+class QOpenKODEScreen : public QPlatformScreen
+{
+ Q_OBJECT
+public:
+ QOpenKODEScreen(KDDisplayNV *kdDisplay, KDDesktopNV *kdDesktop);
+ ~QOpenKODEScreen() {}
+
+ QRect geometry() const { return mGeometry; }
+ int depth() const { return mDepth; }
+ QImage::Format format() const { return mFormat; }
+
+ EGLDisplay eglDisplay() { return mEglDisplay; }
+
+ bool isFullScreen() const {return mIsFullScreen;}
+ void setFullScreen(bool fullscreen) { mIsFullScreen = fullscreen; }
+private:
+ QRect mGeometry;
+ int mDepth;
+ QImage::Format mFormat;
+ EGLDisplay mEglDisplay;
+ bool mIsFullScreen;
+};
+
+class QOpenKODEIntegration : public QPlatformIntegration
+{
+public:
+ QOpenKODEIntegration();
+ ~QOpenKODEIntegration();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ bool hasOpenGL() const;
+
+ QPlatformEventLoopIntegration *createEventLoopIntegration() const;
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+ virtual QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ static GLuint blitterProgram();
+
+private:
+ QList<QPlatformScreen *> mScreens;
+ QOpenKODEEventLoopIntegration *mEventLoopIntegration;
+ QPlatformFontDatabase *mFontDb;
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif
diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp
new file mode 100644
index 0000000..32517c6
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp
@@ -0,0 +1,316 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 "qopenkodewindow.h"
+#include "qopenkodeintegration.h"
+#include "../eglconvenience/qeglplatformcontext.h"
+#include "../eglconvenience/qeglconvenience.h"
+
+#include <KD/kd.h>
+#include <KD/NV_display.h>
+#include <KD/kdplatform.h>
+#ifdef KD_ATX_keyboard
+#include "openkodekeytranslator.h"
+#endif
+
+#include <EGL/egl.h>
+
+#include <QtGui/qwidget.h>
+#include <QtGui/private/qwidget_p.h>
+#include <QtGui/private/qapplication_p.h>
+
+#include <QtCore/qvector.h>
+#include <QtCore/QDebug>
+
+QT_BEGIN_NAMESPACE
+
+void kdProcessMouseEvents( const KDEvent *event )
+{
+ QOpenKODEWindow *window = static_cast<QOpenKODEWindow *>(event->userptr);
+ window->processMouseEvents(event);
+}
+
+#ifdef KD_ATX_keyboard
+void kdProcessKeyEvents( const KDEvent *event )
+{
+ QOpenKODEWindow *window = static_cast<QOpenKODEWindow *>(event->userptr);
+ window->processKeyEvents(event);
+}
+#endif //KD_ATX_keyboard
+
+QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw)
+ : QPlatformWindow(tlw), isFullScreen(false)
+{
+ if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenVG) {
+ m_eglApi = EGL_OPENVG_API;
+ } else {
+ m_eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION);
+ m_eglContextAttrs.append(2);
+
+ m_eglApi = EGL_OPENGL_ES_API;
+ }
+ eglBindAPI(m_eglApi);
+
+ m_eglContextAttrs.append(EGL_NONE);
+ m_eglWindowAttrs.append(EGL_NONE);
+
+ QList<QPlatformScreen *> screens = QApplicationPrivate::platformIntegration()->screens();
+ //XXXX: jl figure out how to pick the correct screen.
+// Q_ASSERT(screens.size() > tlw->d_func()->screenNumber);
+// QOpenKODEScreen *screen = qobject_cast<QOpenKODEScreen *>(screens.at(tlw->d_func()->screenNumber));
+ QOpenKODEScreen *screen = qobject_cast<QOpenKODEScreen *>(screens.at(0));
+ if (!screen) {
+ qErrnoWarning("Could not make QOpenKODEWindow without a screen");
+ }
+
+ QPlatformWindowFormat format = tlw->platformWindowFormat();
+ format.setRedBufferSize(5);
+ format.setGreenBufferSize(6);
+ format.setBlueBufferSize(5);
+
+ m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),format);
+
+ m_kdWindow = kdCreateWindow(screen->eglDisplay(),
+ m_eglConfig,
+ this);
+ kdInstallCallback(kdProcessMouseEvents,KD_EVENT_INPUT_POINTER,this);
+#ifdef KD_ATX_keyboard
+ kdInstallCallback(kdProcessKeyEvents, KD_EVENT_INPUT_KEY_ATX,this);
+#endif //KD_ATX_keyboard
+
+ if (!m_kdWindow) {
+ qErrnoWarning(kdGetError(), "Error creating native window");
+ return;
+ }
+
+ KDboolean exclusive(false);
+ if (kdSetWindowPropertybv(m_kdWindow,KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, &exclusive)) {
+ isFullScreen = true;
+ }
+
+ if (isFullScreen) {
+ tlw->setGeometry(screen->geometry());
+ screen->setFullScreen(isFullScreen);
+ }else {
+ const KDint windowSize[2] = { tlw->width(), tlw->height() };
+ if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) {
+ qErrnoWarning(kdGetError(), "Could not set native window size");
+ }
+ KDboolean visibillity(false);
+ if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) {
+ qErrnoWarning(kdGetError(), "Could not set visibillity to false");
+ }
+
+ const KDint windowPos[2] = { tlw->x(), tlw->y() };
+ if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) {
+ qErrnoWarning(kdGetError(), "Could not set native window position");
+ return;
+ }
+ }
+
+
+
+
+ if (!isFullScreen || (isFullScreen && !QPlatformGLContext::defaultSharedContext())) {
+ if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) {
+ qErrnoWarning(kdGetError(), "Could not realize native window");
+ return;
+ }
+
+ EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData());
+ m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(), m_eglConfig,
+ m_eglContextAttrs.data(), surface, m_eglApi);
+ m_platformGlContext->makeDefaultSaredContext();
+ } else {
+ m_platformGlContext = static_cast<QEGLPlatformContext *>(QPlatformGLContext::defaultSharedContext());
+ kdDestroyWindow(m_kdWindow);
+ m_kdWindow = 0;
+ }
+}
+
+
+QOpenKODEWindow::~QOpenKODEWindow()
+{
+ if (m_platformGlContext != QPlatformGLContext::defaultSharedContext()) {
+ delete m_platformGlContext;
+ }
+ if (m_kdWindow)
+ kdDestroyWindow(m_kdWindow);
+}
+void QOpenKODEWindow::setGeometry(const QRect &rect)
+{
+ if (isFullScreen) {
+ QList<QPlatformScreen *> screens = QApplicationPrivate::platformIntegration()->screens();
+ QOpenKODEScreen *screen = qobject_cast<QOpenKODEScreen *>(screens.at(0));
+ widget()->setGeometry(screen->geometry());
+ return;
+ }
+ bool needToDeleteContext = false;
+ if (!isFullScreen) {
+ const QRect geo = geometry();
+ if (geo.size() != rect.size()) {
+ const KDint windowSize[2] = { rect.width(), rect.height() };
+ if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) {
+ qErrnoWarning(kdGetError(), "Could not set native window size");
+ //return;
+ } else {
+ needToDeleteContext = true;
+ }
+ }
+
+ if (geo.topLeft() != rect.topLeft()) {
+ const KDint windowPos[2] = { rect.x(), rect.y() };
+ if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) {
+ qErrnoWarning(kdGetError(), "Could not set native window position");
+ //return;
+ } else {
+ needToDeleteContext = true;
+ }
+ }
+ }
+
+ //need to recreate context
+ if (needToDeleteContext) {
+ qDebug() << "deleting context";
+ delete m_platformGlContext;
+
+ QList<QPlatformScreen *> screens = QApplicationPrivate::platformIntegration()->screens();
+ QOpenKODEScreen *screen = qobject_cast<QOpenKODEScreen *>(screens.at(0));
+ EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData());
+ m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,
+ m_eglContextAttrs.data(),surface,m_eglApi);
+ }
+}
+
+void QOpenKODEWindow::setVisible(bool visible)
+{
+ if (!m_kdWindow)
+ return;
+ KDboolean visibillity(visible);
+ if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) {
+ qErrnoWarning(kdGetError(), "Could not set visibillity property");
+ }
+}
+
+WId QOpenKODEWindow::winId() const
+{
+ static int i = 0;
+ return i++;
+}
+
+QPlatformGLContext *QOpenKODEWindow::glContext() const
+{
+ return m_platformGlContext;
+}
+
+void QOpenKODEWindow::raise()
+{
+ if (!m_kdWindow)
+ return;
+ KDboolean focus(true);
+ if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_FOCUS, &focus)) {
+ qErrnoWarning(kdGetError(), "Could not set focus");
+ }
+}
+
+void QOpenKODEWindow::lower()
+{
+ if (!m_kdWindow)
+ return;
+ KDboolean focus(false);
+ if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_FOCUS, &focus)) {
+ qErrnoWarning(kdGetError(), "Could not set focus");
+ }
+}
+
+void QOpenKODEWindow::processMouseEvents(const KDEvent *event)
+{
+ int x = event->data.inputpointer.x;
+ int y = event->data.inputpointer.y;
+ Qt::MouseButtons buttons;
+ switch(event->data.inputpointer.select) {
+ case 1:
+ buttons = Qt::LeftButton;
+ break;
+ default:
+ buttons = Qt::NoButton;
+ }
+ QPoint pos(x,y);
+ QWindowSystemInterface::handleMouseEvent(0,event->timestamp,pos,pos,buttons);
+}
+
+void QOpenKODEWindow::processKeyEvents(const KDEvent *event)
+{
+#ifdef KD_ATX_keyboard
+ //KD_KEY_PRESS_ATX 1
+ QEvent::Type keyPressed = QEvent::KeyRelease;
+ if (event->data.keyboardInputKey.flags)
+ keyPressed = QEvent::KeyPress;
+//KD_KEY_LOCATION_LEFT_ATX // dont care for now
+//KD_KEY_LOCATION_RIGHT_ATX
+//KD_KEY_LOCATION_NUMPAD_ATX
+ Qt::KeyboardModifiers mod = Qt::NoModifier;
+ int openkodeMods = event->data.keyboardInputKey.flags;
+ if (openkodeMods & KD_KEY_MODIFIER_SHIFT_ATX)
+ mod |= Qt::ShiftModifier;
+ if (openkodeMods & KD_KEY_MODIFIER_CTRL_ATX)
+ mod |= Qt::ControlModifier;
+ if (openkodeMods & KD_KEY_MODIFIER_ALT_ATX)
+ mod |= Qt::AltModifier;
+ if (openkodeMods & KD_KEY_MODIFIER_META_ATX)
+ mod |= Qt::MetaModifier;
+
+ Qt::Key qtKey;
+ QChar keyText;
+ int key = event->data.keyboardInputKey.keycode;
+ if (key >= 0x20 && key <= 0x0ff){ // 8 bit printable Latin1
+ qtKey = Qt::Key(key);
+ keyText = QChar(event->data.keyboardInputKeyChar.character);
+ if (!(mod & Qt::ShiftModifier))
+ keyText = keyText.toLower();
+ } else {
+ qtKey = keyTranslator(key);
+ }
+ QWindowSystemInterface::handleKeyEvent(0,event->timestamp,keyPressed,qtKey,mod,keyText);
+#endif
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h
new file mode 100644
index 0000000..4992807
--- /dev/null
+++ b/src/plugins/platforms/openkode/qopenkodewindow.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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 QOPENKODEWINDOW_H
+#define QOPENKODEWINDOW_H
+
+#include <QtGui/QPlatformWindow>
+#include <QtCore/QVector>
+
+#include <KD/kd.h>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+class QEGLPlatformContext;
+class QPlatformEventLoopIntegration;
+
+class QOpenKODEWindow : public QPlatformWindow
+{
+public:
+ QOpenKODEWindow(QWidget *tlw);
+ ~QOpenKODEWindow();
+
+ void setGeometry(const QRect &rect);
+ void setVisible(bool visible);
+ WId winId() const;
+
+ QPlatformGLContext *glContext() const;
+
+ void raise();
+ void lower();
+
+ void processKeyEvents( const KDEvent *event );
+ void processMouseEvents( const KDEvent *event );
+
+private:
+ struct KDWindow *m_kdWindow;
+ EGLNativeWindowType m_eglWindow;
+ EGLConfig m_eglConfig;
+ QVector<EGLint> m_eglWindowAttrs;
+ QVector<EGLint> m_eglContextAttrs;
+ EGLenum m_eglApi;
+ QEGLPlatformContext *m_platformGlContext;
+
+ bool isFullScreen;
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif //QOPENKODEWINDOW_H
diff --git a/src/plugins/platforms/openkode/resources.qrc b/src/plugins/platforms/openkode/resources.qrc
new file mode 100644
index 0000000..dbb3419
--- /dev/null
+++ b/src/plugins/platforms/openkode/resources.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>shaders/vert.glslv</file>
+ <file>shaders/frag.glslf</file>
+</qresource>
+</RCC>
diff --git a/src/plugins/platforms/openkode/shaders/frag.glslf b/src/plugins/platforms/openkode/shaders/frag.glslf
new file mode 100644
index 0000000..c768437
--- /dev/null
+++ b/src/plugins/platforms/openkode/shaders/frag.glslf
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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$
+**
+****************************************************************************/
+
+uniform sampler2D tex_samp;
+
+varying vec2 texcoord_var;
+
+void main(void)
+{
+ gl_FragColor = texture2D(tex_samp, texcoord_var);
+}
diff --git a/src/plugins/platforms/openkode/shaders/vert.glslv b/src/plugins/platforms/openkode/shaders/vert.glslv
new file mode 100644
index 0000000..8a64f4d
--- /dev/null
+++ b/src/plugins/platforms/openkode/shaders/vert.glslv
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins 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$
+**
+****************************************************************************/
+
+uniform vec2 window; // window size
+
+// Per-vertex attributes]
+attribute vec2 pos_attr;
+attribute vec2 texcoord_attr;
+
+// Output vertex color
+varying vec2 texcoord_var;
+
+void main()
+{
+ gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0);
+ texcoord_var = texcoord_attr;
+}
diff --git a/src/plugins/platforms/openvglite/main.cpp b/src/plugins/platforms/openvglite/main.cpp
new file mode 100644
index 0000000..dc0b4a8
--- /dev/null
+++ b/src/plugins/platforms/openvglite/main.cpp
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** 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 plugins 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/qgraphicssystemplugin_p.h>
+#include "qgraphicssystem_vglite.h"
+
+QT_BEGIN_NAMESPACE
+
+class QVGGraphicsSystemPlugin : public QGraphicsSystemPlugin
+{
+public:
+ QStringList keys() const;
+ QGraphicsSystem *create(const QString&);
+};
+
+QStringList QVGGraphicsSystemPlugin::keys() const
+{
+ QStringList list;
+ list << "OpenVG";
+ return list;
+}
+
+QGraphicsSystem* QVGGraphicsSystemPlugin::create(const QString& system)
+{
+ if (system.toLower() == "openvg")
+ return new QVGLiteGraphicsSystem;
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(openvg, QVGGraphicsSystemPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openvglite/openvglite.pro b/src/plugins/platforms/openvglite/openvglite.pro
new file mode 100644
index 0000000..9d7860a
--- /dev/null
+++ b/src/plugins/platforms/openvglite/openvglite.pro
@@ -0,0 +1,12 @@
+TARGET = qvglitegraphicssystem
+include(../../qpluginbase.pri)
+
+QT += openvg
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems
+
+SOURCES = main.cpp qgraphicssystem_vglite.cpp qwindowsurface_vglite.cpp
+HEADERS = qgraphicssystem_vglite.h qwindowsurface_vglite.h
+
+target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
+INSTALLS += target
diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp
new file mode 100644
index 0000000..41b2303
--- /dev/null
+++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp
@@ -0,0 +1,193 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qgraphicssystem_vglite.h"
+#include "qwindowsurface_vglite.h"
+#include <QtOpenVG/private/qpixmapdata_vg_p.h>
+#include <QtGui/private/qegl_p.h>
+#include <QtCore/qdebug.h>
+#ifdef OPENVG_USBHP_INIT
+extern "C" {
+#include <linuxusbhp.h>
+};
+#endif
+
+QT_BEGIN_NAMESPACE
+
+QVGLiteGraphicsSystem::QVGLiteGraphicsSystem()
+ : w(0), h(0), d(0), dw(0), dh(0), physWidth(0), physHeight(0),
+ surface(0), context(0), rootWindow(0),
+ screenFormat(QImage::Format_RGB16), preservedSwap(false)
+{
+#ifdef OPENVG_USBHP_INIT
+ initLibrary();
+#endif
+
+ // The graphics system is also the screen definition.
+ mScreens.append(this);
+
+ QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY"));
+ QStringList displayArgs = displaySpec.split(QLatin1Char(':'));
+
+ // Initialize EGL and create the global EGL context.
+ context = qt_vg_create_context(0);
+ if (!context) {
+ qFatal("QVGLiteGraphicsSystem: could not initialize EGL");
+ return;
+ }
+
+ // Get the root window handle to use. Default to zero.
+ QRegExp winidRx(QLatin1String("winid=?(\\d+)"));
+ int winidIdx = displayArgs.indexOf(winidRx);
+ int handle = 0;
+ if (winidIdx >= 0) {
+ winidRx.exactMatch(displayArgs.at(winidIdx));
+ handle = winidRx.cap(1).toInt();
+ }
+
+ // Create a full-screen window based on the native handle.
+ // If the context is premultiplied, the window should be too.
+ QEglProperties props;
+#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
+ EGLint surfaceType = 0;
+ if (context->configAttrib(EGL_SURFACE_TYPE, &surfaceType) &&
+ (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) != 0)
+ props.setValue(EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE);
+#endif
+ rootWindow = eglCreateWindowSurface
+ (context->display(), context->config(),
+ (EGLNativeWindowType)handle, props.properties());
+ if (rootWindow == EGL_NO_SURFACE) {
+ delete context;
+ context = 0;
+ qFatal("QVGLiteGraphicsSystem: could not create full-screen window");
+ return;
+ }
+
+ // Try to turn on preserved swap behaviour on the root window.
+ // This will allow us to optimize compositing to focus on just
+ // the screen region that has changed. Otherwise we must
+ // re-composite the entire screen every frame.
+#if !defined(QVG_NO_PRESERVED_SWAP)
+ eglGetError(); // Clear error state first.
+ eglSurfaceAttrib(context->display(), rootWindow,
+ EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
+ preservedSwap = (eglGetError() == EGL_SUCCESS);
+#else
+ preservedSwap = false;
+#endif
+
+ // Fetch the root window properties.
+ eglQuerySurface(context->display(), rootWindow, EGL_WIDTH, &w);
+ eglQuerySurface(context->display(), rootWindow, EGL_HEIGHT, &h);
+ screenFormat = qt_vg_config_to_image_format(context);
+ switch (screenFormat) {
+ case QImage::Format_ARGB32_Premultiplied:
+ case QImage::Format_ARGB32:
+ case QImage::Format_RGB32:
+ default:
+ d = 32;
+ break;
+ case QImage::Format_RGB16:
+ case QImage::Format_ARGB4444_Premultiplied:
+ d = 16;
+ break;
+ }
+ dw = w;
+ dh = h;
+ qDebug("screen size: %dx%dx%d", w, h, d);
+
+ // Handle display physical size spec. From qscreenlinuxfb_qws.cpp.
+ QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)"));
+ int dimIdxW = displayArgs.indexOf(mmWidthRx);
+ QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)"));
+ int dimIdxH = displayArgs.indexOf(mmHeightRx);
+ if (dimIdxW >= 0) {
+ mmWidthRx.exactMatch(displayArgs.at(dimIdxW));
+ physWidth = mmWidthRx.cap(1).toInt();
+ if (dimIdxH < 0)
+ physHeight = dh*physWidth/dw;
+ }
+ if (dimIdxH >= 0) {
+ mmHeightRx.exactMatch(displayArgs.at(dimIdxH));
+ physHeight = mmHeightRx.cap(1).toInt();
+ if (dimIdxW < 0)
+ physWidth = dw*physHeight/dh;
+ }
+ if (dimIdxW < 0 && dimIdxH < 0) {
+ const int dpi = 72;
+ physWidth = qRound(dw * 25.4 / dpi);
+ physHeight = qRound(dh * 25.4 / dpi);
+ }
+}
+
+QVGLiteGraphicsSystem::~QVGLiteGraphicsSystem()
+{
+}
+
+QPixmapData *QVGLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const
+{
+#if !defined(QVGLite_NO_SINGLE_CONTEXT) && !defined(QVGLite_NO_PIXMAP_DATA)
+ // Pixmaps can use QVGLitePixmapData; bitmaps must use raster.
+ if (type == QPixmapData::PixmapType)
+ return new QVGPixmapData(type);
+ else
+ return new QRasterPixmapData(type);
+#else
+ return new QRasterPixmapData(type);
+#endif
+}
+
+QWindowSurface *QVGLiteGraphicsSystem::createWindowSurface(QWidget *widget) const
+{
+ if (widget->windowType() == Qt::Desktop)
+ return 0; // Don't create an explicit window surface for the destkop.
+ if (surface) {
+ qWarning() << "QVGLiteGraphicsSystem: only one window surface "
+ "is supported at a time";
+ return 0;
+ }
+ surface = new QVGLiteWindowSurface
+ (const_cast<QVGLiteGraphicsSystem *>(this), widget);
+ return surface;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h
new file mode 100644
index 0000000..512793d
--- /dev/null
+++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.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 plugins 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 QGRAPHICSSYSTEM_VGLITE_H
+#define QGRAPHICSSYSTEM_VGLITE_H
+
+#include <QtGui/private/qgraphicssystem_p.h>
+#include <QtGui/private/qegl_p.h>
+#include <QtGui/qimage.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVGLiteWindowSurface;
+
+class QVGLiteGraphicsSystem : public QGraphicsSystem,
+ public QGraphicsSystemScreen
+{
+public:
+ QVGLiteGraphicsSystem();
+ ~QVGLiteGraphicsSystem();
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QWindowSurface *createWindowSurface(QWidget *widget) const;
+ QList<QGraphicsSystemScreen *> screens() const { return mScreens; }
+
+ QRect geometry() const { return QRect(0, 0, w, h); }
+ int depth() const { return d; }
+ QImage::Format format() const { return screenFormat; }
+ QSize physicalSize() const { return QSize(physWidth, physHeight); }
+
+private:
+ friend class QVGLiteWindowSurface;
+
+ int w;
+ int h;
+ int d;
+
+ int dw;
+ int dh;
+
+ int physWidth;
+ int physHeight;
+
+ mutable QVGLiteWindowSurface *surface;
+ QEglContext *context;
+ EGLSurface rootWindow;
+ QImage::Format screenFormat;
+ bool preservedSwap;
+
+ QList<QGraphicsSystemScreen *> mScreens;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp
new file mode 100644
index 0000000..c73e35a
--- /dev/null
+++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qwindowsurface_vglite.h"
+#include "qgraphicssystem_vglite.h"
+#include <QtOpenVG/qvg.h>
+#include <QtOpenVG/private/qvg_p.h>
+#include <QtOpenVG/private/qpaintengine_vg_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QVGLiteWindowSurface::QVGLiteWindowSurface
+ (QVGLiteGraphicsSystem *gs, QWidget *window)
+ : QWindowSurface(window), graphicsSystem(gs),
+ isPaintingActive(false), engine(0)
+{
+}
+
+QVGLiteWindowSurface::~QVGLiteWindowSurface()
+{
+ graphicsSystem->surface = 0;
+ if (engine)
+ qt_vg_destroy_paint_engine(engine);
+}
+
+QPaintDevice *QVGLiteWindowSurface::paintDevice()
+{
+ qt_vg_make_current(graphicsSystem->context, graphicsSystem->rootWindow);
+ isPaintingActive = true;
+ // TODO: clear the parts of the back buffer that are not
+ // covered by the window surface to black.
+ return this;
+}
+
+void QVGLiteWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(region);
+ Q_UNUSED(offset);
+ QEglContext *context = graphicsSystem->context;
+ if (context) {
+ if (!isPaintingActive)
+ qt_vg_make_current(context, graphicsSystem->rootWindow);
+ context->swapBuffers();
+ qt_vg_done_current(context);
+ context->setSurface(EGL_NO_SURFACE);
+ isPaintingActive = false;
+ }
+}
+
+void QVGLiteWindowSurface::setGeometry(const QRect &rect)
+{
+ QWindowSurface::setGeometry(rect);
+}
+
+bool QVGLiteWindowSurface::scroll(const QRegion &area, int dx, int dy)
+{
+ return QWindowSurface::scroll(area, dx, dy);
+}
+
+void QVGLiteWindowSurface::beginPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+void QVGLiteWindowSurface::endPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+}
+
+QPaintEngine *QVGLiteWindowSurface::paintEngine() const
+{
+ if (!engine)
+ engine = qt_vg_create_paint_engine();
+ return engine;
+}
+
+// We need to get access to QWidget::metric() from QVGLiteWindowSurface::metric,
+// but it is not a friend of QWidget. To get around this, we create a
+// fake QX11PaintEngine class, which is a friend.
+class QX11PaintEngine
+{
+public:
+ static int metric(const QWidget *widget, QPaintDevice::PaintDeviceMetric met)
+ {
+ return widget->metric(met);
+ }
+};
+
+int QVGLiteWindowSurface::metric(PaintDeviceMetric met) const
+{
+ return QX11PaintEngine::metric(window(), met);
+}
diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.h b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h
new file mode 100644
index 0000000..59faba8
--- /dev/null
+++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSURFACE_VGLITE_H
+#define QWINDOWSURFACE_VGLITE_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/private/qwindowsurface_p.h>
+#include <QtGui/private/qegl_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVGLiteGraphicsSystem;
+class QVGPaintEngine;
+
+class Q_OPENVG_EXPORT QVGLiteWindowSurface : public QWindowSurface, public QPaintDevice
+{
+public:
+ QVGLiteWindowSurface(QVGLiteGraphicsSystem *gs, QWidget *window);
+ ~QVGLiteWindowSurface();
+
+ QPaintDevice *paintDevice();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void setGeometry(const QRect &rect);
+ bool scroll(const QRegion &area, int dx, int dy);
+
+ void beginPaint(const QRegion &region);
+ void endPaint(const QRegion &region);
+
+ QPaintEngine *paintEngine() const;
+
+protected:
+ int metric(PaintDeviceMetric metric) const;
+
+private:
+ QVGLiteGraphicsSystem *graphicsSystem;
+ bool isPaintingActive;
+ mutable QVGPaintEngine *engine;
+};
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSURFACE_VGLITE_H
diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro
new file mode 100644
index 0000000..26ccd44
--- /dev/null
+++ b/src/plugins/platforms/platforms.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+
+SUBDIRS += minimal
+
diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp
new file mode 100644
index 0000000..997e544
--- /dev/null
+++ b/src/plugins/platforms/qvfb/main.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QPlatformIntegrationPlugin>
+#include "qvfbintegration.h"
+#include <qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVFbIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QVFbIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "QVFb";
+ return list;
+}
+
+QPlatformIntegration* QVFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "qvfb")
+ return new QVFbIntegration(paramList);
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(qvfb, QVFbIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro
new file mode 100644
index 0000000..d2b332a
--- /dev/null
+++ b/src/plugins/platforms/qvfb/qvfb.pro
@@ -0,0 +1,13 @@
+TARGET = qvfbintegration
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+
+SOURCES = main.cpp qvfbintegration.cpp qvfbwindowsurface.cpp
+HEADERS = qvfbintegration.h qvfbwindowsurface.h
+
+include(../fontdatabases/genericunix/genericunix.pri)
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp
new file mode 100644
index 0000000..0cc3938
--- /dev/null
+++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp
@@ -0,0 +1,448 @@
+/****************************************************************************
+**
+** 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 plugins 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 <stdlib.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <private/qcore_unix_p.h> // overrides QT_OPEN
+
+#include <qvfbhdr.h>
+#include <qsocketnotifier.h>
+
+#include "qvfbintegration.h"
+#include "qvfbwindowsurface.h"
+#include <QtGui/private/qpixmap_raster_p.h>
+#include <QtCore/qdebug.h>
+#include <QMouseEvent>
+
+#include <qsocketnotifier.h>
+#include <QApplication>
+#include <QWindowSystemInterface>
+
+#include "qgenericunixfontdatabase.h"
+
+QT_BEGIN_NAMESPACE
+
+
+class QVFbScreenKeyboardHandler : public QObject
+{
+ Q_OBJECT
+public:
+ QVFbScreenKeyboardHandler(int displayId);
+ ~QVFbScreenKeyboardHandler();
+
+private slots:
+ void readKeyboardData();
+
+private:
+ int kbdFD;
+ int kbdIdx;
+ int kbdBufferLen;
+ unsigned char *kbdBuffer;
+ QSocketNotifier *keyNotifier;
+};
+
+QVFbScreenKeyboardHandler::QVFbScreenKeyboardHandler(int displayId)
+{
+ const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId);
+
+
+ kbdFD = -1;
+ kbdIdx = 0;
+ kbdBufferLen = sizeof(QVFbKeyData) * 5;
+ kbdBuffer = new unsigned char [kbdBufferLen];
+
+ kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY);
+
+ if (kbdFD == -1) {
+ perror("QVFbScreenKeyboardHandler");
+ qWarning("QVFbScreenKeyboardHandler: Unable to open device %s",
+ qPrintable(keyboardDev));
+ return;
+ }
+
+ // Clear pending input
+ char buf[2];
+ while (QT_READ(kbdFD, buf, 1) > 0) { }
+
+ keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this);
+ connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData()));
+
+}
+
+QVFbScreenKeyboardHandler::~QVFbScreenKeyboardHandler()
+{
+ if (kbdFD >= 0)
+ QT_CLOSE(kbdFD);
+ delete [] kbdBuffer;
+}
+
+
+void QVFbScreenKeyboardHandler::readKeyboardData()
+{
+ int n;
+ do {
+ n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx);
+ if (n > 0)
+ kbdIdx += n;
+ } while (n > 0);
+
+ int idx = 0;
+ while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) {
+ QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx);
+ if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) {
+ // magic exit key
+ qWarning("Instructed to quit by Virtual Keyboard");
+ qApp->quit();
+ }
+
+ //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat);
+
+ QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease;
+
+ QString text;
+ if (kd->unicode && kd->unicode != 0xffff)
+ text += QChar(kd->unicode);
+
+// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text;
+
+ QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length()));
+ idx += sizeof(QVFbKeyData);
+ }
+
+ int surplus = kbdIdx - idx;
+ for (int i = 0; i < surplus; i++)
+ kbdBuffer[i] = kbdBuffer[idx+i];
+ kbdIdx = surplus;
+}
+
+
+
+
+class QVFbScreenMouseHandler : public QObject
+{
+ Q_OBJECT
+public:
+ QVFbScreenMouseHandler(int displayId);
+ ~QVFbScreenMouseHandler();
+
+private slots:
+ void readMouseData();
+
+private:
+ int mouseFD;
+ int mouseIdx;
+ enum {mouseBufSize = 128};
+ uchar mouseBuf[mouseBufSize];
+ QSocketNotifier *mouseNotifier;
+
+ int oldButtonState;
+};
+
+QVFbScreenMouseHandler::QVFbScreenMouseHandler(int displayId)
+{
+ QString mouseDev = QT_VFB_MOUSE_PIPE(displayId);
+
+ mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY);
+
+ if (mouseFD == -1) {
+ perror("QVFbMouseHandler::QVFbMouseHandler");
+ qWarning("QVFbMouseHander: Unable to open device %s",
+ qPrintable(mouseDev));
+ return;
+ }
+
+ // Clear pending input
+ char buf[2];
+ while (QT_READ(mouseFD, buf, 1) > 0) { }
+
+ mouseIdx = 0;
+ oldButtonState = 0;
+ mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this);
+ connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));
+}
+
+
+QVFbScreenMouseHandler::~QVFbScreenMouseHandler()
+{
+ if (mouseFD >= 0)
+ QT_CLOSE(mouseFD);
+}
+
+void QVFbScreenMouseHandler::readMouseData()
+{
+ int n;
+ do {
+ n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx);
+ if (n > 0)
+ mouseIdx += n;
+ } while (n > 0);
+
+ int idx = 0;
+ static const int packetsize = sizeof(QPoint) + 2*sizeof(int);
+ while (mouseIdx-idx >= packetsize) {
+ uchar *mb = mouseBuf+idx;
+ QPoint mousePos = *reinterpret_cast<QPoint *>(mb);
+ mb += sizeof(QPoint);
+ int bstate = *reinterpret_cast<int *>(mb);
+ mb += sizeof(int);
+ //int wheel = *reinterpret_cast<int *>(mb);
+
+ int button = bstate ^ oldButtonState;
+ QEvent::Type type = QEvent::MouseMove;
+
+ if (button) {
+ type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease;
+ }
+ QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate));
+
+// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type;
+
+ oldButtonState = bstate;
+
+ idx += packetsize;
+ }
+
+ int surplus = mouseIdx - idx;
+ for (int i = 0; i < surplus; i++)
+ mouseBuf[i] = mouseBuf[idx+i];
+ mouseIdx = surplus;
+
+}
+
+
+class QVFbScreenPrivate
+{
+public:
+ QVFbScreenPrivate(int id)
+ : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0)
+ {
+ displayId = id;
+ connect(displayId);
+ }
+
+ ~QVFbScreenPrivate() { disconnect(); }
+ void setDirty(const QRect &r);
+
+ bool connect(int displayId);
+ void disconnect();
+
+ QImage *screenImage() { return &img; }
+ QSize screenSize() { return img.size(); }
+
+ int depth() const { return img.depth(); }
+ QImage::Format format() const { return img.format(); }
+
+private:
+ unsigned char *shmrgn;
+ QVFbHeader *hdr;
+ uchar *data;
+ QVFbScreenMouseHandler *mouseHandler;
+ QVFbScreenKeyboardHandler *keyboardHandler;
+ int displayId;
+
+ QImage img;
+};
+
+
+void QVFbScreenPrivate::setDirty(const QRect &r)
+{
+ hdr->dirty = true;
+ hdr->update = hdr->update.united(r);
+}
+
+
+bool QVFbScreenPrivate::connect(int displayId)
+{
+ qDebug() << "QVFbScreenPrivate::connect" << displayId;
+ key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b');
+
+ if (key == -1)
+ return false;
+
+
+ int shmId = shmget(key, 0, 0);
+ if (shmId != -1)
+ shmrgn = (unsigned char *)shmat(shmId, 0, 0);
+ else
+ return false;
+
+ if ((long)shmrgn == -1 || shmrgn == 0) {
+ qDebug("No shmrgn %ld", (long)shmrgn);
+ return false;
+ }
+
+ hdr = (QVFbHeader *)shmrgn;
+ data = shmrgn + hdr->dataoffset;
+
+ int w = hdr->width;
+ int h = hdr->height;
+ int d = hdr->depth;
+ int lstep = hdr->linestep;
+
+ QImage::Format format = QImage::Format_Invalid;
+ if (d == 32)
+ format = QImage::Format_ARGB32_Premultiplied;
+ else if (d == 16)
+ format = QImage::Format_RGB16;
+
+
+ if (format == QImage::Format_Invalid) {
+ img = QImage();
+ return false;
+ }
+
+ img = QImage(data, w, h, lstep, format);
+
+ qDebug("connected %dx%d %d bpp", w, h, d);
+
+
+ mouseHandler = new QVFbScreenMouseHandler(displayId);
+ keyboardHandler = new QVFbScreenKeyboardHandler(displayId);
+ return true;
+}
+
+void QVFbScreenPrivate::disconnect()
+{
+ if ((long)shmrgn != -1 && shmrgn) {
+ shmdt((char*)shmrgn);
+ shmrgn = 0;
+ }
+ delete mouseHandler;
+ mouseHandler = 0;
+ delete keyboardHandler;
+ keyboardHandler = 0;
+}
+
+
+QVFbScreen::QVFbScreen(int id)
+{
+ d_ptr = new QVFbScreenPrivate(id);
+}
+
+
+QVFbScreen::~QVFbScreen()
+{
+ delete d_ptr;
+}
+
+void QVFbScreen::setDirty(const QRect &rect)
+{
+ d_ptr->setDirty(rect);
+}
+
+
+
+QRect QVFbScreen::geometry() const {
+ return QRect(QPoint(), d_ptr->screenSize());
+}
+
+
+int QVFbScreen::depth() const
+{
+ return d_ptr->depth();
+}
+
+QImage::Format QVFbScreen::format() const
+{
+ return d_ptr->format();
+}
+
+QSize QVFbScreen::physicalSize() const {
+ return (d_ptr->screenSize()*254)/720;
+}
+
+#if 0
+int QVFbScreen::linestep() const {
+ return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0;
+}
+
+uchar *QVFbScreen::base() const {
+ return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0;
+}
+#endif
+
+QImage *QVFbScreen::screenImage()
+{
+ return d_ptr->screenImage();
+}
+
+QVFbIntegration::QVFbIntegration(const QStringList &paramList)
+ : mFontDb(new QGenericUnixFontDatabase())
+{
+ int displayId = 0;
+ if (paramList.length() > 0)
+ displayId = paramList.at(0).toInt();
+
+ mPrimaryScreen = new QVFbScreen(displayId);
+
+ mScreens.append(mPrimaryScreen);
+}
+
+QPixmapData *QVFbIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QRasterPixmapData(type);
+}
+
+QWindowSurface *QVFbIntegration::createWindowSurface(QWidget *widget, WId) const
+{
+ return new QVFbWindowSurface(mPrimaryScreen, widget);
+}
+
+
+QPlatformWindow *QVFbIntegration::createPlatformWindow(QWidget *widget, WId) const
+{
+ return new QVFbWindow(mPrimaryScreen, widget);
+}
+
+QPlatformFontDatabase *QVFbIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+QT_END_NAMESPACE
+
+#include "qvfbintegration.moc"
diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h
new file mode 100644
index 0000000..198a45c
--- /dev/null
+++ b/src/plugins/platforms/qvfb/qvfbintegration.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** 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 plugins 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 QGRAPHICSSYSTEM_QVFB_H
+#define QGRAPHICSSYSTEM_QVFB_H
+
+#include <QPlatformScreen>
+#include <QPlatformIntegration>
+
+QT_BEGIN_NAMESPACE
+
+
+class QVFbScreenPrivate;
+
+class QVFbScreen : public QPlatformScreen
+{
+public:
+ QVFbScreen(int id);
+ ~QVFbScreen();
+
+ QRect geometry() const;
+ int depth() const;
+ QImage::Format format() const;
+ QSize physicalSize() const;
+
+ QImage *screenImage();
+
+ void setDirty(const QRect &rect);
+
+public:
+
+ QVFbScreenPrivate *d_ptr;
+};
+
+class QVFbIntegrationPrivate;
+
+
+class QVFbIntegration : public QPlatformIntegration
+{
+public:
+ QVFbIntegration(const QStringList &paramList);
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+private:
+ QVFbScreen *mPrimaryScreen;
+ QList<QPlatformScreen *> mScreens;
+ QPlatformFontDatabase *mFontDb;
+};
+
+
+
+QT_END_NAMESPACE
+
+
+#endif
diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp
new file mode 100644
index 0000000..6699072
--- /dev/null
+++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qvfbwindowsurface.h"
+#include "qvfbintegration.h"
+#include <QtCore/qdebug.h>
+#include <QtGui/qpainter.h>
+#include <private/qapplication_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QVFbWindowSurface::QVFbWindowSurface(//QVFbIntegration *graphicsSystem,
+ QVFbScreen *screen, QWidget *window)
+ : QWindowSurface(window),
+ mScreen(screen)
+{
+}
+
+QVFbWindowSurface::~QVFbWindowSurface()
+{
+}
+
+QPaintDevice *QVFbWindowSurface::paintDevice()
+{
+ return mScreen->screenImage();
+}
+
+void QVFbWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(offset);
+
+// QRect rect = geometry();
+// QPoint topLeft = rect.topLeft();
+
+ mScreen->setDirty(region.boundingRect());
+}
+
+void QVFbWindowSurface::resize(const QSize&)
+{
+
+// any size you like as long as it's full-screen...
+
+ QRect rect(mScreen->availableGeometry());
+ QWindowSurface::resize(rect.size());
+}
+
+
+QVFbWindow::QVFbWindow(QVFbScreen *screen, QWidget *window)
+ : QPlatformWindow(window),
+ mScreen(screen)
+{
+}
+
+
+void QVFbWindow::setGeometry(const QRect &)
+{
+
+// any size you like as long as it's full-screen...
+
+ QRect rect(mScreen->availableGeometry());
+ QWindowSystemInterface::handleGeometryChange(this->widget(), rect);
+
+ QPlatformWindow::setGeometry(rect);
+}
+
+
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.h b/src/plugins/platforms/qvfb/qvfbwindowsurface.h
new file mode 100644
index 0000000..9228189
--- /dev/null
+++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSURFACE_QVFB_H
+#define QWINDOWSURFACE_QVFB_H
+
+#include <QtGui/private/qwindowsurface_p.h>
+#include <QPlatformWindow>
+
+QT_BEGIN_NAMESPACE
+
+class QVFbIntegration;
+class QVFbScreen;
+
+class QVFbWindowSurface : public QWindowSurface
+{
+public:
+ QVFbWindowSurface(QVFbScreen *screen, QWidget *window);
+ ~QVFbWindowSurface();
+
+ QPaintDevice *paintDevice();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void resize(const QSize &size);
+
+private:
+ QVFbScreen *mScreen;
+};
+
+class QVFbWindow : public QPlatformWindow
+{
+public:
+ QVFbWindow(QVFbScreen *screen, QWidget *window);
+ void setGeometry(const QRect &rect);
+
+private:
+ QVFbScreen *mScreen;
+};
+
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp
new file mode 100644
index 0000000..2f6aa8b
--- /dev/null
+++ b/src/plugins/platforms/testlite/main.cpp
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QtGui/QPlatformIntegrationPlugin>
+#include "qtestliteintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QTestLiteIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList&);
+};
+
+QStringList QTestLiteIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "TestLite";
+#ifndef QT_NO_OPENGL
+ list << "TestLiteGL";
+#endif
+ return list;
+}
+
+QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "testlite")
+ return new QTestLiteIntegration;
+#ifndef QT_NO_OPENGL
+ if (system.toLower() == "testlitegl")
+ return new QTestLiteIntegration(true);
+#endif
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(testlite, QTestLiteIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp
new file mode 100644
index 0000000..e262d5b
--- /dev/null
+++ b/src/plugins/platforms/testlite/qglxintegration.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 plugins 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 <QDebug>
+#include <QLibrary>
+#include <QGLFormat>
+
+#include "qtestlitewindow.h"
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <GL/glx.h>
+
+#include "qglxintegration.h"
+
+#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4)
+#include <dlfcn.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+QMutex QGLXGLContext::m_defaultSharedContextMutex(QMutex::Recursive);
+
+QVector<int> QGLXGLContext::buildSpec(const QPlatformWindowFormat &format)
+{
+ QVector<int> spec(48);
+ int i = 0;
+
+ spec[i++] = GLX_LEVEL;
+ spec[i++] = 0;
+ spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT;
+
+ if (format.rgba()) {
+ spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT;
+ spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize();
+ spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize();
+ spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize();
+ if (format.alpha()) {
+ spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize();
+ }
+
+ spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize();
+ spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize();
+ spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize();
+
+ if (format.alpha()) {
+ spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize();
+ }
+
+ } else {
+ spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works....
+ spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8;
+ }
+
+ spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False;
+ spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False;
+
+ if (format.depth()) {
+ spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize();
+ }
+
+ if (format.stencil()) {
+ spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize();
+ }
+ if (format.sampleBuffers()) {
+ spec[i++] = GLX_SAMPLE_BUFFERS_ARB;
+ spec[i++] = 1;
+ spec[i++] = GLX_SAMPLES_ARB;
+ spec[i++] = format.samples() == -1 ? 4 : format.samples();
+ }
+
+ spec[i++] = XNone;
+ return spec;
+}
+
+GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindowFormat &format)
+{
+ bool reduced = true;
+ GLXFBConfig chosenConfig = 0;
+ QPlatformWindowFormat reducedFormat = format;
+ while (!chosenConfig && reduced) {
+ QVector<int> spec = buildSpec(reducedFormat);
+ int confcount = 0;
+ GLXFBConfig *configs;
+ configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount);
+ if (confcount)
+ {
+ for (int i = 0; i < confcount; i++) {
+ chosenConfig = configs[i];
+ // Make sure we try to get an ARGB visual if the format asked for an alpha:
+ if (reducedFormat.alpha()) {
+ int alphaSize;
+ glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize);
+ if (alphaSize > 0)
+ break;
+ } else {
+ break; // Just choose the first in the list if there's no alpha requested
+ }
+ }
+
+ XFree(configs);
+ }
+ reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced);
+ }
+
+ if (!chosenConfig)
+ qWarning("Warning no context created");
+
+ return chosenConfig;
+}
+
+XVisualInfo *QGLXGLContext::findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format)
+{
+ GLXFBConfig config = QGLXGLContext::findConfig(xd,format);
+ XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config);
+ return visualInfo;
+}
+
+QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx)
+{
+ QPlatformWindowFormat format;
+ int redSize = 0;
+ int greenSize = 0;
+ int blueSize = 0;
+ int alphaSize = 0;
+ int depthSize = 0;
+ int stencilSize = 0;
+ int sampleBuffers = 0;
+ int sampleCount = 0;
+ int level = 0;
+ int rgba = 0;
+ int stereo = 0;
+ int accumSizeA = 0;
+ int accumSizeR = 0;
+ int accumSizeG = 0;
+ int accumSizeB = 0;
+
+ XVisualInfo *vi = glXGetVisualFromFBConfig(display,config);
+ glXGetConfig(display,vi,GLX_RGBA,&rgba);
+ XFree(vi);
+ glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize);
+ glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize);
+ glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize);
+ glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize);
+ glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize);
+ glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize);
+ glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers);
+ glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level);
+ glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo);
+ glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA);
+ glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR);
+ glXGetFBConfigAttrib(display, config, GLX_ACCUM_GREEN_SIZE, &accumSizeG);
+ glXGetFBConfigAttrib(display, config, GLX_ACCUM_BLUE_SIZE, &accumSizeB);
+
+ format.setRedBufferSize(redSize);
+ format.setGreenBufferSize(greenSize);
+ format.setBlueBufferSize(blueSize);
+ format.setAlphaBufferSize(alphaSize);
+ format.setDepthBufferSize(depthSize);
+ format.setStencilBufferSize(stencilSize);
+ format.setSampleBuffers(sampleBuffers);
+ if (format.sampleBuffers()) {
+ glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount);
+ format.setSamples(sampleCount);
+ }
+
+ format.setDirectRendering(glXIsDirect(display, ctx));
+ format.setRgba(rgba);
+ format.setStereo(stereo);
+ format.setAccumBufferSize(accumSizeB);
+
+ return format;
+}
+
+QPlatformWindowFormat QGLXGLContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced)
+{
+ QPlatformWindowFormat retFormat = format;
+ *reduced = true;
+
+ if (retFormat.sampleBuffers()) {
+ retFormat.setSampleBuffers(false);
+ } else if (retFormat.stereo()) {
+ retFormat.setStereo(false);
+ } else if (retFormat.accum()) {
+ retFormat.setAccum(false);
+ }else if (retFormat.stencil()) {
+ retFormat.setStencil(false);
+ }else if (retFormat.alpha()) {
+ retFormat.setAlpha(false);
+ }else if (retFormat.depth()) {
+ retFormat.setDepth(false);
+ }else if (retFormat.doubleBuffer()) {
+ retFormat.setDoubleBuffer(false);
+ }else{
+ *reduced = false;
+ }
+ return retFormat;
+}
+
+QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format)
+ : QPlatformGLContext()
+ , m_xd(xd)
+ , m_drawable((Drawable)window)
+ , m_context(0)
+{
+
+ QPlatformGLContext *sharePlatformContext;
+ if (format.useDefaultSharedContext()) {
+ if (!QPlatformGLContext::defaultSharedContext()) {
+ if (m_defaultSharedContextMutex.tryLock()){
+ createDefaultSharedContex(xd);
+ m_defaultSharedContextMutex.unlock();
+ } else {
+ m_defaultSharedContextMutex.lock(); //wait to the the shared context is created
+ m_defaultSharedContextMutex.unlock();
+ }
+ }
+ sharePlatformContext = QPlatformGLContext::defaultSharedContext();
+ } else {
+ sharePlatformContext = format.sharedGLContext();
+ }
+ GLXContext shareGlxContext = 0;
+ if (sharePlatformContext)
+ shareGlxContext = static_cast<QGLXGLContext*>(sharePlatformContext)->glxContext();
+
+ GLXFBConfig config = findConfig(xd,format);
+ m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE);
+ m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config,m_context);
+
+#ifdef MYX11_DEBUG
+ qDebug() << "QGLXGLContext::create context" << m_context;
+#endif
+}
+
+QGLXGLContext::QGLXGLContext(MyDisplay *display, Drawable drawable, GLXContext context)
+ : QPlatformGLContext(), m_xd(display), m_drawable(drawable), m_context(context)
+{
+
+}
+
+QGLXGLContext::~QGLXGLContext()
+{
+ if (m_context) {
+ qDebug("Destroying GLX context 0x%p", m_context);
+ glXDestroyContext(m_xd->display, m_context);
+ }
+}
+
+void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd)
+{
+ int x = 0;
+ int y = 0;
+ int w = 3;
+ int h = 3;
+
+ QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat();
+ GLXContext context;
+ GLXFBConfig config = findConfig(xd,format);
+ if (config) {
+ XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config);
+ Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone);
+ XSetWindowAttributes a;
+ a.colormap = cmap;
+ Window sharedWindow = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h,
+ 0, visualInfo->depth, InputOutput, visualInfo->visual,
+ CWColormap, &a);
+
+ context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE);
+ QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context);
+ QPlatformGLContext::setDefaultSharedContext(sharedContext);
+ } else {
+ qWarning("Warning no shared context created");
+ }
+}
+
+void QGLXGLContext::makeCurrent()
+{
+#ifdef MYX11_DEBUG
+ qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context);
+#endif
+ glXMakeCurrent(m_xd->display, m_drawable, m_context);
+}
+
+void QGLXGLContext::doneCurrent()
+{
+ glXMakeCurrent(m_xd->display, 0, 0);
+}
+
+void QGLXGLContext::swapBuffers()
+{
+ glXSwapBuffers(m_xd->display, m_drawable);
+}
+
+void* QGLXGLContext::getProcAddress(const QString& procName)
+{
+ typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *);
+ static qt_glXGetProcAddressARB glXGetProcAddressARB = 0;
+ static bool resolved = false;
+
+ if (resolved && !glXGetProcAddressARB)
+ return 0;
+ if (!glXGetProcAddressARB) {
+ QList<QByteArray> glxExt = QByteArray(glXGetClientString(m_xd->display, GLX_EXTENSIONS)).split(' ');
+ if (glxExt.contains("GLX_ARB_get_proc_address")) {
+#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4)
+ void *handle = dlopen(NULL, RTLD_LAZY);
+ if (handle) {
+ glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB");
+ dlclose(handle);
+ }
+ if (!glXGetProcAddressARB)
+#endif
+ {
+ extern const QString qt_gl_library_name();
+// QLibrary lib(qt_gl_library_name());
+ QLibrary lib(QLatin1String("GL"));
+ glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB");
+ }
+ }
+ resolved = true;
+ }
+ if (!glXGetProcAddressARB)
+ return 0;
+ return glXGetProcAddressARB(reinterpret_cast<const GLubyte *>(procName.toLatin1().data()));
+}
+
+QPlatformWindowFormat QGLXGLContext::platformWindowFormat() const
+{
+ return m_windowFormat;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h
new file mode 100644
index 0000000..479be4b
--- /dev/null
+++ b/src/plugins/platforms/testlite/qglxintegration.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 plugins 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 Q_GLX_CONTEXT_H
+#define Q_GLX_CONTEXT_H
+
+#include "qtestlitewindow.h"
+
+#include <QtGui/QPlatformGLContext>
+#include <QtGui/QPlatformWindowFormat>
+
+#include <QtCore/QMutex>
+
+#include <GL/glx.h>
+
+QT_BEGIN_NAMESPACE
+
+class MyDisplay;
+
+class QGLXGLContext : public QPlatformGLContext
+{
+public:
+ QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format);
+ ~QGLXGLContext();
+
+ virtual void makeCurrent();
+ virtual void doneCurrent();
+ virtual void swapBuffers();
+ virtual void* getProcAddress(const QString& procName);
+
+ GLXContext glxContext() {return m_context;}
+
+ QPlatformWindowFormat platformWindowFormat() const;
+
+ static XVisualInfo *findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format);
+private:
+ static GLXFBConfig findConfig(const MyDisplay *xd,const QPlatformWindowFormat &format);
+ static QVector<int> buildSpec(const QPlatformWindowFormat &format);
+ static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context);
+ static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced);
+
+
+ MyDisplay *m_xd;
+ Drawable m_drawable;
+ GLXContext m_context;
+ QPlatformWindowFormat m_windowFormat;
+
+ QGLXGLContext (MyDisplay *display, Drawable drawable, GLXContext context);
+ static QMutex m_defaultSharedContextMutex;
+ static void createDefaultSharedContex(MyDisplay *xd);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp
new file mode 100644
index 0000000..68e9051
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp
@@ -0,0 +1,153 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qtestliteintegration.h"
+#include "qtestlitewindowsurface.h"
+#include <QtGui/private/qpixmap_raster_p.h>
+#include <QtCore/qdebug.h>
+
+#include <QPlatformCursor>
+
+#include "qtestlitewindow.h"
+#include "qgenericunixfontdatabase.h"
+
+#ifndef QT_NO_OPENGL
+#include <GL/glx.h>
+#include <private/qwindowsurface_gl_p.h>
+#include <private/qpixmapdata_gl_p.h>
+#endif //QT_NO_OPENGL
+
+QT_BEGIN_NAMESPACE
+
+class MyCursor : QPlatformCursor
+{
+public:
+ MyCursor(QPlatformScreen *screen) : QPlatformCursor(screen) {}
+
+ void changeCursor(QCursor * cursor, QWidget * widget) {
+ QTestLiteWindow *w = 0;
+ if (widget) {
+ QWidget *window = widget->window();
+ w = static_cast<QTestLiteWindow*>(window->platformWindow());
+ } else {
+ // No X11 cursor control when there is no widget under the cursor
+ return;
+ }
+
+ //qDebug() << "changeCursor" << widget << ws;
+ if (!w)
+ return;
+
+ w->setCursor(cursor);
+ }
+};
+
+
+QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL)
+ : mUseOpenGL(useOpenGL)
+ , mFontDb(new QGenericUnixFontDatabase())
+{
+ xd = new MyDisplay;
+
+ mPrimaryScreen = new QTestLiteScreen();
+
+ mPrimaryScreen->mGeometry = QRect
+ (0, 0, xd->width, xd->height);
+ mPrimaryScreen->mDepth = 32;
+ mPrimaryScreen->mFormat = QImage::Format_RGB32;
+ mPrimaryScreen->mPhysicalSize =
+ QSize(xd->physicalWidth, xd->physicalHeight);
+
+ mScreens.append(mPrimaryScreen);
+
+
+ (void)new MyCursor(mPrimaryScreen);
+
+}
+
+QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+#ifndef QT_NO_OPENGL
+ if (mUseOpenGL)
+ return new QGLPixmapData(type);
+#endif
+ return new QRasterPixmapData(type);
+}
+
+QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const
+{
+#ifndef QT_NO_OPENGL
+ if (mUseOpenGL)
+ return new QGLWindowSurface(widget);
+#endif
+ return new QTestLiteWindowSurface(mPrimaryScreen, widget);
+}
+
+
+QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const
+{
+ return new QTestLiteWindow(this, mPrimaryScreen, widget);
+}
+
+
+
+QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const
+{
+ QImage img = xd->grabWindow(window, x, y, width, height);
+ return QPixmap::fromImage(img);
+}
+
+QPlatformFontDatabase *QTestLiteIntegration::fontDatabase() const
+{
+ return mFontDb;
+}
+
+bool QTestLiteIntegration::hasOpenGL() const
+{
+#ifndef QT_NO_OPENGL
+ return glXQueryExtension(xd->display, 0, 0) != 0;
+#endif
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h
new file mode 100644
index 0000000..8286ef0
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestliteintegration.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** 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 plugins 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 QGRAPHICSSYSTEM_TESTLITE_H
+#define QGRAPHICSSYSTEM_TESTLITE_H
+
+#include <QtGui/QPlatformIntegration>
+#include <QtGui/QPlatformScreen>
+
+//make sure textstream is included before any X11 headers
+#include <QtCore/QTextStream>
+
+QT_BEGIN_NAMESPACE
+
+class MyDisplay;
+
+class QTestLiteScreen : public QPlatformScreen
+{
+public:
+ QTestLiteScreen()
+ : mDepth(16), mFormat(QImage::Format_RGB16) {}
+ ~QTestLiteScreen() {}
+
+ QRect geometry() const { return mGeometry; }
+ int depth() const { return mDepth; }
+ QImage::Format format() const { return mFormat; }
+ QSize physicalSize() const { return mPhysicalSize; }
+
+public:
+ QRect mGeometry;
+ int mDepth;
+ QImage::Format mFormat;
+ QSize mPhysicalSize;
+};
+
+class QTestLiteIntegration : public QPlatformIntegration
+{
+public:
+ QTestLiteIntegration(bool useOpenGL = false);
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+ bool hasOpenGL() const;
+
+ MyDisplay *xd;
+
+private:
+ bool mUseOpenGL;
+ QTestLiteScreen *mPrimaryScreen;
+ QList<QPlatformScreen *> mScreens;
+ QPlatformFontDatabase *mFontDb;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp
new file mode 100644
index 0000000..1de4b9d
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp
@@ -0,0 +1,1587 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtestliteintegration.h"
+#include <QWindowSystemInterface>
+#include <private/qwindowsurface_p.h>
+#include <QtGui/private/qapplication_p.h>
+
+#include "qtestlitewindow.h"
+
+#include <QBitmap>
+#include <QCursor>
+#include <QDateTime>
+#include <QPixmap>
+#include <QImage>
+#include <QSocketNotifier>
+
+#include <qdebug.h>
+#include <QTimer>
+#include <QApplication>
+
+#ifndef QT_NO_OPENGL
+#include "qglxintegration.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#include <X11/Xatom.h>
+
+#include <X11/cursorfont.h>
+
+
+
+//### remove stuff we don't want from qt_x11_p.h
+#undef ATOM
+#undef X11
+
+//#define MYX11_DEBUG
+
+QT_BEGIN_NAMESPACE
+
+static int (*original_x_errhandler)(Display *dpy, XErrorEvent *);
+static bool seen_badwindow;
+
+
+static Atom wmProtocolsAtom;
+static Atom wmDeleteWindowAtom;
+
+class MyX11CursorNode
+{
+public:
+ MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; }
+ QDateTime expiration() { return t; }
+ void setExpiration(QDateTime val) { t = val; }
+ MyX11CursorNode * ante() { return before; }
+ void setAnte(MyX11CursorNode *node) { before = node; }
+ MyX11CursorNode * post() { return after; }
+ void setPost(MyX11CursorNode *node) { after = node; }
+ Cursor cursor() { return cursorValue; }
+ int id() { return idValue; }
+ unsigned int refCount;
+
+private:
+ MyX11CursorNode *before;
+ MyX11CursorNode *after;
+ QDateTime t;
+ Cursor cursorValue;
+ int idValue;
+
+ Display * display;
+};
+
+
+
+
+
+class MyX11Cursors : public QObject
+{
+ Q_OBJECT
+public:
+ MyX11Cursors(Display * d);
+ ~MyX11Cursors() { timer.stop(); }
+ void incrementUseCount(int id);
+ void decrementUseCount(int id);
+ void createNode(int id, Cursor c);
+ bool exists(int id) { return lookupMap.contains(id); }
+ Cursor cursor(int id);
+public slots:
+ void timeout();
+
+private:
+ void removeNode(MyX11CursorNode *node);
+ void insertNode(MyX11CursorNode *node);
+
+ // linked list of cursors currently not assigned to any window
+ MyX11CursorNode *firstExpired;
+ MyX11CursorNode *lastExpired;
+
+ QHash<int, MyX11CursorNode *> lookupMap;
+ QTimer timer;
+
+ Display *display;
+
+ int removalDelay;
+};
+
+
+
+
+
+QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration,
+ QTestLiteScreen */*screen*/, QWidget *window)
+ :QPlatformWindow(window), mGLContext(0)
+{
+ xd = platformIntegration->xd;
+ xd->windowList.append(this);
+ {
+ int x = window->x();
+ int y = window->y();
+ int w = window->width();
+ int h = window->height();
+
+ if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL
+ && QApplicationPrivate::platformIntegration()->hasOpenGL() ) {
+#ifndef QT_NO_OPENGL
+ XVisualInfo *visualInfo = QGLXGLContext::findVisualInfo(xd,window->platformWindowFormat());
+ Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone);
+
+ XSetWindowAttributes a;
+ a.colormap = cmap;
+ x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h,
+ 0, visualInfo->depth, InputOutput, visualInfo->visual,
+ CWColormap, &a);
+#endif //QT_NO_OPENGL
+ } else {
+ x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(),
+ x, y, w, h, 0 /*border_width*/,
+ xd->blackPixel(), xd->whitePixel());
+ }
+
+#ifdef MYX11_DEBUG
+ qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window;
+#endif
+ }
+
+ width = -1;
+ height = -1;
+ xpos = -1;
+ ypos = -1;
+
+ XSetWindowBackgroundPixmap(xd->display, x_window, XNone);
+
+ XSelectInput(xd->display, x_window, ExposureMask | KeyPressMask | KeyReleaseMask |
+ EnterWindowMask | LeaveWindowMask | FocusChangeMask |
+ PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask |
+ StructureNotifyMask);
+
+ gc = createGC();
+
+ XChangeProperty (xd->display, x_window,
+ wmProtocolsAtom,
+ XA_ATOM, 32, PropModeAppend,
+ (unsigned char *) &wmDeleteWindowAtom, 1);
+ currentCursor = -1;
+}
+
+
+QTestLiteWindow::~QTestLiteWindow()
+{
+#ifdef MYX11_DEBUG
+ qDebug() << "~QTestLiteWindow" << hex << x_window;
+#endif
+ delete mGLContext;
+ XFreeGC(xd->display, gc);
+ XDestroyWindow(xd->display, x_window);
+
+ xd->windowList.removeAll(this);
+}
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Mouse event stuff
+
+
+
+
+static Qt::MouseButtons translateMouseButtons(int s)
+{
+ Qt::MouseButtons ret = 0;
+ if (s & Button1Mask)
+ ret |= Qt::LeftButton;
+ if (s & Button2Mask)
+ ret |= Qt::MidButton;
+ if (s & Button3Mask)
+ ret |= Qt::RightButton;
+ return ret;
+}
+
+
+static Qt::KeyboardModifiers translateModifiers(int s)
+{
+ const uchar qt_alt_mask = Mod1Mask;
+ const uchar qt_meta_mask = Mod4Mask;
+
+
+ Qt::KeyboardModifiers ret = 0;
+ if (s & ShiftMask)
+ ret |= Qt::ShiftModifier;
+ if (s & ControlMask)
+ ret |= Qt::ControlModifier;
+ if (s & qt_alt_mask)
+ ret |= Qt::AltModifier;
+ if (s & qt_meta_mask)
+ ret |= Qt::MetaModifier;
+#if 0
+ if (s & qt_mode_switch_mask)
+ ret |= Qt::GroupSwitchModifier;
+#endif
+ return ret;
+}
+
+void QTestLiteWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e)
+{
+ static QPoint mousePoint;
+
+ Qt::MouseButton button = Qt::NoButton;
+ Qt::MouseButtons buttons = translateMouseButtons(e->state);
+ Qt::KeyboardModifiers modifiers = translateModifiers(e->state);
+ if (type != QEvent::MouseMove) {
+ switch (e->button) {
+ case Button1: button = Qt::LeftButton; break;
+ case Button2: button = Qt::MidButton; break;
+ case Button3: button = Qt::RightButton; break;
+ case Button4:
+ case Button5:
+ case 6:
+ case 7: {
+ //mouse wheel
+ if (type == QEvent::MouseButtonPress) {
+ //logic borrowed from qapplication_x11.cpp
+ int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1);
+ bool hor = (((e->button == Button4 || e->button == Button5)
+ && (modifiers & Qt::AltModifier))
+ || (e->button == 6 || e->button == 7));
+ QWindowSystemInterface::handleWheelEvent(widget(), e->time,
+ QPoint(e->x, e->y),
+ QPoint(e->x_root, e->y_root),
+ delta, hor ? Qt::Horizontal : Qt::Vertical);
+ }
+ return;
+ }
+ default: break;
+ }
+ }
+
+ buttons ^= button; // X event uses state *before*, Qt uses state *after*
+
+ QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y),
+ QPoint(e->x_root, e->y_root),
+ buttons);
+
+ mousePoint = QPoint(e->x_root, e->y_root);
+}
+
+void QTestLiteWindow::handleCloseEvent()
+{
+ QWindowSystemInterface::handleCloseEvent(widget());
+}
+
+
+void QTestLiteWindow::handleEnterEvent()
+{
+ QWindowSystemInterface::handleEnterEvent(widget());
+}
+
+void QTestLiteWindow::handleLeaveEvent()
+{
+ QWindowSystemInterface::handleLeaveEvent(widget());
+}
+
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Key event stuff -- not pretty either
+//
+// What we want to do is to port Robert's keytable code properly
+
+// keyboard mapping table
+static const unsigned int keyTbl[] = {
+
+ // misc keys
+
+ XK_Escape, Qt::Key_Escape,
+ XK_Tab, Qt::Key_Tab,
+ XK_ISO_Left_Tab, Qt::Key_Backtab,
+ XK_BackSpace, Qt::Key_Backspace,
+ XK_Return, Qt::Key_Return,
+ XK_Insert, Qt::Key_Insert,
+ XK_Delete, Qt::Key_Delete,
+ XK_Clear, Qt::Key_Delete,
+ XK_Pause, Qt::Key_Pause,
+ XK_Print, Qt::Key_Print,
+ 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq
+ 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq
+
+ // cursor movement
+
+ XK_Home, Qt::Key_Home,
+ XK_End, Qt::Key_End,
+ XK_Left, Qt::Key_Left,
+ XK_Up, Qt::Key_Up,
+ XK_Right, Qt::Key_Right,
+ XK_Down, Qt::Key_Down,
+ XK_Prior, Qt::Key_PageUp,
+ XK_Next, Qt::Key_PageDown,
+
+ // modifiers
+
+ XK_Shift_L, Qt::Key_Shift,
+ XK_Shift_R, Qt::Key_Shift,
+ XK_Shift_Lock, Qt::Key_Shift,
+ XK_Control_L, Qt::Key_Control,
+ XK_Control_R, Qt::Key_Control,
+ XK_Meta_L, Qt::Key_Meta,
+ XK_Meta_R, Qt::Key_Meta,
+ XK_Alt_L, Qt::Key_Alt,
+ XK_Alt_R, Qt::Key_Alt,
+ XK_Caps_Lock, Qt::Key_CapsLock,
+ XK_Num_Lock, Qt::Key_NumLock,
+ XK_Scroll_Lock, Qt::Key_ScrollLock,
+ XK_Super_L, Qt::Key_Super_L,
+ XK_Super_R, Qt::Key_Super_R,
+ XK_Menu, Qt::Key_Menu,
+ XK_Hyper_L, Qt::Key_Hyper_L,
+ XK_Hyper_R, Qt::Key_Hyper_R,
+ XK_Help, Qt::Key_Help,
+ 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab
+ 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11)
+ 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12)
+
+ // numeric and function keypad keys
+
+ XK_KP_Space, Qt::Key_Space,
+ XK_KP_Tab, Qt::Key_Tab,
+ XK_KP_Enter, Qt::Key_Enter,
+ //XK_KP_F1, Qt::Key_F1,
+ //XK_KP_F2, Qt::Key_F2,
+ //XK_KP_F3, Qt::Key_F3,
+ //XK_KP_F4, Qt::Key_F4,
+ XK_KP_Home, Qt::Key_Home,
+ XK_KP_Left, Qt::Key_Left,
+ XK_KP_Up, Qt::Key_Up,
+ XK_KP_Right, Qt::Key_Right,
+ XK_KP_Down, Qt::Key_Down,
+ XK_KP_Prior, Qt::Key_PageUp,
+ XK_KP_Next, Qt::Key_PageDown,
+ XK_KP_End, Qt::Key_End,
+ XK_KP_Begin, Qt::Key_Clear,
+ XK_KP_Insert, Qt::Key_Insert,
+ XK_KP_Delete, Qt::Key_Delete,
+ XK_KP_Equal, Qt::Key_Equal,
+ XK_KP_Multiply, Qt::Key_Asterisk,
+ XK_KP_Add, Qt::Key_Plus,
+ XK_KP_Separator, Qt::Key_Comma,
+ XK_KP_Subtract, Qt::Key_Minus,
+ XK_KP_Decimal, Qt::Key_Period,
+ XK_KP_Divide, Qt::Key_Slash,
+
+ // International input method support keys
+
+ // International & multi-key character composition
+ XK_ISO_Level3_Shift, Qt::Key_AltGr,
+ XK_Multi_key, Qt::Key_Multi_key,
+ XK_Codeinput, Qt::Key_Codeinput,
+ XK_SingleCandidate, Qt::Key_SingleCandidate,
+ XK_MultipleCandidate, Qt::Key_MultipleCandidate,
+ XK_PreviousCandidate, Qt::Key_PreviousCandidate,
+
+ // Misc Functions
+ XK_Mode_switch, Qt::Key_Mode_switch,
+ XK_script_switch, Qt::Key_Mode_switch,
+
+ // Japanese keyboard support
+ XK_Kanji, Qt::Key_Kanji,
+ XK_Muhenkan, Qt::Key_Muhenkan,
+ //XK_Henkan_Mode, Qt::Key_Henkan_Mode,
+ XK_Henkan_Mode, Qt::Key_Henkan,
+ XK_Henkan, Qt::Key_Henkan,
+ XK_Romaji, Qt::Key_Romaji,
+ XK_Hiragana, Qt::Key_Hiragana,
+ XK_Katakana, Qt::Key_Katakana,
+ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana,
+ XK_Zenkaku, Qt::Key_Zenkaku,
+ XK_Hankaku, Qt::Key_Hankaku,
+ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku,
+ XK_Touroku, Qt::Key_Touroku,
+ XK_Massyo, Qt::Key_Massyo,
+ XK_Kana_Lock, Qt::Key_Kana_Lock,
+ XK_Kana_Shift, Qt::Key_Kana_Shift,
+ XK_Eisu_Shift, Qt::Key_Eisu_Shift,
+ XK_Eisu_toggle, Qt::Key_Eisu_toggle,
+ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou,
+ //XK_Zen_Koho, Qt::Key_Zen_Koho,
+ //XK_Mae_Koho, Qt::Key_Mae_Koho,
+ XK_Kanji_Bangou, Qt::Key_Codeinput,
+ XK_Zen_Koho, Qt::Key_MultipleCandidate,
+ XK_Mae_Koho, Qt::Key_PreviousCandidate,
+
+#ifdef XK_KOREAN
+ // Korean keyboard support
+ XK_Hangul, Qt::Key_Hangul,
+ XK_Hangul_Start, Qt::Key_Hangul_Start,
+ XK_Hangul_End, Qt::Key_Hangul_End,
+ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja,
+ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo,
+ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja,
+ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput,
+ XK_Hangul_Codeinput, Qt::Key_Codeinput,
+ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja,
+ XK_Hangul_Banja, Qt::Key_Hangul_Banja,
+ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja,
+ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja,
+ //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate,
+ //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate,
+ //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate,
+ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate,
+ XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate,
+ XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate,
+ XK_Hangul_Special, Qt::Key_Hangul_Special,
+ //XK_Hangul_switch, Qt::Key_Hangul_switch,
+ XK_Hangul_switch, Qt::Key_Mode_switch,
+#endif // XK_KOREAN
+
+ // dead keys
+ XK_dead_grave, Qt::Key_Dead_Grave,
+ XK_dead_acute, Qt::Key_Dead_Acute,
+ XK_dead_circumflex, Qt::Key_Dead_Circumflex,
+ XK_dead_tilde, Qt::Key_Dead_Tilde,
+ XK_dead_macron, Qt::Key_Dead_Macron,
+ XK_dead_breve, Qt::Key_Dead_Breve,
+ XK_dead_abovedot, Qt::Key_Dead_Abovedot,
+ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis,
+ XK_dead_abovering, Qt::Key_Dead_Abovering,
+ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute,
+ XK_dead_caron, Qt::Key_Dead_Caron,
+ XK_dead_cedilla, Qt::Key_Dead_Cedilla,
+ XK_dead_ogonek, Qt::Key_Dead_Ogonek,
+ XK_dead_iota, Qt::Key_Dead_Iota,
+ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound,
+ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound,
+ XK_dead_belowdot, Qt::Key_Dead_Belowdot,
+ XK_dead_hook, Qt::Key_Dead_Hook,
+ XK_dead_horn, Qt::Key_Dead_Horn,
+
+#if 0
+ // Special multimedia keys
+ // currently only tested with MS internet keyboard
+
+ // browsing keys
+ XF86XK_Back, Qt::Key_Back,
+ XF86XK_Forward, Qt::Key_Forward,
+ XF86XK_Stop, Qt::Key_Stop,
+ XF86XK_Refresh, Qt::Key_Refresh,
+ XF86XK_Favorites, Qt::Key_Favorites,
+ XF86XK_AudioMedia, Qt::Key_LaunchMedia,
+ XF86XK_OpenURL, Qt::Key_OpenUrl,
+ XF86XK_HomePage, Qt::Key_HomePage,
+ XF86XK_Search, Qt::Key_Search,
+
+ // media keys
+ XF86XK_AudioLowerVolume, Qt::Key_VolumeDown,
+ XF86XK_AudioMute, Qt::Key_VolumeMute,
+ XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp,
+ XF86XK_AudioPlay, Qt::Key_MediaPlay,
+ XF86XK_AudioStop, Qt::Key_MediaStop,
+ XF86XK_AudioPrev, Qt::Key_MediaPrevious,
+ XF86XK_AudioNext, Qt::Key_MediaNext,
+ XF86XK_AudioRecord, Qt::Key_MediaRecord,
+
+ // launch keys
+ XF86XK_Mail, Qt::Key_LaunchMail,
+ XF86XK_MyComputer, Qt::Key_Launch0,
+ XF86XK_Calculator, Qt::Key_Launch1,
+ XF86XK_Standby, Qt::Key_Standby,
+
+ XF86XK_Launch0, Qt::Key_Launch2,
+ XF86XK_Launch1, Qt::Key_Launch3,
+ XF86XK_Launch2, Qt::Key_Launch4,
+ XF86XK_Launch3, Qt::Key_Launch5,
+ XF86XK_Launch4, Qt::Key_Launch6,
+ XF86XK_Launch5, Qt::Key_Launch7,
+ XF86XK_Launch6, Qt::Key_Launch8,
+ XF86XK_Launch7, Qt::Key_Launch9,
+ XF86XK_Launch8, Qt::Key_LaunchA,
+ XF86XK_Launch9, Qt::Key_LaunchB,
+ XF86XK_LaunchA, Qt::Key_LaunchC,
+ XF86XK_LaunchB, Qt::Key_LaunchD,
+ XF86XK_LaunchC, Qt::Key_LaunchE,
+ XF86XK_LaunchD, Qt::Key_LaunchF,
+#endif
+
+#if 0
+ // Qtopia keys
+ QTOPIAXK_Select, Qt::Key_Select,
+ QTOPIAXK_Yes, Qt::Key_Yes,
+ QTOPIAXK_No, Qt::Key_No,
+ QTOPIAXK_Cancel, Qt::Key_Cancel,
+ QTOPIAXK_Printer, Qt::Key_Printer,
+ QTOPIAXK_Execute, Qt::Key_Execute,
+ QTOPIAXK_Sleep, Qt::Key_Sleep,
+ QTOPIAXK_Play, Qt::Key_Play,
+ QTOPIAXK_Zoom, Qt::Key_Zoom,
+ QTOPIAXK_Context1, Qt::Key_Context1,
+ QTOPIAXK_Context2, Qt::Key_Context2,
+ QTOPIAXK_Context3, Qt::Key_Context3,
+ QTOPIAXK_Context4, Qt::Key_Context4,
+ QTOPIAXK_Call, Qt::Key_Call,
+ QTOPIAXK_Hangup, Qt::Key_Hangup,
+ QTOPIAXK_Flip, Qt::Key_Flip,
+#endif
+ 0, 0
+};
+
+
+static int lookupCode(unsigned int xkeycode)
+{
+ if (xkeycode >= XK_F1 && xkeycode <= XK_F35)
+ return Qt::Key_F1 + (int(xkeycode) - XK_F1);
+
+ const unsigned int *p = keyTbl;
+ while (*p) {
+ if (*p == xkeycode)
+ return *++p;
+ p += 2;
+ }
+
+ return 0;
+}
+
+
+static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode)
+{
+ switch (qtcode) {
+ case Qt::Key_Control:
+ return Qt::ControlModifier;
+ case Qt::Key_Alt:
+ return Qt::AltModifier;
+ case Qt::Key_Shift:
+ return Qt::ShiftModifier;
+ case Qt::Key_Meta:
+ return Qt::MetaModifier;
+ default:
+ return Qt::NoModifier;
+ }
+}
+
+void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev)
+{
+ XKeyEvent *e = static_cast<XKeyEvent*>(ev);
+
+ KeySym keySym;
+ QByteArray chars;
+ chars.resize(513);
+
+ int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0);
+ Q_UNUSED(count);
+// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym;
+// if (count)
+// qDebug() << hex << int(chars[0]) << "String:" << chars;
+
+ Qt::KeyboardModifiers modifiers = translateModifiers(e->state);
+
+ int qtcode = lookupCode(keySym);
+// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers;
+
+ //X11 specifies state *before*, Qt expects state *after* the event
+
+ modifiers ^= modifierFromKeyCode(qtcode);
+
+ if (qtcode) {
+ QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers);
+ } else if (chars[0]) {
+ int qtcode = chars.toUpper()[0]; //Not exactly right...
+ if (modifiers & Qt::ControlModifier && qtcode < ' ')
+ qtcode = chars[0] + '@';
+ QWindowSystemInterface::handleKeyEvent(0, e->time, type, qtcode, modifiers, QString::fromLatin1(chars));
+ } else {
+ qWarning() << "unknown X keycode" << hex << e->keycode << keySym;
+ }
+}
+
+void QTestLiteWindow::setGeometry(const QRect &rect)
+{
+ XMoveResizeWindow(xd->display, x_window, rect.x(), rect.y(), rect.width(), rect.height());
+ QPlatformWindow::setGeometry(rect);
+}
+
+
+Qt::WindowFlags QTestLiteWindow::windowFlags() const
+{
+ return window_flags;
+}
+
+WId QTestLiteWindow::winId() const
+{
+ return x_window;
+}
+
+void QTestLiteWindow::setParent(const QPlatformWindow *window)
+{
+ QPoint point = widget()->mapTo(widget()->nativeParentWidget(),QPoint());
+ XReparentWindow(xd->display,x_window,window->winId(),point.x(),point.y());
+ XMapWindow(xd->display, x_window);
+}
+
+void QTestLiteWindow::raise()
+{
+ XRaiseWindow(xd->display, x_window);
+}
+
+void QTestLiteWindow::lower()
+{
+ XLowerWindow(xd->display, x_window);
+}
+
+void QTestLiteWindow::setWindowTitle(const QString &title)
+{
+ QByteArray ba = title.toLatin1(); //We're not making a general solution here...
+ XTextProperty windowName;
+ windowName.value = (unsigned char *)ba.constData();
+ windowName.encoding = XA_STRING;
+ windowName.format = 8;
+ windowName.nitems = ba.length();
+
+ XSetWMName(xd->display, x_window, &windowName);
+}
+
+GC QTestLiteWindow::createGC()
+{
+ GC gc;
+
+ gc = XCreateGC(xd->display, x_window, 0, 0);
+ if (gc < 0) {
+ qWarning("QTestLiteWindow::createGC() could not create GC");
+ }
+ return gc;
+}
+
+void QTestLiteWindow::paintEvent()
+{
+#ifdef MYX11_DEBUG
+// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted;
+#endif
+
+ if (QWindowSurface *surface = widget()->windowSurface())
+ surface->flush(widget(), QRect(xpos,ypos,width, height), QPoint());
+}
+
+
+void QTestLiteWindow::resizeEvent(XConfigureEvent *e)
+{
+ if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) {
+ //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window;
+ } else {
+ //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window;
+ xpos = e->x;
+ ypos = e->y;
+ }
+ width = e->width;
+ height = e->height;
+
+#ifdef MYX11_DEBUG
+ qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height;
+#endif
+
+ QWindowSystemInterface::handleGeometryChange(widget(), QRect(xpos, ypos, width, height));
+}
+
+
+void QTestLiteWindow::mousePressEvent(XButtonEvent *e)
+{
+ static long prevTime = 0;
+ static Window prevWindow;
+ static int prevX = -999;
+ static int prevY = -999;
+
+ QEvent::Type type = QEvent::MouseButtonPress;
+
+ if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval()
+ && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) {
+ type = QEvent::MouseButtonDblClick;
+ prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time
+ } else {
+ prevTime = e->time;
+ }
+ prevWindow = e->window;
+ prevX = e->x;
+ prevY = e->y;
+
+ handleMouseEvent(type, e);
+}
+
+
+
+// WindowFlag stuff, lots of copied code from qwidget_x11.cpp...
+
+//We're hacking here...
+
+
+// MWM support
+struct QtMWMHints {
+ ulong flags, functions, decorations;
+ long input_mode;
+ ulong status;
+};
+
+enum {
+ MWM_HINTS_FUNCTIONS = (1L << 0),
+
+ MWM_FUNC_ALL = (1L << 0),
+ MWM_FUNC_RESIZE = (1L << 1),
+ MWM_FUNC_MOVE = (1L << 2),
+ MWM_FUNC_MINIMIZE = (1L << 3),
+ MWM_FUNC_MAXIMIZE = (1L << 4),
+ MWM_FUNC_CLOSE = (1L << 5),
+
+ MWM_HINTS_DECORATIONS = (1L << 1),
+
+ MWM_DECOR_ALL = (1L << 0),
+ MWM_DECOR_BORDER = (1L << 1),
+ MWM_DECOR_RESIZEH = (1L << 2),
+ MWM_DECOR_TITLE = (1L << 3),
+ MWM_DECOR_MENU = (1L << 4),
+ MWM_DECOR_MINIMIZE = (1L << 5),
+ MWM_DECOR_MAXIMIZE = (1L << 6),
+
+ MWM_HINTS_INPUT_MODE = (1L << 2),
+
+ MWM_INPUT_MODELESS = 0L,
+ MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L,
+ MWM_INPUT_FULL_APPLICATION_MODAL = 3L
+};
+
+static Atom mwm_hint_atom = XNone;
+
+#if 0
+static QtMWMHints GetMWMHints(Display *display, Window window)
+{
+ QtMWMHints mwmhints;
+
+ Atom type;
+ int format;
+ ulong nitems, bytesLeft;
+ uchar *data = 0;
+ if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false,
+ mwm_hint_atom, &type, &format, &nitems, &bytesLeft,
+ &data) == Success)
+ && (type == mwm_hint_atom
+ && format == 32
+ && nitems >= 5)) {
+ mwmhints = *(reinterpret_cast<QtMWMHints *>(data));
+ } else {
+ mwmhints.flags = 0L;
+ mwmhints.functions = MWM_FUNC_ALL;
+ mwmhints.decorations = MWM_DECOR_ALL;
+ mwmhints.input_mode = 0L;
+ mwmhints.status = 0L;
+ }
+
+ if (data)
+ XFree(data);
+
+ return mwmhints;
+}
+#endif
+
+static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints)
+{
+ if (mwmhints.flags != 0l) {
+ XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32,
+ PropModeReplace, (unsigned char *) &mwmhints, 5);
+ } else {
+ XDeleteProperty(display, window, mwm_hint_atom);
+ }
+}
+
+// Returns true if we should set WM_TRANSIENT_FOR on \a w
+static inline bool isTransient(const QWidget *w)
+{
+ return ((w->windowType() == Qt::Dialog
+ || w->windowType() == Qt::Sheet
+ || w->windowType() == Qt::Tool
+ || w->windowType() == Qt::SplashScreen
+ || w->windowType() == Qt::ToolTip
+ || w->windowType() == Qt::Drawer
+ || w->windowType() == Qt::Popup)
+ && !w->testAttribute(Qt::WA_X11BypassTransientForHint));
+}
+
+
+
+Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags)
+{
+// Q_ASSERT(flags & Qt::Window);
+ window_flags = flags;
+
+ if (mwm_hint_atom == XNone) {
+ mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False);
+ }
+
+#ifdef MYX11_DEBUG
+ qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags;
+#endif
+ Qt::WindowType type = static_cast<Qt::WindowType>(int(flags & Qt::WindowType_Mask));
+
+ if (type == Qt::ToolTip)
+ flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint;
+ if (type == Qt::Popup)
+ flags |= Qt::X11BypassWindowManagerHint;
+
+ bool topLevel = (flags & Qt::Window);
+ bool popup = (type == Qt::Popup);
+ bool dialog = (type == Qt::Dialog
+ || type == Qt::Sheet);
+ bool desktop = (type == Qt::Desktop);
+ bool tool = (type == Qt::Tool || type == Qt::SplashScreen
+ || type == Qt::ToolTip || type == Qt::Drawer);
+
+
+ Q_UNUSED(topLevel);
+ Q_UNUSED(dialog);
+ Q_UNUSED(desktop);
+
+
+ bool tooltip = (type == Qt::ToolTip);
+
+ XSetWindowAttributes wsa;
+
+ QtMWMHints mwmhints;
+ mwmhints.flags = 0L;
+ mwmhints.functions = 0L;
+ mwmhints.decorations = 0;
+ mwmhints.input_mode = 0L;
+ mwmhints.status = 0L;
+
+
+ ulong wsa_mask = 0;
+ if (type != Qt::SplashScreen) { // && customize) {
+ mwmhints.flags |= MWM_HINTS_DECORATIONS;
+
+ bool customize = flags & Qt::CustomizeWindowHint;
+ if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) {
+ mwmhints.decorations |= MWM_DECOR_BORDER;
+ mwmhints.decorations |= MWM_DECOR_RESIZEH;
+
+ if (flags & Qt::WindowTitleHint)
+ mwmhints.decorations |= MWM_DECOR_TITLE;
+
+ if (flags & Qt::WindowSystemMenuHint)
+ mwmhints.decorations |= MWM_DECOR_MENU;
+
+ if (flags & Qt::WindowMinimizeButtonHint) {
+ mwmhints.decorations |= MWM_DECOR_MINIMIZE;
+ mwmhints.functions |= MWM_FUNC_MINIMIZE;
+ }
+
+ if (flags & Qt::WindowMaximizeButtonHint) {
+ mwmhints.decorations |= MWM_DECOR_MAXIMIZE;
+ mwmhints.functions |= MWM_FUNC_MAXIMIZE;
+ }
+
+ if (flags & Qt::WindowCloseButtonHint)
+ mwmhints.functions |= MWM_FUNC_CLOSE;
+ }
+ } else {
+ // if type == Qt::SplashScreen
+ mwmhints.decorations = MWM_DECOR_ALL;
+ }
+
+ if (tool) {
+ wsa.save_under = True;
+ wsa_mask |= CWSaveUnder;
+ }
+
+ if (flags & Qt::X11BypassWindowManagerHint) {
+ wsa.override_redirect = True;
+ wsa_mask |= CWOverrideRedirect;
+ }
+#if 0
+ if (wsa_mask && initializeWindow) {
+ Q_ASSERT(id);
+ XChangeWindowAttributes(dpy, id, wsa_mask, &wsa);
+ }
+#endif
+ if (mwmhints.functions != 0) {
+ mwmhints.flags |= MWM_HINTS_FUNCTIONS;
+ mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE;
+ } else {
+ mwmhints.functions = MWM_FUNC_ALL;
+ }
+
+ if (!(flags & Qt::FramelessWindowHint)
+ && flags & Qt::CustomizeWindowHint
+ && flags & Qt::WindowTitleHint
+ && !(flags &
+ (Qt::WindowMinimizeButtonHint
+ | Qt::WindowMaximizeButtonHint
+ | Qt::WindowCloseButtonHint))) {
+ // a special case - only the titlebar without any button
+ mwmhints.flags = MWM_HINTS_FUNCTIONS;
+ mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE;
+ mwmhints.decorations = 0;
+ }
+
+ SetMWMHints(xd->display, x_window, mwmhints);
+
+//##### only if initializeWindow???
+
+ if (popup || tooltip) { // popup widget
+#ifdef MYX11_DEBUG
+ qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect;
+#endif
+ // set EWMH window types
+ // setNetWmWindowTypes();
+
+ wsa.override_redirect = True;
+ wsa.save_under = True;
+ XChangeWindowAttributes(xd->display, x_window, CWOverrideRedirect | CWSaveUnder,
+ &wsa);
+ } else {
+#ifdef MYX11_DEBUG
+ qDebug() << "Doing XChangeWindowAttributes for non-popup";
+#endif
+ }
+
+ return flags;
+}
+
+void QTestLiteWindow::setVisible(bool visible)
+{
+#ifdef MYX11_DEBUG
+ qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window;
+#endif
+ if (visible)
+ XMapWindow(xd->display, x_window);
+ else
+ XUnmapWindow(xd->display, x_window);
+}
+
+
+void QTestLiteWindow::setCursor(QCursor * cursor)
+{
+ int id = cursor->handle();
+ if (id == currentCursor)
+ return;
+ Cursor c;
+ if (!xd->cursors->exists(id)) {
+ if (cursor->shape() == Qt::BitmapCursor)
+ c = createCursorBitmap(cursor);
+ else
+ c = createCursorShape(cursor->shape());
+ if (!c) {
+ return;
+ }
+ xd->cursors->createNode(id, c);
+ } else {
+ xd->cursors->incrementUseCount(id);
+ c = xd->cursors->cursor(id);
+ }
+
+ if (currentCursor != -1)
+ xd->cursors->decrementUseCount(currentCursor);
+ currentCursor = id;
+
+ XDefineCursor(xd->display, x_window, c);
+ XFlush(xd->display);
+}
+
+QPlatformGLContext *QTestLiteWindow::glContext() const
+{
+ if (!QApplicationPrivate::platformIntegration()->hasOpenGL())
+ return 0;
+ if (!mGLContext) {
+ QTestLiteWindow *that = const_cast<QTestLiteWindow *>(this);
+#ifndef QT_NO_OPENGL
+ that->mGLContext = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat());
+#endif
+ }
+ return mGLContext;
+}
+
+Cursor QTestLiteWindow::createCursorBitmap(QCursor * cursor)
+{
+ XColor bg, fg;
+ bg.red = 255 << 8;
+ bg.green = 255 << 8;
+ bg.blue = 255 << 8;
+ fg.red = 0;
+ fg.green = 0;
+ fg.blue = 0;
+ QPoint spot = cursor->hotSpot();
+ Window rootwin = x_window;
+
+ QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB);
+ QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB);
+
+ int width = cursor->bitmap()->width();
+ int height = cursor->bitmap()->height();
+ int bytesPerLine = mapImage.bytesPerLine();
+ int destLineSize = width / 8;
+ if (width % 8)
+ destLineSize++;
+
+ const uchar * map = mapImage.bits();
+ const uchar * mask = maskImage.bits();
+
+ char * mapBits = new char[height * destLineSize];
+ char * maskBits = new char[height * destLineSize];
+ for (int i = 0; i < height; i++) {
+ memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize);
+ memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize);
+ }
+
+ Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height);
+ Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height);
+ Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y());
+ XFreePixmap(xd->display, cp);
+ XFreePixmap(xd->display, mp);
+ delete[] mapBits;
+ delete[] maskBits;
+
+ return c;
+}
+
+Cursor QTestLiteWindow::createCursorShape(int cshape)
+{
+ Cursor cursor = 0;
+
+ if (cshape < 0 || cshape > Qt::LastCursor)
+ return 0;
+
+ switch (cshape) {
+ case Qt::ArrowCursor:
+ cursor = XCreateFontCursor(xd->display, XC_left_ptr);
+ break;
+ case Qt::UpArrowCursor:
+ cursor = XCreateFontCursor(xd->display, XC_center_ptr);
+ break;
+ case Qt::CrossCursor:
+ cursor = XCreateFontCursor(xd->display, XC_crosshair);
+ break;
+ case Qt::WaitCursor:
+ cursor = XCreateFontCursor(xd->display, XC_watch);
+ break;
+ case Qt::IBeamCursor:
+ cursor = XCreateFontCursor(xd->display, XC_xterm);
+ break;
+ case Qt::SizeAllCursor:
+ cursor = XCreateFontCursor(xd->display, XC_fleur);
+ break;
+ case Qt::PointingHandCursor:
+ cursor = XCreateFontCursor(xd->display, XC_hand2);
+ break;
+ case Qt::SizeBDiagCursor:
+ cursor = XCreateFontCursor(xd->display, XC_top_right_corner);
+ break;
+ case Qt::SizeFDiagCursor:
+ cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner);
+ break;
+ case Qt::SizeVerCursor:
+ case Qt::SplitVCursor:
+ cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow);
+ break;
+ case Qt::SizeHorCursor:
+ case Qt::SplitHCursor:
+ cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow);
+ break;
+ case Qt::WhatsThisCursor:
+ cursor = XCreateFontCursor(xd->display, XC_question_arrow);
+ break;
+ case Qt::ForbiddenCursor:
+ cursor = XCreateFontCursor(xd->display, XC_circle);
+ break;
+ case Qt::BusyCursor:
+ cursor = XCreateFontCursor(xd->display, XC_watch);
+ break;
+
+ default: //default cursor for all the rest
+ break;
+ }
+ return cursor;
+}
+
+
+MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3)
+{
+ connect(&timer, SIGNAL(timeout()), this, SLOT(timeout()));
+}
+
+void MyX11Cursors::insertNode(MyX11CursorNode * node)
+{
+ QDateTime now = QDateTime::currentDateTime();
+ QDateTime timeout = now.addSecs(removalDelay);
+ node->setExpiration(timeout);
+ node->setPost(0);
+ if (lastExpired) {
+ lastExpired->setPost(node);
+ node->setAnte(lastExpired);
+ }
+ lastExpired = node;
+ if (!firstExpired) {
+ firstExpired = node;
+ node->setAnte(0);
+ int interval = removalDelay * 1000;
+ timer.setInterval(interval);
+ timer.start();
+ }
+}
+
+void MyX11Cursors::removeNode(MyX11CursorNode * node)
+{
+ MyX11CursorNode *pre = node->ante();
+ MyX11CursorNode *post = node->post();
+ if (pre)
+ pre->setPost(post);
+ if (post)
+ post->setAnte(pre);
+ if (node == lastExpired)
+ lastExpired = pre;
+ if (node == firstExpired) {
+ firstExpired = post;
+ if (!firstExpired) {
+ timer.stop();
+ return;
+ }
+ int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000;
+ timer.stop();
+ timer.setInterval(interval);
+ timer.start();
+ }
+}
+
+void MyX11Cursors::incrementUseCount(int id)
+{
+ MyX11CursorNode * node = lookupMap.value(id);
+ Q_ASSERT(node);
+ if (!node->refCount)
+ removeNode(node);
+ node->refCount++;
+}
+
+void MyX11Cursors::decrementUseCount(int id)
+{
+ MyX11CursorNode * node = lookupMap.value(id);
+ Q_ASSERT(node);
+ node->refCount--;
+ if (!node->refCount)
+ insertNode(node);
+}
+
+void MyX11Cursors::createNode(int id, Cursor c)
+{
+ MyX11CursorNode * node = new MyX11CursorNode(id, c);
+ lookupMap.insert(id, node);
+}
+
+void MyX11Cursors::timeout()
+{
+ MyX11CursorNode * node;
+ node = firstExpired;
+ QDateTime now = QDateTime::currentDateTime();
+ while (node && now.secsTo(node->expiration()) < 1) {
+ Cursor c = node->cursor();
+ int id = node->id();
+ lookupMap.take(id);
+ MyX11CursorNode * tmp = node;
+ node = node->post();
+ if (node)
+ node->setAnte(0);
+ delete tmp;
+ XFreeCursor(display, c);
+ }
+ firstExpired = node;
+ if (node == 0) {
+ timer.stop();
+ lastExpired = 0;
+ }
+ else {
+ int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000;
+ timer.setInterval(interval);
+ timer.start();
+ }
+}
+
+Cursor MyX11Cursors::cursor(int id)
+{
+ MyX11CursorNode * node = lookupMap.value(id);
+ Q_ASSERT(node);
+ return node->cursor();
+}
+
+
+
+/********************************************************************
+
+MyDisplay class - perhaps better placed in qplatformintegration_testlite?
+
+*********************************************************************/
+
+//### copied from qapplication_x11.cpp
+
+static int qt_x_errhandler(Display *dpy, XErrorEvent *err)
+{
+
+qDebug() << "qt_x_errhandler" << err->error_code;
+
+ switch (err->error_code) {
+ case BadAtom:
+#if 0
+ if (err->request_code == 20 /* X_GetProperty */
+ && (err->resourceid == XA_RESOURCE_MANAGER
+ || err->resourceid == XA_RGB_DEFAULT_MAP
+ || err->resourceid == ATOM(_NET_SUPPORTED)
+ || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK)
+ || err->resourceid == ATOM(KDE_FULL_SESSION)
+ || err->resourceid == ATOM(KWIN_RUNNING)
+ || err->resourceid == ATOM(XdndProxy)
+ || err->resourceid == ATOM(XdndAware))
+
+
+ ) {
+ // Perhaps we're running under SECURITY reduction? :/
+ return 0;
+ }
+#endif
+ qDebug() << "BadAtom";
+ break;
+
+ case BadWindow:
+ if (err->request_code == 2 /* X_ChangeWindowAttributes */
+ || err->request_code == 38 /* X_QueryPointer */) {
+ for (int i = 0; i < ScreenCount(dpy); ++i) {
+ if (err->resourceid == RootWindow(dpy, i)) {
+ // Perhaps we're running under SECURITY reduction? :/
+ return 0;
+ }
+ }
+ }
+ seen_badwindow = true;
+ if (err->request_code == 25 /* X_SendEvent */) {
+ for (int i = 0; i < ScreenCount(dpy); ++i) {
+ if (err->resourceid == RootWindow(dpy, i)) {
+ // Perhaps we're running under SECURITY reduction? :/
+ return 0;
+ }
+ }
+#if 0
+ if (X11->xdndHandleBadwindow()) {
+ qDebug("xdndHandleBadwindow returned true");
+ return 0;
+ }
+#endif
+ }
+#if 0
+ if (X11->ignore_badwindow)
+ return 0;
+#endif
+ break;
+
+ case BadMatch:
+ if (err->request_code == 42 /* X_SetInputFocus */)
+ return 0;
+ break;
+
+ default:
+#if 0 //!defined(QT_NO_XINPUT)
+ if (err->request_code == X11->xinput_major
+ && err->error_code == (X11->xinput_errorbase + XI_BadDevice)
+ && err->minor_code == 3 /* X_OpenDevice */) {
+ return 0;
+ }
+#endif
+ break;
+ }
+
+ char errstr[256];
+ XGetErrorText( dpy, err->error_code, errstr, 256 );
+ char buffer[256];
+ char request_str[256];
+ qsnprintf(buffer, 256, "%d", err->request_code);
+ XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256);
+ if (err->request_code < 128) {
+ // X error for a normal protocol request
+ qWarning( "X Error: %s %d\n"
+ " Major opcode: %d (%s)\n"
+ " Resource id: 0x%lx",
+ errstr, err->error_code,
+ err->request_code,
+ request_str,
+ err->resourceid );
+ } else {
+ // X error for an extension request
+ const char *extensionName = 0;
+#if 0
+ if (err->request_code == X11->xrender_major)
+ extensionName = "RENDER";
+ else if (err->request_code == X11->xrandr_major)
+ extensionName = "RANDR";
+ else if (err->request_code == X11->xinput_major)
+ extensionName = "XInputExtension";
+ else if (err->request_code == X11->mitshm_major)
+ extensionName = "MIT-SHM";
+#endif
+ char minor_str[256];
+ if (extensionName) {
+ qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code);
+ XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256);
+ } else {
+ extensionName = "Uknown extension";
+ qsnprintf(minor_str, 256, "Unknown request");
+ }
+ qWarning( "X Error: %s %d\n"
+ " Extension: %d (%s)\n"
+ " Minor opcode: %d (%s)\n"
+ " Resource id: 0x%lx",
+ errstr, err->error_code,
+ err->request_code,
+ extensionName,
+ err->minor_code,
+ minor_str,
+ err->resourceid );
+ }
+
+ // ### we really should distinguish between severe, non-severe and
+ // ### application specific errors
+
+ return 0;
+}
+
+
+#ifdef KeyPress
+#undef KeyPress
+#endif
+#ifdef KeyRelease
+#undef KeyRelease
+#endif
+
+bool MyDisplay::handleEvent(XEvent *xe)
+{
+ //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window;
+ int quit = false;
+ QTestLiteWindow *xw = 0;
+ foreach (QTestLiteWindow *w, windowList) {
+ if (w->winId() == xe->xany.window) {
+ xw = w;
+ break;
+ }
+ }
+ if (!xw) {
+#ifdef MYX11_DEBUG
+ qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type;
+#endif
+ return quit;
+ }
+
+ switch (xe->type) {
+
+ case ClientMessage:
+ if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) {
+ Atom a = xe->xclient.data.l[0];
+ if (a == wmDeleteWindowAtom)
+ xw->handleCloseEvent();
+#ifdef MYX11_DEBUG
+ qDebug() << "ClientMessage WM_PROTOCOLS" << a;
+#endif
+ }
+#ifdef MYX11_DEBUG
+ else
+ qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type;
+#endif
+ break;
+
+ case Expose:
+ if (xw)
+ if (xe->xexpose.count == 0)
+ xw->paintEvent();
+ break;
+ case ConfigureNotify:
+ if (xw)
+ xw->resizeEvent(&xe->xconfigure);
+ break;
+
+ case ButtonPress:
+ xw->mousePressEvent(&xe->xbutton);
+ break;
+
+ case ButtonRelease:
+ xw->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton);
+ break;
+
+ case MotionNotify:
+ xw->handleMouseEvent(QEvent::MouseMove, &xe->xbutton);
+ break;
+
+ case XKeyPress:
+ xw->handleKeyEvent(QEvent::KeyPress, &xe->xkey);
+ break;
+
+ case XKeyRelease:
+ xw->handleKeyEvent(QEvent::KeyRelease, &xe->xkey);
+ break;
+
+ case EnterNotify:
+ xw->handleEnterEvent();
+ break;
+
+ case LeaveNotify:
+ xw->handleLeaveEvent();
+ break;
+
+ default:
+#ifdef MYX11_DEBUG
+ qDebug() << hex << xe->xany.window << "Other X event" << xe->type;
+#endif
+ break;
+ }
+ return quit;
+};
+
+
+
+MyDisplay::MyDisplay()
+{
+ char *display_name = getenv("DISPLAY");
+ display = XOpenDisplay(display_name);
+ if (!display) {
+ fprintf(stderr, "Cannot connect to X server: %s\n",
+ display_name);
+ exit(1);
+ }
+
+#ifndef DONT_USE_MIT_SHM
+ Status MIT_SHM_extension_supported = XShmQueryExtension (display);
+ Q_ASSERT(MIT_SHM_extension_supported == True);
+#endif
+ original_x_errhandler = XSetErrorHandler(qt_x_errhandler);
+
+ if (qgetenv("DO_X_SYNCHRONIZE").toInt())
+ XSynchronize(display, true);
+
+ screen = DefaultScreen(display);
+ width = DisplayWidth(display, screen);
+ height = DisplayHeight(display, screen);
+ physicalWidth = DisplayWidthMM(display, screen);
+ physicalHeight = DisplayHeightMM(display, screen);
+
+ int xSocketNumber = XConnectionNumber(display);
+#ifdef MYX11_DEBUG
+ qDebug() << "X socket:"<< xSocketNumber;
+#endif
+ QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this);
+ connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher()));
+
+ wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False);
+ wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False);
+
+ cursors = new MyX11Cursors(display);
+}
+
+
+MyDisplay::~MyDisplay()
+{
+ XCloseDisplay(display);
+}
+
+
+void MyDisplay::eventDispatcher()
+{
+// qDebug() << "eventDispatcher";
+
+
+ ulong marker = XNextRequest(display);
+// int i = 0;
+ while (XPending(display)) {
+ XEvent event;
+ XNextEvent(display, &event);
+ /* done = */
+ handleEvent(&event);
+
+ if (event.xany.serial >= marker) {
+#ifdef MYX11_DEBUG
+ qDebug() << "potential livelock averted";
+#endif
+#if 0
+ if (XEventsQueued(display, QueuedAfterFlush)) {
+ qDebug() << " with events queued";
+ QTimer::singleShot(0, this, SLOT(eventDispatcher()));
+ }
+#endif
+ break;
+ }
+ }
+}
+
+
+QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h)
+{
+ if (w == 0 || h ==0)
+ return QImage();
+
+ //WinId 0 means the desktop widget
+ if (!window)
+ window = rootWindow();
+
+ XWindowAttributes window_attr;
+ if (!XGetWindowAttributes(display, window, &window_attr))
+ return QImage();
+
+ if (w < 0)
+ w = window_attr.width - x;
+ if (h < 0)
+ h = window_attr.height - y;
+
+ // Ideally, we should also limit ourselves to the screen area, but the Qt docs say
+ // that it's "unsafe" to go outside the screen, so we can ignore that problem.
+
+ //We're definitely not optimizing for speed...
+ XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap);
+
+ if (!xi)
+ return QImage();
+
+ //taking a copy to make sure we have ownership -- not fast
+ QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy();
+
+ XDestroyImage(xi);
+
+ return result;
+}
+
+
+
+
+
+
+
+QT_END_NAMESPACE
+#include "qtestlitewindow.moc"
diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h
new file mode 100644
index 0000000..dc628f1
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestlitewindow.h
@@ -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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTESTLITEWINDOW_H
+#define QTESTLITEWINDOW_H
+
+#include <QPlatformWindow>
+#include <qevent.h>
+
+#include <QObject>
+#include <QImage>
+#include <qtimer.h>
+#include <QDateTime>
+
+#include <private/qt_x11_p.h>
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+
+
+class QTestLiteIntegration;
+class QTestLiteScreen;
+class QTestLiteWindowSurface;
+class MyX11Cursors;
+class QTestLiteWindow;
+
+class MyDisplay : public QObject
+{
+ Q_OBJECT;
+public:
+ MyDisplay();
+ ~MyDisplay();
+
+ Window rootWindow() { return RootWindow(display, screen); }
+ unsigned long blackPixel() { return BlackPixel(display, screen); }
+ unsigned long whitePixel() { return WhitePixel(display, screen); }
+
+ bool handleEvent(XEvent *xe);
+ QImage grabWindow(Window window, int x, int y, int w, int h);
+
+public slots:
+ void eventDispatcher();
+
+public: //###
+ Display * display;
+ int screen;
+ int width, height;
+ int physicalWidth;
+ int physicalHeight;
+
+ QList<QTestLiteWindow*> windowList;
+
+ MyX11Cursors * cursors;
+};
+
+struct MyShmImageInfo;
+
+class QTestLiteWindow : public QPlatformWindow
+{
+public:
+ QTestLiteWindow(const QTestLiteIntegration *platformIntegration,
+ QTestLiteScreen *screen, QWidget *window);
+ ~QTestLiteWindow();
+
+
+ void mousePressEvent(XButtonEvent*);
+ void handleMouseEvent(QEvent::Type, XButtonEvent *ev);
+
+ void handleKeyEvent(QEvent::Type, void *);
+ void handleCloseEvent();
+ void handleEnterEvent();
+ void handleLeaveEvent();
+
+ void resizeEvent(XConfigureEvent *configure_event);
+ void paintEvent();
+
+
+ void setGeometry(const QRect &rect);
+
+ Qt::WindowFlags setWindowFlags(Qt::WindowFlags type);
+ Qt::WindowFlags windowFlags() const;
+ void setVisible(bool visible);
+ WId winId() const;
+ void setParent(const QPlatformWindow *window);
+ void raise();
+ void lower();
+ void setWindowTitle(const QString &title);
+
+ void setCursor(QCursor * cursor);
+
+ QPlatformGLContext *glContext() const;
+
+private:
+ int xpos, ypos;
+ int width, height;
+ Window x_window;
+ GC gc;
+
+ GC createGC();
+ Cursor createCursorShape(int cshape);
+ Cursor createCursorBitmap(QCursor * cursor);
+
+ int currentCursor;
+
+ MyDisplay *xd;
+
+ QTestLiteScreen *mScreen;
+ Qt::WindowFlags window_flags;
+ QPlatformGLContext *mGLContext;
+
+ friend class QTestLiteWindowSurface; // x_window, gc and windowSurface
+};
+
+
+
+
+
+#endif
diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp
new file mode 100644
index 0000000..b3232c8
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp
@@ -0,0 +1,226 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtestlitewindowsurface.h"
+#include "qtestliteintegration.h"
+
+#include <QtCore/qdebug.h>
+#include <QWindowSystemInterface>
+
+#include "qtestlitewindow.h"
+
+# include <sys/ipc.h>
+# include <sys/shm.h>
+# include <X11/extensions/XShm.h>
+
+QT_BEGIN_NAMESPACE
+
+
+struct MyShmImageInfo {
+ MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {}
+ ~MyShmImageInfo() { destroy(); }
+
+ void destroy();
+
+ XShmSegmentInfo shminfo;
+ XImage *image;
+ Display *display;
+};
+
+//void QTestLiteWindowSurface::flush()
+
+
+#ifndef DONT_USE_MIT_SHM
+void MyShmImageInfo::destroy()
+{
+ XShmDetach (display, &shminfo);
+ XDestroyImage (image);
+ shmdt (shminfo.shmaddr);
+ shmctl (shminfo.shmid, IPC_RMID, 0);
+}
+#endif
+
+void QTestLiteWindowSurface::resizeShmImage(int width, int height)
+{
+ MyDisplay *xd = xw->xd;
+
+#ifdef DONT_USE_MIT_SHM
+ shm_img = QImage(width, height, QImage::Format_RGB32);
+#else
+ if (image_info)
+ image_info->destroy();
+ else
+ image_info = new MyShmImageInfo(xd->display);
+
+ Visual *visual = DefaultVisual(xd->display, xd->screen);
+
+
+ XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0,
+ &image_info->shminfo, width, height);
+
+
+ image_info->shminfo.shmid = shmget (IPC_PRIVATE,
+ image->bytes_per_line * image->height, IPC_CREAT|0777);
+
+ image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0);
+ image_info->shminfo.readOnly = False;
+
+ image_info->image = image;
+
+ Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo);
+
+ Q_ASSERT(shm_attach_status == True);
+
+ shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 );
+#endif
+ painted = false;
+}
+
+
+void QTestLiteWindowSurface::resizeBuffer(QSize s)
+{
+ if (shm_img.size() != s)
+ resizeShmImage(s.width(), s.height());
+}
+
+QSize QTestLiteWindowSurface::bufferSize() const
+{
+ return shm_img.size();
+}
+
+QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWidget *window)
+ : QWindowSurface(window),
+ painted(false), image_info(0)
+{
+ xw = static_cast<QTestLiteWindow*>(window->platformWindow());
+// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window;
+}
+
+QTestLiteWindowSurface::~QTestLiteWindowSurface()
+{
+ delete image_info;
+}
+
+QPaintDevice *QTestLiteWindowSurface::paintDevice()
+{
+ return &shm_img;
+}
+
+
+void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(widget);
+ Q_UNUSED(region);
+ Q_UNUSED(offset);
+
+ // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this;
+
+ if (!painted)
+ return;
+
+ MyDisplay *xd = xw->xd;
+ GC gc = xw->gc;
+ Window window = xw->x_window;
+#ifdef DONT_USE_MIT_SHM
+ // just convert the image every time...
+ if (!shm_img.isNull()) {
+ Visual *visual = DefaultVisual(xd->display, xd->screen);
+
+ QImage image = shm_img;
+ //img.convertToFormat(
+ XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap,
+ 0, (char *) image.scanLine(0), image.width(), image.height(),
+ 32, image.bytesPerLine());
+
+ int x = 0;
+ int y = 0;
+
+ /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height());
+
+ xi->data = 0; // QImage owns these bits
+ XDestroyImage(xi);
+ }
+#else
+ // Use MIT_SHM
+ if (image_info && image_info->image) {
+ //qDebug() << "Here we go" << image_info->image->width << image_info->image->height;
+ int x = 0;
+ int y = 0;
+
+ // We could set send_event to true, and then use the ShmCompletion to synchronize,
+ // but let's do like Qt/11 and just use XSync
+ XShmPutImage (xd->display, window, gc, image_info->image, 0, 0,
+ x, y, image_info->image->width, image_info->image->height,
+ /*send_event*/ False);
+
+ XSync(xd->display, False);
+ }
+#endif
+}
+
+// from qwindowsurface.cpp
+extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset);
+
+bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy)
+{
+ if (shm_img.isNull())
+ return false;
+
+ const QVector<QRect> rects = area.rects();
+ for (int i = 0; i < rects.size(); ++i)
+ qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy));
+
+ return true;
+}
+
+
+void QTestLiteWindowSurface::beginPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+ resizeBuffer(size());
+}
+
+void QTestLiteWindowSurface::endPaint(const QRegion &region)
+{
+ Q_UNUSED(region);
+ painted = true; //there is content in the buffer
+}
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.h b/src/plugins/platforms/testlite/qtestlitewindowsurface.h
new file mode 100644
index 0000000..915e7fe
--- /dev/null
+++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSURFACE_TESTLITE_H
+#define QWINDOWSURFACE_TESTLITE_H
+
+#include <QtGui/private/qwindowsurface_p.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class QTestLiteWindow;
+class QTestLiteIntegration;
+class QTestLiteScreen;
+class MyShmImageInfo;
+
+class QTestLiteWindowSurface : public QWindowSurface
+{
+public:
+ QTestLiteWindowSurface (QTestLiteScreen *screen, QWidget *window);
+ ~QTestLiteWindowSurface();
+
+ QPaintDevice *paintDevice();
+// void flush();
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+// void resize(const QSize &size);
+ bool scroll(const QRegion &area, int dx, int dy);
+
+ void beginPaint(const QRegion &region);
+ void endPaint(const QRegion &region);
+
+private:
+ bool painted;
+ void resizeBuffer(QSize);
+ QSize bufferSize() const;
+
+
+ void resizeShmImage(int width, int height);
+
+ QImage shm_img;
+ MyShmImageInfo *image_info;
+
+ QTestLiteWindow *xw;
+
+};
+
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro
new file mode 100644
index 0000000..05bd384
--- /dev/null
+++ b/src/plugins/platforms/testlite/testlite.pro
@@ -0,0 +1,29 @@
+TARGET = qtestlite
+
+include(../../qpluginbase.pri)
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+SOURCES = \
+ main.cpp \
+ qtestliteintegration.cpp \
+ qtestlitewindowsurface.cpp \
+ qtestlitewindow.cpp
+
+HEADERS = \
+ qtestliteintegration.h \
+ qtestlitewindowsurface.h \
+ qtestlitewindow.h
+
+
+LIBS += -lX11 -lXext
+
+include (../fontdatabases/genericunix/genericunix.pri)
+
+contains(QT_CONFIG, opengl) {
+ QT += opengl
+ HEADERS += qglxintegration.h
+ SOURCES += qglxintegration.cpp
+}
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+INSTALLS += target
diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp
new file mode 100644
index 0000000..e051e2d
--- /dev/null
+++ b/src/plugins/platforms/vnc/main.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qvncintegration.h"
+#include <qstringlist.h>
+#include <QtGui/QPlatformIntegrationPlugin>
+
+QT_BEGIN_NAMESPACE
+
+class QVNCIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+public:
+ QStringList keys() const;
+ QPlatformIntegration *create(const QString&, const QStringList &);
+};
+
+QStringList QVNCIntegrationPlugin::keys() const
+{
+ QStringList list;
+ list << "VNC";
+ return list;
+}
+
+QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ Q_UNUSED(paramList);
+ if (system.toLower() == "vnc")
+ return new QVNCIntegration(paramList);
+
+ return 0;
+}
+
+Q_EXPORT_PLUGIN2(vnc, QVNCIntegrationPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp
new file mode 100644
index 0000000..e83696d
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvnccursor.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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QPainter>
+#include <QTcpSocket>
+#include <arpa/inet.h>
+#include <QBitmap>
+#include <QApplication>
+
+#include <QDebug>
+
+#include "qvnccursor.h"
+#include "qvncserver.h"
+#include "qvncintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCScreen *scr )
+ :QPlatformSoftwareCursor(scr), useVncCursor(false), server(srvr)
+{
+}
+
+void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget)
+{
+ QPlatformSoftwareCursor::changeCursor(widgetCursor, widget);
+ if (useVncCursor) {
+ server->setDirtyCursor();
+ } else {
+ setDirty();
+ }
+}
+
+void QVNCCursor::setCursorMode(bool vnc)
+{
+ if (vnc) {
+ setDirty();
+ server->setDirtyCursor();
+ } else {
+ server->setDirtyCursor();
+ }
+ useVncCursor = vnc;
+}
+
+QRect QVNCCursor::drawCursor(QPainter & painter)
+{
+ if (useVncCursor)
+ return QRect();
+
+ return QPlatformSoftwareCursor::drawCursor(painter);
+}
+
+void QVNCCursor::clearClientCursor()
+{
+ QTcpSocket *socket = server->clientSocket();
+ if (!socket) {
+ return;
+ }
+ // FramebufferUpdate header
+ {
+ const quint16 tmp[6] = { htons(0),
+ htons(1),
+ htons(0), htons(0),
+ htons(0),
+ htons(0) };
+ socket->write((char*)tmp, sizeof(tmp));
+
+ const quint32 encoding = htonl(-239);
+ socket->write((char*)(&encoding), sizeof(encoding));
+ }
+}
+
+void QVNCCursor::sendClientCursor()
+{
+ if (useVncCursor == false) {
+ clearClientCursor();
+ return;
+ }
+ QImage *image = graphic->image();
+ if (image->isNull())
+ return;
+ QTcpSocket *socket = server->clientSocket();
+ if (!socket) {
+ return;
+ }
+ // FramebufferUpdate header
+ {
+ const quint16 tmp[6] = { htons(0),
+ htons(1),
+ htons(graphic->hotspot().x()), htons(graphic->hotspot().y()),
+ htons(image->width()),
+ htons(image->height()) };
+ socket->write((char*)tmp, sizeof(tmp));
+
+ const quint32 encoding = htonl(-239);
+ socket->write((char*)(&encoding), sizeof(encoding));
+ }
+
+ // write pixels
+ //Q_ASSERT(cursor->hasAlphaChannel());
+ const QImage img = image->convertToFormat(QImage::Format_RGB32);
+ const int n = server->clientBytesPerPixel() * img.width();
+ char *buffer = new char[n];
+ for (int i = 0; i < img.height(); ++i) {
+ server->convertPixels(buffer, (const char*)img.scanLine(i), img.width());
+ socket->write(buffer, n);
+ }
+ delete[] buffer;
+
+ // write mask
+ const QImage bitmap = image->createAlphaMask().convertToFormat(QImage::Format_Mono);
+ Q_ASSERT(bitmap.depth() == 1);
+ Q_ASSERT(bitmap.size() == img.size());
+ const int width = (bitmap.width() + 7) / 8;
+ for (int i = 0; i < bitmap.height(); ++i)
+ socket->write((const char*)bitmap.scanLine(i), width);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h
new file mode 100644
index 0000000..eeb3686
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvnccursor.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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 QtOpenVG module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QVNCCURSOR_H
+#define QVNCCURSOR_H
+
+#include "../fb_base/fb_base.h"
+#include <QList>
+#include <QImage>
+#include <QMouseEvent>
+
+QT_BEGIN_NAMESPACE
+
+class QVNCScreen;
+class QVNCServer;
+
+class QVNCCursor : public QPlatformSoftwareCursor {
+public:
+ QVNCCursor(QVNCServer *, QVNCScreen *);
+
+ // input methods
+ void setCursorMode(bool vnc);
+ void changeCursor(QCursor * widgetCursor, QWidget * widget);
+
+ // output methods
+ QRect drawCursor(QPainter &);
+
+ // VNC client communication
+ void sendClientCursor();
+ void clearClientCursor();
+private:
+ bool useVncCursor; // VNC or local
+
+ QVNCServer * server; // VNC server to get events from
+};
+
+QT_END_NAMESPACE
+
+#endif // QVNCCURSOR_H
diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp
new file mode 100644
index 0000000..b36ff33
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvncintegration.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 plugins 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 "qvncintegration.h"
+#include "../fb_base/fb_base.h"
+#include <private/qapplication_p.h>
+#include <QtGui/private/qpixmap_raster_p.h>
+#include <QtCore/qdebug.h>
+
+#include <qvncserver.h>
+#include <QtGui/QPainter>
+
+#include <QtCore/QTimer>
+#include "qgenericunixfontdatabase.h"
+
+QVNCScreen::QVNCScreen(QRect screenSize, int screenId)
+ : QFbScreen::QFbScreen()
+{
+ setGeometry(screenSize);
+ setDepth(32);
+ setFormat(QImage::Format_RGB32);
+ setPhysicalSize((geometry().size()*254)/720);
+
+
+ d_ptr = new QVNCScreenPrivate(this, screenId);
+
+ cursor = new QVNCCursor(d_ptr->vncServer, this);
+ d_ptr->vncServer->setCursor(static_cast<QVNCCursor *>(cursor));
+}
+
+QVNCDirtyMap *QVNCScreen::dirtyMap()
+{
+ return d_ptr->dirty;
+}
+
+QRegion QVNCScreen::doRedraw()
+{
+ QRegion touched;
+ touched = QFbScreen::doRedraw();
+
+ QVector<QRect> rects = touched.rects();
+ for (int i = 0; i < rects.size(); i++)
+ d_ptr->setDirty(rects[i]);
+ return touched;
+}
+
+static inline int defaultWidth() { return 800; }
+static inline int defaultHeight() { return 600; }
+static inline int defaultDisplay() { return 0; }
+
+static void usage()
+{
+ qWarning() << "VNC Platform Integration options:";
+ qWarning() << " size=<Width>x<Height> - set the display width and height";
+ qWarning() << " defaults to" << defaultWidth() << "x" << defaultHeight();
+ qWarning() << " display=<ID> - set the VNC display port to ID + 5900";
+ qWarning() << " defaults to" << defaultDisplay();
+ qWarning() << " offset=<X>x<Y> - set the current screens offset";
+ qWarning() << " vnc - start configuration of a new screen";
+ qWarning() << " size and offset are inherited from the previous screen if not set";
+ qWarning() << " display id is incremented from the previous screen if not set";
+ qWarning() << " virtual - manage the set of screens as a virtual desktop";
+}
+
+QVNCIntegration::QVNCIntegration(const QStringList& paramList)
+ : virtualDesktop(false), fontDb(new QGenericUnixFontDatabase())
+{
+ int sizeX = defaultWidth();
+ int sizeY = defaultHeight();
+ int offsetX = 0;
+ int offsetY = 0;
+ int display = defaultDisplay();
+ bool showUsage = false;
+
+ foreach(QString confString, paramList) {
+ if (confString.startsWith(QLatin1String("size="))) {
+ QString val = confString.section(QLatin1Char('='), 1, 1);
+ sizeX = val.section(QLatin1Char('x'), 0, 0).toInt();
+ sizeY = val.section(QLatin1Char('x'), 1, 1).toInt();
+ }
+ else if (confString.startsWith(QLatin1String("display="))) {
+ display = confString.section(QLatin1Char('='), 1, 1).toInt();
+ }
+ else if (confString.startsWith(QLatin1String("offset="))) {
+ QString val = confString.section(QLatin1Char('='), 1, 1);
+ offsetX = val.section(QLatin1Char('x'), 0, 0).toInt();
+ offsetY = val.section(QLatin1Char('x'), 1, 1).toInt();
+ }
+ else if (confString == QLatin1String("vnc")) {
+ QRect screenRect(offsetX, offsetY, sizeX, sizeY);
+ QVNCScreen *screen = new QVNCScreen(screenRect, display);
+ mScreens.append(screen);
+ screen->setObjectName(QString("screen %1").arg(display));
+ screen->setDirty(screenRect);
+ ++display;
+ }
+ else if (confString == QLatin1String("virtual")) {
+ virtualDesktop = true;
+ }
+ else {
+ qWarning() << "Unknown VNC option:" << confString;
+ showUsage = true;
+ }
+ }
+
+ if (showUsage)
+ usage();
+
+ QRect screenRect(offsetX, offsetY, sizeX, sizeY);
+ QVNCScreen *screen = new QVNCScreen(screenRect, display);
+ mScreens.append(screen);
+ mPrimaryScreen = qobject_cast<QVNCScreen *>(mScreens.first());
+ screen->setObjectName(QString("screen %1").arg(display));
+ screen->setDirty(screenRect);
+}
+
+QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const
+{
+ return new QRasterPixmapData(type);
+}
+
+QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const
+{
+ QFbWindowSurface * surface;
+ surface = new QFbWindowSurface(mPrimaryScreen, widget);
+ return surface;
+}
+
+
+QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const
+{
+ QFbWindow *w = new QFbWindow(widget);
+ if (virtualDesktop) {
+ QList<QPlatformScreen *>::const_iterator i = mScreens.constBegin();
+ QList<QPlatformScreen *>::const_iterator end = mScreens.constEnd();
+ QFbScreen *screen;
+ while (i != end) {
+ screen = static_cast<QFbScreen *>(*i);
+ screen->addWindow(w);
+ ++i;
+ }
+ }
+ else
+ mPrimaryScreen->addWindow(w);
+ return w;
+}
+
+QPixmap QVNCIntegration::grabWindow(WId window, int x, int y, int width, int height) const
+{
+// qDebug() << "QVNCIntegration::grabWindow" << window << x << y << width << height;
+
+ if (window == 0) { //desktop
+ QImage *desktopImage = mPrimaryScreen->image();
+ if (x==0 && y == 0 && width < 0 && height < 0) {
+ return QPixmap::fromImage(*desktopImage);
+ }
+ if (width < 0)
+ width = desktopImage->width() - x;
+ if (height < 0)
+ height = desktopImage->height() - y;
+ int bytesPerPixel = desktopImage->depth()/8; //We don't support 1, 2, or 4 bpp
+ QImage img(desktopImage->scanLine(y) + bytesPerPixel*x, width, height, desktopImage->bytesPerLine(), desktopImage->format());
+ return QPixmap::fromImage(img);
+ }
+ QWidget *win = QWidget::find(window);
+ if (win) {
+ QRect r = win->geometry();
+ if (width < 0)
+ width = r.width() - x;
+ if (height < 0)
+ height = r.height() - y;
+ QImage *desktopImage = mPrimaryScreen->image();
+ int bytesPerPixel = desktopImage->depth()/8; //We don't support 1, 2, or 4 bpp
+
+ QImage img(desktopImage->scanLine(r.top() + y) + bytesPerPixel*(r.left()+x), width, height, desktopImage->bytesPerLine(), desktopImage->format());
+ return QPixmap::fromImage(img);
+ }
+ return QPixmap();
+}
+
+
+void QVNCIntegration::moveToScreen(QWidget *window, int screen)
+{
+ if (virtualDesktop) { // all windows exist on all screens in virtual desktop mode
+ return;
+ }
+ if (screen < 0 || screen > mScreens.size())
+ return;
+ QVNCScreen * newScreen = qobject_cast<QVNCScreen *>(mScreens.at(screen));
+ for(int i = 0; i < mScreens.size(); i++) {
+ QVNCScreen *oldScreen = qobject_cast<QVNCScreen *>(mScreens.at(i));
+ if (oldScreen->windowStack.contains(static_cast<QFbWindow *>(window->platformWindow()))) {
+ oldScreen->removeWindow(static_cast<QFbWindow *>(window->platformWindow()));
+ break;
+ }
+ }
+ window->platformWindow()->setGeometry(window->geometry()); // this should be unified elsewhere
+ newScreen->addWindow(static_cast<QFbWindow *>(window->platformWindow()));
+}
+
+QPlatformFontDatabase *QVNCIntegration::fontDatabase() const
+{
+ return fontDb;
+}
diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h
new file mode 100644
index 0000000..dfc0e6b
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvncintegration.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** 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 plugins 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 QGRAPHICSSYSTEM_VNC_H
+#define QGRAPHICSSYSTEM_VNC_H
+
+#include "qvnccursor.h"
+#include "../fb_base/fb_base.h"
+#include <QPlatformIntegration>
+#include "qgenericunixfontdatabase.h"
+
+QT_BEGIN_NAMESPACE
+
+class QVNCServer;
+class QVNCDirtyMap;
+
+class QVNCScreenPrivate;
+
+class QVNCScreen : public QFbScreen
+{
+ Q_OBJECT
+public:
+ QVNCScreen(QRect screenSize, int screenId);
+
+ int linestep() const { return image() ? image()->bytesPerLine() : 0; }
+ uchar *base() const { return image() ? image()->bits() : 0; }
+ QVNCDirtyMap *dirtyMap();
+
+public:
+ QVNCScreenPrivate *d_ptr;
+
+private:
+ QVNCServer *server;
+ QRegion doRedraw();
+ friend class QVNCIntegration;
+};
+
+class QVNCIntegrationPrivate;
+
+
+class QVNCIntegration : public QPlatformIntegration
+{
+public:
+ QVNCIntegration(const QStringList& paramList);
+
+ QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
+ QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const;
+ QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const;
+
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const;
+
+ QList<QPlatformScreen *> screens() const { return mScreens; }
+
+ bool isVirtualDesktop() { return virtualDesktop; }
+ void moveToScreen(QWidget *window, int screen);
+
+ QPlatformFontDatabase *fontDatabase() const;
+
+private:
+ QVNCScreen *mPrimaryScreen;
+ QList<QPlatformScreen *> mScreens;
+ bool virtualDesktop;
+ QPlatformFontDatabase *fontDb;
+};
+
+
+
+QT_END_NAMESPACE
+
+#endif //QGRAPHICSSYSTEM_VNC_H
+
diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp
new file mode 100644
index 0000000..288d1bc
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvncserver.cpp
@@ -0,0 +1,1935 @@
+/****************************************************************************
+**
+** 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 plugins 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 "qvncserver.h"
+
+#include <QtCore/qtimer.h>
+#include <QtCore/qregexp.h>
+#include <QtGui/qwidget.h>
+#include <QtGui/qpolygon.h>
+#include <QtGui/qpainter.h>
+
+#include <QtGui/qevent.h>
+#include <QWindowSystemInterface>
+
+#include <qplatformdefs.h>
+
+#include <qdebug.h>
+
+#include <stdlib.h>
+
+
+#define QT_QWS_VNC_DEBUG
+#define QT_NO_QWS_CURSOR //###
+
+
+QT_BEGIN_NAMESPACE
+
+
+
+//copied from qscreen_qws.h
+#ifndef QT_QWS_DEPTH16_RGB
+#define QT_QWS_DEPTH16_RGB 565
+#endif
+static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100);
+static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10);
+static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10);
+static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits);
+static const int qt_green_shift = qt_bbits-(8-qt_gbits);
+static const int qt_neg_blue_shift = 8-qt_bbits;
+static const int qt_blue_mask = (1<<qt_bbits)-1;
+static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits);
+static const int qt_red_mask = (1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits));
+
+static const int qt_red_rounding_shift = qt_red_shift + qt_rbits;
+static const int qt_green_rounding_shift = qt_green_shift + qt_gbits;
+static const int qt_blue_rounding_shift = qt_bbits - qt_neg_blue_shift;
+
+
+inline QRgb qt_conv16ToRgb(ushort c)
+{
+ const int r=(c & qt_red_mask);
+ const int g=(c & qt_green_mask);
+ const int b=(c & qt_blue_mask);
+ const int tr = r >> qt_red_shift | r >> qt_red_rounding_shift;
+ const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift;
+ const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift;
+
+ return qRgb(tr,tg,tb);
+}
+
+
+
+//===========================================================================
+
+static const struct {
+ int keysym;
+ int keycode;
+} keyMap[] = {
+ { 0xff08, Qt::Key_Backspace },
+ { 0xff09, Qt::Key_Tab },
+ { 0xff0d, Qt::Key_Return },
+ { 0xff1b, Qt::Key_Escape },
+ { 0xff63, Qt::Key_Insert },
+ { 0xffff, Qt::Key_Delete },
+ { 0xff50, Qt::Key_Home },
+ { 0xff57, Qt::Key_End },
+ { 0xff55, Qt::Key_PageUp },
+ { 0xff56, Qt::Key_PageDown },
+ { 0xff51, Qt::Key_Left },
+ { 0xff52, Qt::Key_Up },
+ { 0xff53, Qt::Key_Right },
+ { 0xff54, Qt::Key_Down },
+ { 0xffbe, Qt::Key_F1 },
+ { 0xffbf, Qt::Key_F2 },
+ { 0xffc0, Qt::Key_F3 },
+ { 0xffc1, Qt::Key_F4 },
+ { 0xffc2, Qt::Key_F5 },
+ { 0xffc3, Qt::Key_F6 },
+ { 0xffc4, Qt::Key_F7 },
+ { 0xffc5, Qt::Key_F8 },
+ { 0xffc6, Qt::Key_F9 },
+ { 0xffc7, Qt::Key_F10 },
+ { 0xffc8, Qt::Key_F11 },
+ { 0xffc9, Qt::Key_F12 },
+ { 0xffe1, Qt::Key_Shift },
+ { 0xffe2, Qt::Key_Shift },
+ { 0xffe3, Qt::Key_Control },
+ { 0xffe4, Qt::Key_Control },
+ { 0xffe7, Qt::Key_Meta },
+ { 0xffe8, Qt::Key_Meta },
+ { 0xffe9, Qt::Key_Alt },
+ { 0xffea, Qt::Key_Alt },
+ { 0, 0 }
+};
+
+void QRfbRect::read(QTcpSocket *s)
+{
+ quint16 buf[4];
+ s->read((char*)buf, 8);
+ x = ntohs(buf[0]);
+ y = ntohs(buf[1]);
+ w = ntohs(buf[2]);
+ h = ntohs(buf[3]);
+}
+
+void QRfbRect::write(QTcpSocket *s) const
+{
+ quint16 buf[4];
+ buf[0] = htons(x);
+ buf[1] = htons(y);
+ buf[2] = htons(w);
+ buf[3] = htons(h);
+ s->write((char*)buf, 8);
+}
+
+void QRfbPixelFormat::read(QTcpSocket *s)
+{
+ char buf[16];
+ s->read(buf, 16);
+ bitsPerPixel = buf[0];
+ depth = buf[1];
+ bigEndian = buf[2];
+ trueColor = buf[3];
+
+ quint16 a = ntohs(*(quint16 *)(buf + 4));
+ redBits = 0;
+ while (a) { a >>= 1; redBits++; }
+
+ a = ntohs(*(quint16 *)(buf + 6));
+ greenBits = 0;
+ while (a) { a >>= 1; greenBits++; }
+
+ a = ntohs(*(quint16 *)(buf + 8));
+ blueBits = 0;
+ while (a) { a >>= 1; blueBits++; }
+
+ redShift = buf[10];
+ greenShift = buf[11];
+ blueShift = buf[12];
+}
+
+void QRfbPixelFormat::write(QTcpSocket *s)
+{
+ char buf[16];
+ buf[0] = bitsPerPixel;
+ buf[1] = depth;
+ buf[2] = bigEndian;
+ buf[3] = trueColor;
+
+ quint16 a = 0;
+ for (int i = 0; i < redBits; i++) a = (a << 1) | 1;
+ *(quint16 *)(buf + 4) = htons(a);
+
+ a = 0;
+ for (int i = 0; i < greenBits; i++) a = (a << 1) | 1;
+ *(quint16 *)(buf + 6) = htons(a);
+
+ a = 0;
+ for (int i = 0; i < blueBits; i++) a = (a << 1) | 1;
+ *(quint16 *)(buf + 8) = htons(a);
+
+ buf[10] = redShift;
+ buf[11] = greenShift;
+ buf[12] = blueShift;
+ s->write(buf, 16);
+}
+
+
+void QRfbServerInit::setName(const char *n)
+{
+ delete[] name;
+ name = new char [strlen(n) + 1];
+ strcpy(name, n);
+}
+
+void QRfbServerInit::read(QTcpSocket *s)
+{
+ s->read((char *)&width, 2);
+ width = ntohs(width);
+ s->read((char *)&height, 2);
+ height = ntohs(height);
+ format.read(s);
+
+ quint32 len;
+ s->read((char *)&len, 4);
+ len = ntohl(len);
+
+ name = new char [len + 1];
+ s->read(name, len);
+ name[len] = '\0';
+}
+
+void QRfbServerInit::write(QTcpSocket *s)
+{
+ quint16 t = htons(width);
+ s->write((char *)&t, 2);
+ t = htons(height);
+ s->write((char *)&t, 2);
+ format.write(s);
+ quint32 len = strlen(name);
+ len = htonl(len);
+ s->write((char *)&len, 4);
+ s->write(name, strlen(name));
+}
+
+bool QRfbSetEncodings::read(QTcpSocket *s)
+{
+ if (s->bytesAvailable() < 3)
+ return false;
+
+ char tmp;
+ s->read(&tmp, 1); // padding
+ s->read((char *)&count, 2);
+ count = ntohs(count);
+
+ return true;
+}
+
+bool QRfbFrameBufferUpdateRequest::read(QTcpSocket *s)
+{
+ if (s->bytesAvailable() < 9)
+ return false;
+
+ s->read(&incremental, 1);
+ rect.read(s);
+
+ return true;
+}
+
+bool QRfbKeyEvent::read(QTcpSocket *s)
+{
+ if (s->bytesAvailable() < 7)
+ return false;
+
+ s->read(&down, 1);
+ quint16 tmp;
+ s->read((char *)&tmp, 2); // padding
+
+ quint32 key;
+ s->read((char *)&key, 4);
+ key = ntohl(key);
+
+ unicode = 0;
+ keycode = 0;
+ int i = 0;
+ while (keyMap[i].keysym && !keycode) {
+ if (keyMap[i].keysym == (int)key)
+ keycode = keyMap[i].keycode;
+ i++;
+ }
+ if (!keycode) {
+ if (key <= 0xff) {
+ unicode = key;
+ if (key >= 'a' && key <= 'z')
+ keycode = Qt::Key_A + key - 'a';
+ else if (key >= ' ' && key <= '~')
+ keycode = Qt::Key_Space + key - ' ';
+ }
+ }
+
+ return true;
+}
+
+bool QRfbPointerEvent::read(QTcpSocket *s)
+{
+ if (s->bytesAvailable() < 5)
+ return false;
+
+ char buttonMask;
+ s->read(&buttonMask, 1);
+
+ buttons = Qt::NoButton;
+ wheelDirection = WheelNone;
+ if (buttonMask & 1)
+ buttons |= Qt::LeftButton;
+ if (buttonMask & 2)
+ buttons |= Qt::MidButton;
+ if (buttonMask & 4)
+ buttons |= Qt::RightButton;
+ if (buttonMask & 8)
+ wheelDirection = WheelUp;
+ if (buttonMask & 16)
+ wheelDirection = WheelDown;
+ if (buttonMask & 32)
+ wheelDirection = WheelLeft;
+ if (buttonMask & 64)
+ wheelDirection = WheelRight;
+
+ quint16 tmp;
+ s->read((char *)&tmp, 2);
+ x = ntohs(tmp);
+ s->read((char *)&tmp, 2);
+ y = ntohs(tmp);
+
+ return true;
+}
+
+bool QRfbClientCutText::read(QTcpSocket *s)
+{
+ if (s->bytesAvailable() < 7)
+ return false;
+
+ char tmp[3];
+ s->read(tmp, 3); // padding
+ s->read((char *)&length, 4);
+ length = ntohl(length);
+
+ return true;
+}
+
+//===========================================================================
+
+QVNCServer::QVNCServer(QVNCScreen *screen)
+ : qvnc_screen(screen), cursor(0)
+{
+ init(5900);
+}
+
+QVNCServer::QVNCServer(QVNCScreen *screen, int id)
+ : qvnc_screen(screen), cursor(0)
+{
+ init(5900 + id);
+}
+
+void QVNCServer::init(uint port)
+{
+ qDebug() << "QVNCServer::init" << port;
+
+ handleMsg = false;
+ client = 0;
+ encodingsPending = 0;
+ cutTextPending = 0;
+ keymod = 0;
+ state = Unconnected;
+ dirtyCursor = false;
+
+ refreshRate = 25;
+ timer = new QTimer(this);
+ timer->setSingleShot(true);
+ connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate()));
+
+ serverSocket = new QTcpServer(this);
+ if (!serverSocket->listen(QHostAddress::Any, port))
+ qDebug() << "QVNCServer could not connect:" << serverSocket->errorString();
+ else
+ qDebug("QVNCServer created on port %d", port);
+
+ connect(serverSocket, SIGNAL(newConnection()), this, SLOT(newConnection()));
+
+#ifndef QT_NO_QWS_CURSOR
+ qvnc_cursor = 0;
+#endif
+ encoder = 0;
+}
+
+QVNCServer::~QVNCServer()
+{
+ delete encoder;
+ encoder = 0;
+ delete client;
+ client = 0;
+#ifndef QT_NO_QWS_CURSOR
+ delete qvnc_cursor;
+ qvnc_cursor = 0;
+#endif
+}
+
+void QVNCServer::setDirty()
+{
+ if (state == Connected && !timer->isActive() &&
+ ((dirtyMap()->numDirty > 0) || dirtyCursor)) {
+ timer->start();
+ }
+}
+
+void QVNCServer::newConnection()
+{
+ if (client)
+ delete client;
+
+ client = serverSocket->nextPendingConnection();
+ connect(client,SIGNAL(readyRead()),this,SLOT(readClient()));
+ connect(client,SIGNAL(disconnected()),this,SLOT(discardClient()));
+ handleMsg = false;
+ encodingsPending = 0;
+ cutTextPending = 0;
+ supportHextile = false;
+ wantUpdate = false;
+
+ timer->start(1000 / refreshRate);
+ dirtyMap()->reset();
+
+ // send protocol version
+ const char *proto = "RFB 003.003\n";
+ client->write(proto, 12);
+ state = Protocol;
+
+// if (!qvnc_screen->screen())
+// QWSServer::instance()->enablePainting(true);
+}
+
+void QVNCServer::readClient()
+{
+ switch (state) {
+ case Protocol:
+ if (client->bytesAvailable() >= 12) {
+ char proto[13];
+ client->read(proto, 12);
+ proto[12] = '\0';
+ qDebug("Client protocol version %s", proto);
+ // No authentication
+ quint32 auth = htonl(1);
+ client->write((char *) &auth, sizeof(auth));
+ state = Init;
+ }
+ break;
+
+ case Init:
+ if (client->bytesAvailable() >= 1) {
+ quint8 shared;
+ client->read((char *) &shared, 1);
+
+ // Server Init msg
+ QRfbServerInit sim;
+ QRfbPixelFormat &format = sim.format;
+ switch (qvnc_screen->depth()) {
+ case 32:
+ format.bitsPerPixel = 32;
+ format.depth = 32;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 8;
+ format.greenBits = 8;
+ format.blueBits = 8;
+ format.redShift = 16;
+ format.greenShift = 8;
+ format.blueShift = 0;
+ break;
+
+ case 24:
+ format.bitsPerPixel = 24;
+ format.depth = 24;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 8;
+ format.greenBits = 8;
+ format.blueBits = 8;
+ format.redShift = 16;
+ format.greenShift = 8;
+ format.blueShift = 0;
+ break;
+
+ case 18:
+ format.bitsPerPixel = 24;
+ format.depth = 18;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 6;
+ format.greenBits = 6;
+ format.blueBits = 6;
+ format.redShift = 12;
+ format.greenShift = 6;
+ format.blueShift = 0;
+ break;
+
+ case 16:
+ format.bitsPerPixel = 16;
+ format.depth = 16;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 5;
+ format.greenBits = 6;
+ format.blueBits = 5;
+ format.redShift = 11;
+ format.greenShift = 5;
+ format.blueShift = 0;
+ break;
+
+ case 15:
+ format.bitsPerPixel = 16;
+ format.depth = 15;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 5;
+ format.greenBits = 5;
+ format.blueBits = 5;
+ format.redShift = 10;
+ format.greenShift = 5;
+ format.blueShift = 0;
+ break;
+
+ case 12:
+ format.bitsPerPixel = 16;
+ format.depth = 12;
+ format.bigEndian = 0;
+ format.trueColor = true;
+ format.redBits = 4;
+ format.greenBits = 4;
+ format.blueBits = 4;
+ format.redShift = 8;
+ format.greenShift = 4;
+ format.blueShift = 0;
+ break;
+
+ case 8:
+ case 4:
+ format.bitsPerPixel = 8;
+ format.depth = 8;
+ format.bigEndian = 0;
+ format.trueColor = false;
+ format.redBits = 0;
+ format.greenBits = 0;
+ format.blueBits = 0;
+ format.redShift = 0;
+ format.greenShift = 0;
+ format.blueShift = 0;
+ break;
+
+ default:
+ qDebug("QVNC cannot drive depth %d", qvnc_screen->depth());
+ discardClient();
+ return;
+ }
+ sim.width = qvnc_screen->geometry().width();
+ sim.height = qvnc_screen->geometry().height();
+ sim.setName("Qt for Embedded Linux VNC Server");
+ sim.write(client);
+ state = Connected;
+ }
+ break;
+
+ case Connected:
+ do {
+ if (!handleMsg) {
+ client->read((char *)&msgType, 1);
+ handleMsg = true;
+ }
+ if (handleMsg) {
+ switch (msgType ) {
+ case SetPixelFormat:
+ setPixelFormat();
+ break;
+ case FixColourMapEntries:
+ qDebug("Not supported: FixColourMapEntries");
+ handleMsg = false;
+ break;
+ case SetEncodings:
+ setEncodings();
+ break;
+ case FramebufferUpdateRequest:
+ frameBufferUpdateRequest();
+ break;
+ case KeyEvent:
+ keyEvent();
+ break;
+ case PointerEvent:
+ pointerEvent();
+ break;
+ case ClientCutText:
+ clientCutText();
+ break;
+ default:
+ qDebug("Unknown message type: %d", (int)msgType);
+ handleMsg = false;
+ }
+ }
+ } while (!handleMsg && client->bytesAvailable());
+ break;
+ default:
+ break;
+ }
+}
+
+#if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN
+bool QVNCScreen::swapBytes() const
+{
+ if (depth() != 16)
+ return false;
+
+ if (screen())
+ return screen()->frameBufferLittleEndian();
+ return frameBufferLittleEndian();
+}
+#endif
+
+void QVNCServer::setPixelFormat()
+{
+ if (client->bytesAvailable() >= 19) {
+ char buf[3];
+ client->read(buf, 3); // just padding
+ pixelFormat.read(client);
+#ifdef QT_QWS_VNC_DEBUG
+ qDebug("Want format: %d %d %d %d %d %d %d %d %d %d",
+ int(pixelFormat.bitsPerPixel),
+ int(pixelFormat.depth),
+ int(pixelFormat.bigEndian),
+ int(pixelFormat.trueColor),
+ int(pixelFormat.redBits),
+ int(pixelFormat.greenBits),
+ int(pixelFormat.blueBits),
+ int(pixelFormat.redShift),
+ int(pixelFormat.greenShift),
+ int(pixelFormat.blueShift));
+#endif
+ if (!pixelFormat.trueColor) {
+ qDebug("Can only handle true color clients");
+ discardClient();
+ }
+ handleMsg = false;
+ sameEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) == !!pixelFormat.bigEndian;
+ needConversion = pixelConversionNeeded();
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ swapBytes = qvnc_screen->swapBytes();
+#endif
+ }
+}
+
+void QVNCServer::setEncodings()
+{
+ QRfbSetEncodings enc;
+
+ if (!encodingsPending && enc.read(client)) {
+ encodingsPending = enc.count;
+ if (!encodingsPending)
+ handleMsg = false;
+ }
+
+ if (encoder) {
+ delete encoder;
+ encoder = 0;
+ }
+
+ enum Encodings {
+ Raw = 0,
+ CopyRect = 1,
+ RRE = 2,
+ CoRRE = 4,
+ Hextile = 5,
+ ZRLE = 16,
+ Cursor = -239,
+ DesktopSize = -223
+ };
+
+ supportCursor = false;
+
+ if (encodingsPending && (unsigned)client->bytesAvailable() >=
+ encodingsPending * sizeof(quint32)) {
+ for (int i = 0; i < encodingsPending; ++i) {
+ qint32 enc;
+ client->read((char *)&enc, sizeof(qint32));
+ enc = ntohl(enc);
+#ifdef QT_QWS_VNC_DEBUG
+ qDebug("QVNCServer::setEncodings: %d", enc);
+#endif
+ switch (enc) {
+ case Raw:
+ if (!encoder) {
+ encoder = new QRfbRawEncoder(this);
+#ifdef QT_QWS_VNC_DEBUG
+ qDebug("QVNCServer::setEncodings: using raw");
+#endif
+ }
+ break;
+ case CopyRect:
+ supportCopyRect = true;
+ break;
+ case RRE:
+ supportRRE = true;
+ break;
+ case CoRRE:
+ supportCoRRE = true;
+ break;
+ case Hextile:
+ supportHextile = true;
+ if (encoder)
+ break;
+ switch (qvnc_screen->depth()) {
+#ifdef QT_QWS_DEPTH_8
+ case 8:
+ encoder = new QRfbHextileEncoder<quint8>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_12
+ case 12:
+ encoder = new QRfbHextileEncoder<qrgb444>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_15
+ case 15:
+ encoder = new QRfbHextileEncoder<qrgb555>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_16
+ case 16:
+ encoder = new QRfbHextileEncoder<quint16>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_18
+ case 18:
+ encoder = new QRfbHextileEncoder<qrgb666>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_24
+ case 24:
+ encoder = new QRfbHextileEncoder<qrgb888>(this);
+ break;
+#endif
+#ifdef QT_QWS_DEPTH_32
+ case 32:
+ encoder = new QRfbHextileEncoder<quint32>(this);
+ break;
+#endif
+ default:
+ break;
+ }
+#ifdef QT_QWS_VNC_DEBUG
+ qDebug("QVNCServer::setEncodings: using hextile");
+#endif
+ break;
+ case ZRLE:
+ supportZRLE = true;
+ break;
+ case Cursor:
+ supportCursor = true;
+#ifndef QT_NO_QWS_CURSOR
+ if (!qvnc_screen->screen() || qt_screencursor->isAccelerated()) {
+ delete qvnc_cursor;
+ qvnc_cursor = new QVNCClientCursor(this);
+ }
+#endif
+ break;
+ case DesktopSize:
+ supportDesktopSize = true;
+ break;
+ default:
+ break;
+ }
+ }
+ handleMsg = false;
+ encodingsPending = 0;
+ }
+
+ if (!encoder) {
+ encoder = new QRfbRawEncoder(this);
+#ifdef QT_QWS_VNC_DEBUG
+ qDebug("QVNCServer::setEncodings: fallback using raw");
+#endif
+ }
+
+ if (cursor)
+ cursor->setCursorMode(supportCursor);
+}
+
+void QVNCServer::frameBufferUpdateRequest()
+{
+ QRfbFrameBufferUpdateRequest ev;
+
+ if (ev.read(client)) {
+ if (!ev.incremental) {
+ QRect r(ev.rect.x, ev.rect.y, ev.rect.w, ev.rect.h);
+////### r.translate(qvnc_screen->offset());
+ qvnc_screen->d_ptr->setDirty(r, true);
+ }
+ wantUpdate = true;
+ checkUpdate();
+ handleMsg = false;
+ }
+}
+
+static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::MouseButton *button, bool *isPress)
+{
+ if (before == after)
+ return false;
+ for (int b = Qt::LeftButton; b <= Qt::MidButton; b<<=1) {
+ if ((before & b) != (after & b)) {
+ *button = static_cast<Qt::MouseButton>(b);
+ *isPress = (after & b);
+ return true;
+ }
+ }
+ return false;
+}
+
+void QVNCServer::pointerEvent()
+{
+ QPoint screenOffset = this->screen()->geometry().topLeft();
+
+ QRfbPointerEvent ev;
+ if (ev.read(client)) {
+ QPoint eventPoint(ev.x, ev.y);
+ eventPoint += screenOffset; // local to global translation
+
+ if (ev.wheelDirection == ev.WheelNone) {
+ QEvent::Type type = QEvent::MouseMove;
+ Qt::MouseButton button = Qt::NoButton;
+ bool isPress;
+ if (buttonChange(buttons, ev.buttons, &button, &isPress))
+ type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease;
+ QWindowSystemInterface::handleMouseEvent(0, eventPoint, eventPoint, ev.buttons);
+ } else {
+ // No buttons or motion reported at the same time as wheel events
+ Qt::Orientation orientation;
+ if (ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelRight)
+ orientation = Qt::Horizontal;
+ else
+ orientation = Qt::Vertical;
+ int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1);
+ QWindowSystemInterface::handleWheelEvent(0, eventPoint, eventPoint, delta, orientation);
+ }
+ handleMsg = false;
+ }
+}
+
+void QVNCServer::keyEvent()
+{
+ QRfbKeyEvent ev;
+
+ if (ev.read(client)) {
+ if (ev.keycode == Qt::Key_Shift)
+ keymod = ev.down ? keymod | Qt::ShiftModifier :
+ keymod & ~Qt::ShiftModifier;
+ else if (ev.keycode == Qt::Key_Control)
+ keymod = ev.down ? keymod | Qt::ControlModifier :
+ keymod & ~Qt::ControlModifier;
+ else if (ev.keycode == Qt::Key_Alt)
+ keymod = ev.down ? keymod | Qt::AltModifier :
+ keymod & ~Qt::AltModifier;
+ if (ev.unicode || ev.keycode) {
+// qDebug() << "keyEvent" << hex << ev.unicode << ev.keycode << keymod << ev.down;
+ QEvent::Type type = ev.down ? QEvent::KeyPress : QEvent::KeyRelease;
+ QString str;
+ if (ev.unicode && ev.unicode != 0xffff)
+ str = QString(ev.unicode);
+ QWindowSystemInterface::handleKeyEvent(0, type, ev.keycode, keymod, str);
+ }
+ handleMsg = false;
+ }
+}
+
+void QVNCServer::clientCutText()
+{
+ QRfbClientCutText ev;
+
+ if (cutTextPending == 0 && ev.read(client)) {
+ cutTextPending = ev.length;
+ if (!cutTextPending)
+ handleMsg = false;
+ }
+
+ if (cutTextPending && client->bytesAvailable() >= cutTextPending) {
+ char *text = new char [cutTextPending+1];
+ client->read(text, cutTextPending);
+ delete [] text;
+ cutTextPending = 0;
+ handleMsg = false;
+ }
+}
+
+// stride in bytes
+template <class SRC>
+bool QRfbSingleColorHextile<SRC>::read(const uchar *data,
+ int width, int height, int stride)
+{
+ const int depth = encoder->server->screen()->depth();
+ if (width % (depth / 8)) // hw: should rather fallback to simple loop
+ return false;
+
+ static int alwaysFalse = qgetenv("QT_VNC_NOCHECKFILL").toInt();
+ if (alwaysFalse)
+ return false;
+
+ switch (depth) {
+ case 4: {
+ const quint8 *data8 = reinterpret_cast<const quint8*>(data);
+ if ((data8[0] & 0xf) != (data8[0] >> 4))
+ return false;
+ width /= 2;
+ } // fallthrough
+ case 8: {
+ const quint8 *data8 = reinterpret_cast<const quint8*>(data);
+ if (data8[0] != data8[1])
+ return false;
+ width /= 2;
+ } // fallthrough
+ case 12:
+ case 15:
+ case 16: {
+ const quint16 *data16 = reinterpret_cast<const quint16*>(data);
+ if (data16[0] != data16[1])
+ return false;
+ width /= 2;
+ } // fallthrough
+ case 18:
+ case 24:
+ case 32: {
+ const quint32 *data32 = reinterpret_cast<const quint32*>(data);
+ const quint32 first = data32[0];
+ const int linestep = (stride / sizeof(quint32)) - width;
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ if (*(data32++) != first)
+ return false;
+ }
+ data32 += linestep;
+ }
+ break;
+ }
+ default:
+ return false;
+ }
+
+ SRC color = reinterpret_cast<const SRC*>(data)[0];
+ encoder->newBg |= (color != encoder->bg);
+ encoder->bg = color;
+ return true;
+}
+
+template <class SRC>
+void QRfbSingleColorHextile<SRC>::write(QTcpSocket *socket) const
+{
+ if (true || encoder->newBg) {
+ const int bpp = encoder->server->clientBytesPerPixel();
+ const int padding = 3;
+ QVarLengthArray<char> buffer(padding + 1 + bpp);
+ buffer[padding] = 2; // BackgroundSpecified
+ encoder->server->convertPixels(buffer.data() + padding + 1,
+ reinterpret_cast<char*>(&encoder->bg),
+ 1);
+ socket->write(buffer.data() + padding, bpp + 1);
+// encoder->newBg = false;
+ } else {
+ char subenc = 0;
+ socket->write(&subenc, 1);
+ }
+}
+
+template <class SRC>
+bool QRfbDualColorHextile<SRC>::read(const uchar *data,
+ int width, int height, int stride)
+{
+ const SRC *ptr = reinterpret_cast<const SRC*>(data);
+ const int linestep = (stride / sizeof(SRC)) - width;
+
+ SRC c1;
+ SRC c2 = 0;
+ int n1 = 0;
+ int n2 = 0;
+ int x = 0;
+ int y = 0;
+
+ c1 = *ptr;
+
+ // find second color
+ while (y < height) {
+ while (x < width) {
+ if (*ptr == c1) {
+ ++n1;
+ } else {
+ c2 = *ptr;
+ goto found_second_color;
+ }
+ ++ptr;
+ ++x;
+ }
+ x = 0;
+ ptr += linestep;
+ ++y;
+ }
+
+found_second_color:
+ // finish counting
+ while (y < height) {
+ while (x < width) {
+ if (*ptr == c1) {
+ ++n1;
+ } else if (*ptr == c2) {
+ ++n2;
+ } else {
+ return false;
+ }
+ ++ptr;
+ ++x;
+ }
+ x = 0;
+ ptr += linestep;
+ ++y;
+ }
+
+ if (n2 > n1) {
+ const quint32 tmpC = c1;
+ c1 = c2;
+ c2 = tmpC;
+ }
+
+ encoder->newBg |= (c1 != encoder->bg);
+ encoder->newFg |= (c2 != encoder->fg);
+
+ encoder->bg = c1;
+ encoder->fg = c2;
+
+ // create map
+ bool inRect = false;
+ numRects = 0;
+ ptr = reinterpret_cast<const SRC*>(data);
+ for (y = 0; y < height; ++y) {
+ for (x = 0; x < width; ++x) {
+ if (inRect && *ptr == encoder->bg) {
+ // rect finished
+ setWidth(x - lastx());
+ next();
+ inRect = false;
+ } else if (!inRect && *ptr == encoder->fg) {
+ // rect start
+ setX(x);
+ setY(y);
+ setHeight(1);
+ inRect = true;
+ }
+ ++ptr;
+ }
+ if (inRect) {
+ // finish rect
+ setWidth(width - lastx());
+ next();
+ inRect = false;
+ }
+ ptr += linestep;
+ }
+
+ return true;
+}
+
+template <class SRC>
+void QRfbDualColorHextile<SRC>::write(QTcpSocket *socket) const
+{
+ const int bpp = encoder->server->clientBytesPerPixel();
+ const int padding = 3;
+ QVarLengthArray<char> buffer(padding + 2 * bpp + sizeof(char) + sizeof(numRects));
+ char &subenc = buffer[padding];
+ int n = padding + sizeof(subenc);
+
+ subenc = 0x8; // AnySubrects
+
+ if (encoder->newBg) {
+ subenc |= 0x2; // Background
+ encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->bg, 1);
+ n += bpp;
+// encoder->newBg = false;
+ }
+
+ if (encoder->newFg) {
+ subenc |= 0x4; // Foreground
+ encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->fg, 1);
+ n += bpp;
+// encoder->newFg = false;
+ }
+ buffer[n] = numRects;
+ n += sizeof(numRects);
+
+ socket->write(buffer.data() + padding, n - padding);
+ socket->write((char*)rects, numRects * sizeof(Rect));
+}
+
+template <class SRC>
+void QRfbDualColorHextile<SRC>::next()
+{
+ for (int r = numRects - 1; r >= 0; --r) {
+ if (recty(r) == lasty())
+ continue;
+ if (recty(r) < lasty() - 1) // only search previous scanline
+ break;
+ if (rectx(r) == lastx() && width(r) == width(numRects)) {
+ ++rects[r].wh;
+ return;
+ }
+ }
+ ++numRects;
+}
+
+template <class SRC>
+inline void QRfbMultiColorHextile<SRC>::setColor(SRC color)
+{
+ encoder->server->convertPixels(reinterpret_cast<char*>(rect(numRects)),
+ (const char*)&color, 1);
+}
+
+template <class SRC>
+inline bool QRfbMultiColorHextile<SRC>::beginRect()
+{
+ if ((rects.size() + bpp + 2) > maxRectsSize)
+ return false;
+ rects.resize(rects.size() + bpp + 2);
+ return true;
+}
+
+template <class SRC>
+inline void QRfbMultiColorHextile<SRC>::endRect()
+{
+ setHeight(numRects, 1);
+ ++numRects;
+}
+
+template <class SRC>
+bool QRfbMultiColorHextile<SRC>::read(const uchar *data,
+ int width, int height, int stride)
+{
+ const SRC *ptr = reinterpret_cast<const SRC*>(data);
+ const int linestep = (stride / sizeof(SRC)) - width;
+
+ bpp = encoder->server->clientBytesPerPixel();
+
+ if (encoder->newBg)
+ encoder->bg = ptr[0];
+
+ const SRC bg = encoder->bg;
+ SRC color = bg;
+ bool inRect = false;
+
+ numRects = 0;
+ rects.clear();
+
+ for (int y = 0; y < height; ++y) {
+ for (int x = 0; x < width; ++x) {
+ if (inRect && *ptr != color) { // end rect
+ setWidth(numRects, x - rectx(numRects));
+ endRect();
+ inRect = false;
+ }
+
+ if (!inRect && *ptr != bg) { // begin rect
+ if (!beginRect())
+ return false;
+ inRect = true;
+ color = *ptr;
+ setColor(color);
+ setX(numRects, x);
+ setY(numRects, y);
+ }
+ ++ptr;
+ }
+ if (inRect) { // end rect
+ setWidth(numRects, width - rectx(numRects));
+ endRect();
+ inRect = false;
+ }
+ ptr += linestep;
+ }
+
+ return true;
+}
+
+template <class SRC>
+void QRfbMultiColorHextile<SRC>::write(QTcpSocket *socket) const
+{
+ const int padding = 3;
+ QVarLengthArray<quint8> buffer(bpp + padding + sizeof(quint8) + sizeof(numRects));
+
+ quint8 &subenc = buffer[padding];
+ int n = padding + sizeof(quint8);
+
+ subenc = 8 | 16; // AnySubrects | SubrectsColoured
+
+ if (encoder->newBg) {
+ subenc |= 0x2; // Background
+ encoder->server->convertPixels(reinterpret_cast<char*>(buffer.data() + n),
+ reinterpret_cast<const char*>(&encoder->bg),
+ 1);
+ n += bpp;
+// encoder->newBg = false;
+ }
+
+ buffer[n] = numRects;
+ n += sizeof(numRects);
+
+ socket->write(reinterpret_cast<const char*>(buffer.data() + padding),
+ n - padding);
+ socket->write(reinterpret_cast<const char*>(rects.constData()),
+ rects.size());
+}
+
+bool QVNCServer::pixelConversionNeeded() const
+{
+ if (!sameEndian)
+ return true;
+
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ if (qvnc_screen->swapBytes())
+ return true;
+#endif
+
+ const int screendepth = qvnc_screen->depth();
+ if (screendepth != pixelFormat.bitsPerPixel)
+ return true;
+
+ switch (screendepth) {
+ case 32:
+ case 24:
+ return false;
+ case 18:
+ return (pixelFormat.redBits == 6
+ && pixelFormat.greenBits == 6
+ && pixelFormat.blueBits == 6);
+ case 16:
+ return (pixelFormat.redBits == 5
+ && pixelFormat.greenBits == 6
+ && pixelFormat.blueBits == 5);
+ case 15:
+ return (pixelFormat.redBits == 5
+ && pixelFormat.greenBits == 5
+ && pixelFormat.blueBits == 5);
+ case 12:
+ return (pixelFormat.redBits == 4
+ && pixelFormat.greenBits == 4
+ && pixelFormat.blueBits == 4);
+ }
+ return true;
+}
+
+// count: number of pixels
+void QVNCServer::convertPixels(char *dst, const char *src, int count) const
+{
+ const int screendepth = qvnc_screen->depth();
+ const bool isBgr = false; //### qvnc_screen->pixelType() == QScreen::BGRPixel;
+
+ // cutoffs
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ if (!swapBytes)
+#endif
+ if (sameEndian) {
+ if (screendepth == pixelFormat.bitsPerPixel) { // memcpy cutoffs
+
+ switch (screendepth) {
+ case 32:
+ memcpy(dst, src, count * sizeof(quint32));
+ return;
+ case 16:
+ if (pixelFormat.redBits == 5
+ && pixelFormat.greenBits == 6
+ && pixelFormat.blueBits == 5)
+ {
+ memcpy(dst, src, count * sizeof(quint16));
+ return;
+ }
+ }
+ } else if (screendepth == 16 && pixelFormat.bitsPerPixel == 32) {
+#if defined(__i386__) // Currently fails on ARM if dst is not 4 byte aligned
+ const quint32 *src32 = reinterpret_cast<const quint32*>(src);
+ quint32 *dst32 = reinterpret_cast<quint32*>(dst);
+ int count32 = count * sizeof(quint16) / sizeof(quint32);
+ while (count32--) {
+ const quint32 s = *src32++;
+ quint32 result1;
+ quint32 result2;
+
+ // red
+ result1 = ((s & 0xf8000000) | ((s & 0xe0000000) >> 5)) >> 8;
+ result2 = ((s & 0x0000f800) | ((s & 0x0000e000) >> 5)) << 8;
+
+ // green
+ result1 |= ((s & 0x07e00000) | ((s & 0x06000000) >> 6)) >> 11;
+ result2 |= ((s & 0x000007e0) | ((s & 0x00000600) >> 6)) << 5;
+
+ // blue
+ result1 |= ((s & 0x001f0000) | ((s & 0x001c0000) >> 5)) >> 13;
+ result2 |= ((s & 0x0000001f) | ((s & 0x0000001c) >> 5)) << 3;
+
+ *dst32++ = result2;
+ *dst32++ = result1;
+ }
+ if (count & 0x1) {
+ const quint16 *src16 = reinterpret_cast<const quint16*>(src);
+ *dst32 = qt_conv16ToRgb(src16[count - 1]);
+ }
+ return;
+#endif
+ }
+ }
+
+ const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8;
+
+// nibble = 0;
+
+ for (int i = 0; i < count; ++i) {
+ int r, g, b;
+
+ switch (screendepth) {
+#if 0
+ case 4: {
+ if (!nibble) {
+ r = ((*src) & 0x0f) << 4;
+ } else {
+ r = (*src) & 0xf0;
+ src++;
+ }
+ nibble = !nibble;
+ g = b = r;
+ break;
+ }
+#endif
+#if 0
+ case 8: {
+ QRgb rgb = qvnc_screen->clut()[int(*src)];
+ r = qRed(rgb);
+ g = qGreen(rgb);
+ b = qBlue(rgb);
+ src++;
+ break;
+ }
+#endif
+#ifdef QT_QWS_DEPTH_12
+ case 12: {
+ quint32 p = quint32(*reinterpret_cast<const qrgb444*>(src));
+ r = qRed(p);
+ g = qGreen(p);
+ b = qBlue(p);
+ src += sizeof(qrgb444);
+ break;
+ }
+#endif
+#ifdef QT_QWS_DEPTH_15
+ case 15: {
+ quint32 p = quint32(*reinterpret_cast<const qrgb555*>(src));
+ r = qRed(p);
+ g = qGreen(p);
+ b = qBlue(p);
+ src += sizeof(qrgb555);
+ break;
+ }
+#endif
+ case 16: {
+ quint16 p = *reinterpret_cast<const quint16*>(src);
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ if (swapBytes)
+ p = ((p & 0xff) << 8) | ((p & 0xff00) >> 8);
+#endif
+ r = (p >> 11) & 0x1f;
+ g = (p >> 5) & 0x3f;
+ b = p & 0x1f;
+ r <<= 3;
+ g <<= 2;
+ b <<= 3;
+ src += sizeof(quint16);
+ break;
+ }
+#ifdef QT_QWS_DEPTH_18
+ case 18: {
+ quint32 p = quint32(*reinterpret_cast<const qrgb666*>(src));
+ r = qRed(p);
+ g = qGreen(p);
+ b = qBlue(p);
+ src += sizeof(qrgb666);
+ break;
+ }
+#endif
+#ifdef QT_QWS_DEPTH_24
+ case 24: {
+ quint32 p = quint32(*reinterpret_cast<const qrgb888*>(src));
+ r = qRed(p);
+ g = qGreen(p);
+ b = qBlue(p);
+ src += sizeof(qrgb888);
+ break;
+ }
+#endif
+ case 32: {
+ quint32 p = *reinterpret_cast<const quint32*>(src);
+ r = (p >> 16) & 0xff;
+ g = (p >> 8) & 0xff;
+ b = p & 0xff;
+ src += sizeof(quint32);
+ break;
+ }
+ default: {
+ r = g = b = 0;
+ qDebug("QVNCServer: don't support %dbpp display", screendepth);
+ return;
+ }
+ }
+
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ if (swapBytes ^ isBgr)
+#else
+ if (isBgr)
+#endif
+ qSwap(r, b);
+
+ r >>= (8 - pixelFormat.redBits);
+ g >>= (8 - pixelFormat.greenBits);
+ b >>= (8 - pixelFormat.blueBits);
+
+ int pixel = (r << pixelFormat.redShift) |
+ (g << pixelFormat.greenShift) |
+ (b << pixelFormat.blueShift);
+
+ if (sameEndian || pixelFormat.bitsPerPixel == 8) {
+ memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead?
+ dst += bytesPerPixel;
+ continue;
+ }
+
+
+ if (QSysInfo::ByteOrder == QSysInfo::BigEndian) {
+ switch (pixelFormat.bitsPerPixel) {
+ case 16:
+ pixel = (((pixel & 0x0000ff00) << 8) |
+ ((pixel & 0x000000ff) << 24));
+ break;
+ case 32:
+ pixel = (((pixel & 0xff000000) >> 24) |
+ ((pixel & 0x00ff0000) >> 8) |
+ ((pixel & 0x0000ff00) << 8) |
+ ((pixel & 0x000000ff) << 24));
+ break;
+ default:
+ qDebug("Cannot handle %d bpp client", pixelFormat.bitsPerPixel);
+ }
+ } else { // QSysInfo::ByteOrder == QSysInfo::LittleEndian
+ switch (pixelFormat.bitsPerPixel) {
+ case 16:
+ pixel = (((pixel & 0xff000000) >> 8) |
+ ((pixel & 0x00ff0000) << 8));
+ break;
+ case 32:
+ pixel = (((pixel & 0xff000000) >> 24) |
+ ((pixel & 0x00ff0000) >> 8) |
+ ((pixel & 0x0000ff00) << 8) |
+ ((pixel & 0x000000ff) << 24));
+ break;
+ default:
+ qDebug("Cannot handle %d bpp client",
+ pixelFormat.bitsPerPixel);
+ break;
+ }
+ }
+ memcpy(dst, &pixel, bytesPerPixel); // XXX: simple for-loop instead?
+ dst += bytesPerPixel;
+ }
+}
+
+#ifndef QT_NO_QWS_CURSOR
+static void blendCursor(QImage &image, const QRect &imageRect)
+{
+ const QRect cursorRect = qt_screencursor->boundingRect();
+ const QRect intersection = (cursorRect & imageRect);
+ const QRect destRect = intersection.translated(-imageRect.topLeft());
+ const QRect srcRect = intersection.translated(-cursorRect.topLeft());
+
+ QPainter painter(&image);
+ painter.drawImage(destRect, qt_screencursor->image(), srcRect);
+ painter.end();
+}
+#endif // QT_NO_QWS_CURSOR
+
+QVNCDirtyMap::QVNCDirtyMap(QVNCScreen *s)
+ : bytesPerPixel(0), numDirty(0), screen(s)
+{
+ bytesPerPixel = (screen->depth() + 7) / 8;
+ QSize screenSize = screen->geometry().size();
+ bufferWidth = screenSize.width();
+ bufferHeight = screenSize.height();
+ bufferStride = bufferWidth * bytesPerPixel;
+ buffer = new uchar[bufferHeight * bufferStride];
+
+ mapWidth = (bufferWidth + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE;
+ mapHeight = (bufferHeight + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE;
+ numTiles = mapWidth * mapHeight;
+ map = new uchar[numTiles];
+}
+
+QVNCDirtyMap::~QVNCDirtyMap()
+{
+ delete[] map;
+ delete[] buffer;
+}
+
+void QVNCDirtyMap::reset()
+{
+ memset(map, 1, numTiles);
+ memset(buffer, 0, bufferHeight * bufferStride);
+ numDirty = numTiles;
+}
+
+inline bool QVNCDirtyMap::dirty(int x, int y) const
+{
+ return map[y * mapWidth + x];
+}
+
+inline void QVNCDirtyMap::setClean(int x, int y)
+{
+ map[y * mapWidth + x] = 0;
+ --numDirty;
+}
+
+template <class T>
+void QVNCDirtyMapOptimized<T>::setDirty(int tileX, int tileY, bool force)
+{
+ static bool alwaysForce = qgetenv("QT_VNC_NO_COMPAREBUFFER").toInt();
+ if (alwaysForce)
+ force = true;
+
+ bool changed = false;
+
+ if (!force) {
+ const int lstep = screen->linestep();
+ const int startX = tileX * MAP_TILE_SIZE;
+ const int startY = tileY * MAP_TILE_SIZE;
+ const uchar *scrn = screen->base()
+ + startY * lstep + startX * bytesPerPixel;
+ uchar *old = buffer + startY * bufferStride + startX * sizeof(T);
+
+ const int tileHeight = (startY + MAP_TILE_SIZE > bufferHeight ?
+ bufferHeight - startY : MAP_TILE_SIZE);
+ const int tileWidth = (startX + MAP_TILE_SIZE > bufferWidth ?
+ bufferWidth - startX : MAP_TILE_SIZE);
+ const bool doInlines = (tileWidth == MAP_TILE_SIZE);
+
+ int y = tileHeight;
+
+ if (doInlines) { // hw: memcmp/memcpy is inlined when using constants
+ while (y) {
+ if (memcmp(old, scrn, sizeof(T) * MAP_TILE_SIZE)) {
+ changed = true;
+ break;
+ }
+ scrn += lstep;
+ old += bufferStride;
+ --y;
+ }
+
+ while (y) {
+ memcpy(old, scrn, sizeof(T) * MAP_TILE_SIZE);
+ scrn += lstep;
+ old += bufferStride;
+ --y;
+ }
+ } else {
+ while (y) {
+ if (memcmp(old, scrn, sizeof(T) * tileWidth)) {
+ changed = true;
+ break;
+ }
+ scrn += lstep;
+ old += bufferStride;
+ --y;
+ }
+
+ while (y) {
+ memcpy(old, scrn, sizeof(T) * tileWidth);
+ scrn += lstep;
+ old += bufferStride;
+ --y;
+ }
+ }
+ }
+
+ const int mapIndex = tileY * mapWidth + tileX;
+ if ((force || changed) && !map[mapIndex]) {
+ map[mapIndex] = 1;
+ ++numDirty;
+ }
+}
+
+template <class SRC>
+QRfbHextileEncoder<SRC>::QRfbHextileEncoder(QVNCServer *s)
+ : QRfbEncoder(s),
+ singleColorHextile(this), dualColorHextile(this), multiColorHextile(this)
+{
+}
+
+/*
+ \internal
+ Send dirty rects using hextile encoding.
+*/
+template <class SRC>
+void QRfbHextileEncoder<SRC>::write()
+{
+// QWSDisplay::grab(true);
+
+ QVNCDirtyMap *map = server->dirtyMap();
+ QTcpSocket *socket = server->clientSocket();
+
+ const quint32 encoding = htonl(5); // hextile encoding
+ const int bytesPerPixel = server->clientBytesPerPixel();
+
+ {
+ const char tmp[2] = { 0, 0 }; // msg type, padding
+ socket->write(tmp, sizeof(tmp));
+ }
+ {
+ const quint16 count = htons(map->numDirty);
+ socket->write((char *)&count, sizeof(count));
+ }
+
+ if (map->numDirty <= 0) {
+// QWSDisplay::ungrab();
+ return;
+ }
+
+ newBg = true;
+ newFg = true;
+
+ const QImage screenImage = server->screenImage();
+ QRfbRect rect(0, 0, MAP_TILE_SIZE, MAP_TILE_SIZE);
+
+ QSize screenSize = server->screen()->geometry().size();
+
+ for (int y = 0; y < map->mapHeight; ++y) {
+ if (rect.y + MAP_TILE_SIZE > screenSize.height())
+ rect.h = screenSize.height() - rect.y;
+ rect.w = MAP_TILE_SIZE;
+ for (int x = 0; x < map->mapWidth; ++x) {
+ if (!map->dirty(x, y))
+ continue;
+ map->setClean(x, y);
+
+ rect.x = x * MAP_TILE_SIZE;
+ if (rect.x + MAP_TILE_SIZE > screenSize.width()) //###deviceWidth ???
+ rect.w = screenSize.width() - rect.x;
+ rect.write(socket);
+
+ socket->write((char *)&encoding, sizeof(encoding));
+
+ const uchar *screendata = screenImage.scanLine(rect.y)
+ + rect.x * screenImage.depth() / 8;
+ int linestep = screenImage.bytesPerLine();
+
+#ifndef QT_NO_QWS_CURSOR
+ // hardware cursors must be blended with the screen memory
+ const bool doBlendCursor = qt_screencursor
+ && !server->hasClientCursor()
+ && qt_screencursor->isAccelerated();
+ QImage tileImage;
+ if (doBlendCursor) {
+ const QRect tileRect(rect.x, rect.y, rect.w, rect.h);
+ const QRect cursorRect = qt_screencursor->boundingRect()
+ .translated(-server->screen()->offset());
+ if (tileRect.intersects(cursorRect)) {
+ tileImage = screenImage.copy(tileRect);
+ blendCursor(tileImage,
+ tileRect.translated(server->screen()->offset()));
+ screendata = tileImage.bits();
+ linestep = tileImage.bytesPerLine();
+ }
+ }
+#endif // QT_NO_QWS_CURSOR
+
+ if (singleColorHextile.read(screendata, rect.w, rect.h, linestep)) {
+ singleColorHextile.write(socket);
+ } else if (dualColorHextile.read(screendata, rect.w, rect.h, linestep)) {
+ dualColorHextile.write(socket);
+ } else if (multiColorHextile.read(screendata, rect.w, rect.h, linestep)) {
+ multiColorHextile.write(socket);
+ } else if (server->doPixelConversion()) {
+ const int bufferSize = rect.w * rect.h * bytesPerPixel + 1;
+ const int padding = sizeof(quint32) - sizeof(char);
+ buffer.resize(bufferSize + padding);
+
+ buffer[padding] = 1; // Raw subencoding
+
+ // convert pixels
+ char *b = buffer.data() + padding + 1;
+ const int bstep = rect.w * bytesPerPixel;
+ for (int i = 0; i < rect.h; ++i) {
+ server->convertPixels(b, (const char*)screendata, rect.w);
+ screendata += linestep;
+ b += bstep;
+ }
+ socket->write(buffer.constData() + padding, bufferSize);
+ } else {
+ quint8 subenc = 1; // Raw subencoding
+ socket->write((char *)&subenc, 1);
+
+ // send pixels
+ for (int i = 0; i < rect.h; ++i) {
+ socket->write((const char*)screendata,
+ rect.w * bytesPerPixel);
+ screendata += linestep;
+ }
+ }
+ }
+ if (socket->state() == QAbstractSocket::UnconnectedState)
+ break;
+ rect.y += MAP_TILE_SIZE;
+ }
+ socket->flush();
+ Q_ASSERT(map->numDirty == 0);
+
+// QWSDisplay::ungrab();
+}
+
+void QRfbRawEncoder::write()
+{
+// QWSDisplay::grab(false);
+
+ QVNCDirtyMap *map = server->dirtyMap();
+ QTcpSocket *socket = server->clientSocket();
+
+ const int bytesPerPixel = server->clientBytesPerPixel();
+ QSize screenSize = server->screen()->geometry().size();
+
+ // create a region from the dirty rects and send the region's merged rects.
+ QRegion rgn;
+ if (map) {
+ for (int y = 0; y < map->mapHeight; ++y) {
+ for (int x = 0; x < map->mapWidth; ++x) {
+ if (!map->dirty(x, y))
+ continue;
+ rgn += QRect(x * MAP_TILE_SIZE, y * MAP_TILE_SIZE,
+ MAP_TILE_SIZE, MAP_TILE_SIZE);
+ map->setClean(x, y);
+ }
+ }
+
+ rgn &= QRect(0, 0, screenSize.width(),
+ screenSize.height());
+ }
+ const QVector<QRect> rects = rgn.rects();
+
+ {
+ const char tmp[2] = { 0, 0 }; // msg type, padding
+ socket->write(tmp, sizeof(tmp));
+ }
+
+ {
+ const quint16 count = htons(rects.size());
+ socket->write((char *)&count, sizeof(count));
+ }
+
+ if (rects.size() <= 0) {
+// QWSDisplay::ungrab();
+ return;
+ }
+
+ const QImage *screenImage = server->screenImage();
+
+ for (int i = 0; i < rects.size(); ++i) {
+ const QRect tileRect = rects.at(i);
+ const QRfbRect rect(tileRect.x(), tileRect.y(),
+ tileRect.width(), tileRect.height());
+ rect.write(socket);
+
+ const quint32 encoding = htonl(0); // raw encoding
+ socket->write((char *)&encoding, sizeof(encoding));
+
+ int linestep = screenImage->bytesPerLine();
+ const uchar *screendata = screenImage->scanLine(rect.y)
+ + rect.x * screenImage->depth() / 8;
+
+#ifndef QT_NO_QWS_CURSOR
+ // hardware cursors must be blended with the screen memory
+ const bool doBlendCursor = qt_screencursor
+ && !server->hasClientCursor()
+ && qt_screencursor->isAccelerated();
+ QImage tileImage;
+ if (doBlendCursor) {
+ const QRect cursorRect = qt_screencursor->boundingRect()
+ .translated(-server->screen()->offset());
+ if (tileRect.intersects(cursorRect)) {
+ tileImage = screenImage->copy(tileRect);
+ blendCursor(tileImage,
+ tileRect.translated(server->screen()->offset()));
+ screendata = tileImage.bits();
+ linestep = tileImage.bytesPerLine();
+ }
+ }
+#endif // QT_NO_QWS_CURSOR
+
+ if (server->doPixelConversion()) {
+ const int bufferSize = rect.w * rect.h * bytesPerPixel;
+ if (bufferSize > buffer.size())
+ buffer.resize(bufferSize);
+
+ // convert pixels
+ char *b = buffer.data();
+ const int bstep = rect.w * bytesPerPixel;
+ for (int i = 0; i < rect.h; ++i) {
+ server->convertPixels(b, (const char*)screendata, rect.w);
+ screendata += linestep;
+ b += bstep;
+ }
+ socket->write(buffer.constData(), bufferSize);
+ } else {
+ for (int i = 0; i < rect.h; ++i) {
+ socket->write((const char*)screendata, rect.w * bytesPerPixel);
+ screendata += linestep;
+ }
+ }
+ if (socket->state() == QAbstractSocket::UnconnectedState)
+ break;
+ }
+ socket->flush();
+
+// QWSDisplay::ungrab();
+}
+
+inline QImage *QVNCServer::screenImage() const
+{
+ return qvnc_screen->image();
+}
+
+void QVNCServer::checkUpdate()
+{
+ if (!wantUpdate)
+ return;
+
+ if (dirtyCursor) {
+#ifndef QT_NO_QWS_CURSOR
+ Q_ASSERT(qvnc_cursor);
+ qvnc_cursor->write();
+#endif
+ cursor->sendClientCursor();
+ dirtyCursor = false;
+ wantUpdate = false;
+ return;
+ }
+
+ if (dirtyMap()->numDirty > 0) {
+ if (encoder)
+ encoder->write();
+ wantUpdate = false;
+ }
+}
+
+void QVNCServer::discardClient()
+{
+ timer->stop();
+ state = Unconnected;
+ delete encoder;
+ encoder = 0;
+#ifndef QT_NO_QWS_CURSOR
+ delete qvnc_cursor;
+ qvnc_cursor = 0;
+#endif
+// if (!qvnc_screen->screen())
+// QWSServer::instance()->enablePainting(false);
+}
+
+
+
+QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent, int screenId)
+ : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25),
+ vncServer(0), q_ptr(parent)
+{
+#if 0//ndef QT_NO_QWS_SIGNALHANDLER
+ QWSSignalHandler::instance()->addObject(this);
+#endif
+
+ vncServer = new QVNCServer(q_ptr, screenId);
+ vncServer->setRefreshRate(refreshRate);
+
+
+ Q_ASSERT(q_ptr->depth() == 32);
+
+ dirty = new QVNCDirtyMapOptimized<quint32>(q_ptr);
+}
+
+QVNCScreenPrivate::~QVNCScreenPrivate()
+{
+}
+
+
+void QVNCScreenPrivate::setDirty(const QRect& rect, bool force)
+{
+ if (rect.isEmpty())
+ return;
+
+// if (q_ptr->screen())
+// q_ptr->screen()->setDirty(rect);
+
+ if (!vncServer || !vncServer->isConnected()) {
+// qDebug() << "QVNCScreenPrivate::setDirty() - Not connected";
+ return;
+ }
+ const QRect r = rect; // .translated(-q_ptr->offset());
+ const int x1 = r.x() / MAP_TILE_SIZE;
+ int y = r.y() / MAP_TILE_SIZE;
+ for (; (y <= r.bottom() / MAP_TILE_SIZE) && y < dirty->mapHeight; y++)
+ for (int x = x1; (x <= r.right() / MAP_TILE_SIZE) && x < dirty->mapWidth; x++)
+ dirty->setDirty(x, y, force);
+
+ vncServer->setDirty();
+}
+
+
+
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h
new file mode 100644
index 0000000..7244bdf
--- /dev/null
+++ b/src/plugins/platforms/vnc/qvncserver.h
@@ -0,0 +1,533 @@
+/****************************************************************************
+**
+** 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 plugins 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 QSCREENVNC_P_H
+#define QSCREENVNC_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from version to version
+// without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qvncintegration.h"
+#include "qvnccursor.h"
+#define QT_NO_QWS_CURSOR
+
+#ifndef QT_NO_QWS_VNC
+
+#include <QtCore/qvarlengtharray.h>
+#include <QtCore/qsharedmemory.h>
+#include <QtNetwork/qtcpsocket.h>
+#include <QtNetwork/qtcpserver.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVNCServer;
+
+#ifndef QT_NO_QWS_CURSOR
+class QVNCCursor : public QProxyScreenCursor
+{
+public:
+ QVNCCursor(QVNCScreen *s);
+ ~QVNCCursor();
+
+ void hide();
+ void show();
+ void set(const QImage &image, int hotx, int hoty);
+ void move(int x, int y);
+
+private:
+ void setDirty(const QRect &r) const;
+ QVNCScreen *screen;
+};
+
+class QVNCClientCursor : public QProxyScreenCursor
+{
+public:
+ QVNCClientCursor(QVNCServer *s);
+ ~QVNCClientCursor();
+
+ void set(const QImage &image, int hotx, int hoty);
+ void write() const;
+
+private:
+ QVNCServer *server;
+};
+#endif // QT_NO_QWS_CURSOR
+
+#define MAP_TILE_SIZE 16
+#define MAP_WIDTH 1280 / MAP_TILE_SIZE
+#define MAP_HEIGHT 1024 / MAP_TILE_SIZE
+
+class QVNCDirtyMap
+{
+public:
+ QVNCDirtyMap(QVNCScreen *screen);
+ virtual ~QVNCDirtyMap();
+
+ void reset();
+ bool dirty(int x, int y) const;
+ virtual void setDirty(int x, int y, bool force = false) = 0;
+ void setClean(int x, int y);
+
+ int bytesPerPixel;
+
+ int numDirty;
+ int mapWidth;
+ int mapHeight;
+
+protected:
+ uchar *map;
+ QVNCScreen *screen;
+ uchar *buffer;
+ int bufferWidth;
+ int bufferHeight;
+ int bufferStride;
+ int numTiles;
+};
+
+template <class T>
+class QVNCDirtyMapOptimized : public QVNCDirtyMap
+{
+public:
+ QVNCDirtyMapOptimized(QVNCScreen *screen) : QVNCDirtyMap(screen) {}
+ ~QVNCDirtyMapOptimized() {}
+
+ void setDirty(int x, int y, bool force = false);
+};
+
+class QRfbRect
+{
+public:
+ QRfbRect() {}
+ QRfbRect(quint16 _x, quint16 _y, quint16 _w, quint16 _h) {
+ x = _x; y = _y; w = _w; h = _h;
+ }
+
+ void read(QTcpSocket *s);
+ void write(QTcpSocket *s) const;
+
+ quint16 x;
+ quint16 y;
+ quint16 w;
+ quint16 h;
+};
+
+class QRfbPixelFormat
+{
+public:
+ static int size() { return 16; }
+
+ void read(QTcpSocket *s);
+ void write(QTcpSocket *s);
+
+ int bitsPerPixel;
+ int depth;
+ bool bigEndian;
+ bool trueColor;
+ int redBits;
+ int greenBits;
+ int blueBits;
+ int redShift;
+ int greenShift;
+ int blueShift;
+};
+
+class QRfbServerInit
+{
+public:
+ QRfbServerInit() { name = 0; }
+ ~QRfbServerInit() { delete[] name; }
+
+ int size() const { return QRfbPixelFormat::size() + 8 + strlen(name); }
+ void setName(const char *n);
+
+ void read(QTcpSocket *s);
+ void write(QTcpSocket *s);
+
+ quint16 width;
+ quint16 height;
+ QRfbPixelFormat format;
+ char *name;
+};
+
+class QRfbSetEncodings
+{
+public:
+ bool read(QTcpSocket *s);
+
+ quint16 count;
+};
+
+class QRfbFrameBufferUpdateRequest
+{
+public:
+ bool read(QTcpSocket *s);
+
+ char incremental;
+ QRfbRect rect;
+};
+
+class QRfbKeyEvent
+{
+public:
+ bool read(QTcpSocket *s);
+
+ char down;
+ int keycode;
+ int unicode;
+};
+
+class QRfbPointerEvent
+{
+public:
+ bool read(QTcpSocket *s);
+
+ Qt::MouseButtons buttons;
+ enum { WheelNone,
+ WheelUp,
+ WheelDown,
+ WheelLeft,
+ WheelRight
+ } wheelDirection;
+ quint16 x;
+ quint16 y;
+};
+
+class QRfbClientCutText
+{
+public:
+ bool read(QTcpSocket *s);
+
+ quint32 length;
+};
+
+class QVNCScreenPrivate : public QObject
+{
+public:
+ QVNCScreenPrivate(QVNCScreen *parent, int screenId);
+ ~QVNCScreenPrivate();
+
+ void setDirty(const QRect &rect, bool force = false);
+ void configure();
+
+ qreal dpiX;
+ qreal dpiY;
+ bool doOnScreenSurface;
+ QVNCDirtyMap *dirty;
+ int refreshRate;
+ QVNCServer *vncServer;
+
+#if !defined(QT_NO_QWS_MULTIPROCESS) && !defined(QT_NO_SHAREDMEMORY)
+ QSharedMemory shm;
+#endif
+
+ QVNCScreen *q_ptr;
+};
+
+class QRfbEncoder
+{
+public:
+ QRfbEncoder(QVNCServer *s) : server(s) {}
+ virtual ~QRfbEncoder() {}
+
+ virtual void write() = 0;
+
+protected:
+ QVNCServer *server;
+};
+
+class QRfbRawEncoder : public QRfbEncoder
+{
+public:
+ QRfbRawEncoder(QVNCServer *s) : QRfbEncoder(s) {}
+
+ void write();
+
+private:
+ QByteArray buffer;
+};
+
+template <class SRC> class QRfbHextileEncoder;
+
+template <class SRC>
+class QRfbSingleColorHextile
+{
+public:
+ QRfbSingleColorHextile(QRfbHextileEncoder<SRC> *e) : encoder(e) {}
+ bool read(const uchar *data, int width, int height, int stride);
+ void write(QTcpSocket *socket) const;
+
+private:
+ QRfbHextileEncoder<SRC> *encoder;
+};
+
+template <class SRC>
+class QRfbDualColorHextile
+{
+public:
+ QRfbDualColorHextile(QRfbHextileEncoder<SRC> *e) : encoder(e) {}
+ bool read(const uchar *data, int width, int height, int stride);
+ void write(QTcpSocket *socket) const;
+
+private:
+ struct Rect {
+ quint8 xy;
+ quint8 wh;
+ } Q_PACKED rects[8 * 16];
+
+ quint8 numRects;
+ QRfbHextileEncoder<SRC> *encoder;
+
+private:
+ inline int lastx() const { return rectx(numRects); }
+ inline int lasty() const { return recty(numRects); }
+ inline int rectx(int r) const { return rects[r].xy >> 4; }
+ inline int recty(int r) const { return rects[r].xy & 0x0f; }
+ inline int width(int r) const { return (rects[r].wh >> 4) + 1; }
+ inline int height(int r) const { return (rects[r].wh & 0x0f) + 1; }
+
+ inline void setX(int r, int x) {
+ rects[r].xy = (x << 4) | (rects[r].xy & 0x0f);
+ }
+ inline void setY(int r, int y) {
+ rects[r].xy = (rects[r].xy & 0xf0) | y;
+ }
+ inline void setWidth(int r, int width) {
+ rects[r].wh = ((width - 1) << 4) | (rects[r].wh & 0x0f);
+ }
+ inline void setHeight(int r, int height) {
+ rects[r].wh = (rects[r].wh & 0xf0) | (height - 1);
+ }
+
+ inline void setWidth(int width) { setWidth(numRects, width); }
+ inline void setHeight(int height) { setHeight(numRects, height); }
+ inline void setX(int x) { setX(numRects, x); }
+ inline void setY(int y) { setY(numRects, y); }
+ void next();
+};
+
+template <class SRC>
+class QRfbMultiColorHextile
+{
+public:
+ QRfbMultiColorHextile(QRfbHextileEncoder<SRC> *e) : encoder(e) {}
+ bool read(const uchar *data, int width, int height, int stride);
+ void write(QTcpSocket *socket) const;
+
+private:
+ inline quint8* rect(int r) {
+ return rects.data() + r * (bpp + 2);
+ }
+ inline const quint8* rect(int r) const {
+ return rects.constData() + r * (bpp + 2);
+ }
+ inline void setX(int r, int x) {
+ quint8 *ptr = rect(r) + bpp;
+ *ptr = (x << 4) | (*ptr & 0x0f);
+ }
+ inline void setY(int r, int y) {
+ quint8 *ptr = rect(r) + bpp;
+ *ptr = (*ptr & 0xf0) | y;
+ }
+ void setColor(SRC color);
+ inline int rectx(int r) const {
+ const quint8 *ptr = rect(r) + bpp;
+ return *ptr >> 4;
+ }
+ inline int recty(int r) const {
+ const quint8 *ptr = rect(r) + bpp;
+ return *ptr & 0x0f;
+ }
+ inline void setWidth(int r, int width) {
+ quint8 *ptr = rect(r) + bpp + 1;
+ *ptr = ((width - 1) << 4) | (*ptr & 0x0f);
+ }
+ inline void setHeight(int r, int height) {
+ quint8 *ptr = rect(r) + bpp + 1;
+ *ptr = (*ptr & 0xf0) | (height - 1);
+ }
+
+ bool beginRect();
+ void endRect();
+
+ static const int maxRectsSize = 16 * 16;
+ QVarLengthArray<quint8, maxRectsSize> rects;
+
+ quint8 bpp;
+ quint8 numRects;
+ QRfbHextileEncoder<SRC> *encoder;
+};
+
+template <class SRC>
+class QRfbHextileEncoder : public QRfbEncoder
+{
+public:
+ QRfbHextileEncoder(QVNCServer *s);
+ void write();
+
+private:
+ enum SubEncoding {
+ Raw = 1,
+ BackgroundSpecified = 2,
+ ForegroundSpecified = 4,
+ AnySubrects = 8,
+ SubrectsColoured = 16
+ };
+
+ QByteArray buffer;
+ QRfbSingleColorHextile<SRC> singleColorHextile;
+ QRfbDualColorHextile<SRC> dualColorHextile;
+ QRfbMultiColorHextile<SRC> multiColorHextile;
+
+ SRC bg;
+ SRC fg;
+ bool newBg;
+ bool newFg;
+
+ friend class QRfbSingleColorHextile<SRC>;
+ friend class QRfbDualColorHextile<SRC>;
+ friend class QRfbMultiColorHextile<SRC>;
+};
+
+class QVNCServer : public QObject
+{
+ Q_OBJECT
+public:
+ QVNCServer(QVNCScreen *screen);
+ QVNCServer(QVNCScreen *screen, int id);
+ ~QVNCServer();
+
+ void setDirty();
+ void setDirtyCursor() { dirtyCursor = true; setDirty(); }
+ inline bool isConnected() const { return state == Connected; }
+ inline void setRefreshRate(int rate) { refreshRate = rate; }
+
+ enum ClientMsg { SetPixelFormat = 0,
+ FixColourMapEntries = 1,
+ SetEncodings = 2,
+ FramebufferUpdateRequest = 3,
+ KeyEvent = 4,
+ PointerEvent = 5,
+ ClientCutText = 6 };
+
+ enum ServerMsg { FramebufferUpdate = 0,
+ SetColourMapEntries = 1 };
+
+ void convertPixels(char *dst, const char *src, int count) const;
+
+ inline int clientBytesPerPixel() const {
+ return pixelFormat.bitsPerPixel / 8;
+ }
+
+ inline QVNCScreen* screen() const { return qvnc_screen; }
+ inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); }
+ inline QTcpSocket* clientSocket() const { return client; }
+ QImage *screenImage() const;
+ inline bool doPixelConversion() const { return needConversion; }
+#ifndef QT_NO_QWS_CURSOR
+ inline bool hasClientCursor() const { return qvnc_cursor != 0; }
+#endif
+
+ void setCursor(QVNCCursor * c) { cursor = c; }
+private:
+ void setPixelFormat();
+ void setEncodings();
+ void frameBufferUpdateRequest();
+ void pointerEvent();
+ void keyEvent();
+ void clientCutText();
+ bool pixelConversionNeeded() const;
+
+private slots:
+ void newConnection();
+ void readClient();
+ void checkUpdate();
+ void discardClient();
+
+private:
+ void init(uint port);
+ enum ClientState { Unconnected, Protocol, Init, Connected };
+ QTimer *timer;
+ QTcpServer *serverSocket;
+ QTcpSocket *client;
+ ClientState state;
+ quint8 msgType;
+ bool handleMsg;
+ QRfbPixelFormat pixelFormat;
+ Qt::KeyboardModifiers keymod;
+ Qt::MouseButtons buttons;
+ int encodingsPending;
+ int cutTextPending;
+ uint supportCopyRect : 1;
+ uint supportRRE : 1;
+ uint supportCoRRE : 1;
+ uint supportHextile : 1;
+ uint supportZRLE : 1;
+ uint supportCursor : 1;
+ uint supportDesktopSize : 1;
+ bool wantUpdate;
+ bool sameEndian;
+ bool needConversion;
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ bool swapBytes;
+#endif
+ bool dirtyCursor;
+ int refreshRate;
+ QVNCScreen *qvnc_screen;
+#ifndef QT_NO_QWS_CURSOR
+ QVNCClientCursor *qvnc_cursor;
+#endif
+
+ QRfbEncoder *encoder;
+ QVNCCursor *cursor;
+};
+
+
+QT_END_NAMESPACE
+#endif // QT_NO_QWS_VNC
+#endif // QSCREENVNC_P_H
diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro
new file mode 100644
index 0000000..07f8d88
--- /dev/null
+++ b/src/plugins/platforms/vnc/vnc.pro
@@ -0,0 +1,22 @@
+TARGET = qvncgraphicssystem
+include(../../qpluginbase.pri)
+
+QT += network
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms
+
+SOURCES = main.cpp qvncintegration.cpp
+HEADERS = qvncintegration.h
+
+HEADERS += qvncserver.h
+SOURCES += qvncserver.cpp
+
+HEADERS += qvnccursor.h
+SOURCES += qvnccursor.cpp
+
+include(../fb_base/fb_base.pri)
+include(../fontdatabases/genericunix/genericunix.pri)
+
+target.path += $$[QT_INSTALL_PLUGINS]/platforms
+
+INSTALLS += target
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 722979d..5b0b6f3 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -2,17 +2,17 @@ TEMPLATE = subdirs
SUBDIRS *= sqldrivers script bearer
unix:!symbian {
- contains(QT_CONFIG,iconv)|contains(QT_CONFIG,gnu-libiconv):SUBDIRS *= codecs
+ contains(QT_CONFIG,iconv)|contains(QT_CONFIG,gnu-libiconv)|contains(QT_CONFIG,sun-libiconv):SUBDIRS *= codecs
} else {
SUBDIRS *= codecs
}
!contains(QT_CONFIG, no-gui): SUBDIRS *= imageformats iconengines
-!embedded:SUBDIRS *= graphicssystems
+!embedded:!qpa:SUBDIRS *= graphicssystems
embedded:SUBDIRS *= gfxdrivers decorations mousedrivers kbddrivers
!win32:!embedded:!mac:!symbian:SUBDIRS *= inputmethods
!symbian:!contains(QT_CONFIG, no-gui):SUBDIRS += accessible
symbian:SUBDIRS += s60
contains(QT_CONFIG, phonon): SUBDIRS *= phonon
contains(QT_CONFIG, multimedia): SUBDIRS *= audio
-
+qpa:SUBDIRS += platforms
diff --git a/src/plugins/s60/feedback/feedback.pro b/src/plugins/s60/feedback/feedback.pro
new file mode 100644
index 0000000..1069220
--- /dev/null
+++ b/src/plugins/s60/feedback/feedback.pro
@@ -0,0 +1,18 @@
+include(../../qpluginbase.pri)
+
+TARGET = qtactilefeedback$${QT_LIBINFIX}
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/s60/feedback
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) {
+ HEADERS += qtactileFeedback.h
+ SOURCES += qtactileFeedback_s60.cpp
+
+ LIBS += -ltouchfeedback
+}
+
+load(data_caging_paths)
+
+TARGET.UID3=0x200315B4
diff --git a/src/plugins/s60/feedback/qtactileFeedback.h b/src/plugins/s60/feedback/qtactileFeedback.h
new file mode 100644
index 0000000..7c4cc29
--- /dev/null
+++ b/src/plugins/s60/feedback/qtactileFeedback.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QEvent>
+#include <QWidget>
+
+#include "private/qs60style_feedbackinterface_p.h"
+
+class QTactileFeedback : public TactileFeedbackInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(TactileFeedbackInterface)
+
+ public:
+ void touchFeedback(QEvent *event, const QWidget *widget);
+ };
diff --git a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp
new file mode 100644
index 0000000..c2f1d34
--- /dev/null
+++ b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QObject>
+#include <QSlider>
+#include <QScrollBar>
+
+#include <QtCore/qplugin.h>
+#include "qtactileFeedback.h"
+
+#include <touchfeedback.h>
+
+void QTactileFeedback::touchFeedback(QEvent *event, const QWidget *widget)
+{
+ //Lets share the global instance for touch feedback (you are NOT allowed to try and delete it!).
+ MTouchFeedback* feedback = MTouchFeedback::Instance();
+
+ //If the widget itself is not handling focus, try to use focusProxy widget.
+ const QWidget *w = ((widget->focusPolicy() == Qt::NoFocus) && (widget->focusProxy())) ? widget->focusProxy() : widget;
+
+ //Only give tactile feedback for enabled widgets that take focus.
+ if (feedback && w && w->isEnabled() && w->isWidgetType() && w->isVisible()) {
+ //Scrollbars are 'special' that they don't take focus (nor they have focusProxy), yet we'd like to have tactile feedback for them
+ if (w->focusPolicy() == Qt::NoFocus)
+ if (!qobject_cast<const QScrollBar *>(w))
+ return;
+
+ //Don't give tactile feedback for widgets that are outside topmost dialog.
+ QWidget *dialog = QApplication::activeModalWidget();
+ if (dialog) {
+ QList<const QWidget *> allChildren = dialog->findChildren<const QWidget *>();
+ if (!allChildren.contains(w))
+ return;
+ }
+
+ //Widget specific tactile feedback.
+ if (qobject_cast<const QSlider *>(w) || qobject_cast<const QScrollBar *>(w))
+ feedback->InstantFeedback(ETouchFeedbackSensitive);
+ else
+ feedback->InstantFeedback(ETouchFeedbackBasic);
+ }
+}
+
+Q_EXPORT_PLUGIN2("feedback", QTactileFeedback);
diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro
index c999fff..ffcd170 100644
--- a/src/plugins/s60/s60.pro
+++ b/src/plugins/s60/s60.pro
@@ -6,6 +6,10 @@ symbian {
SUBDIRS += 3_1 3_2
}
+ contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) {
+ SUBDIRS += feedback
+ }
+
# 5.0 is used also for Symbian3 and later
SUBDIRS += 5_0
} \ No newline at end of file
diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri
index 494c64c..ebeccc9 100644
--- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri
+++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri
@@ -1,6 +1,12 @@
# We just want to include the sqlite3 binaries for Symbian for platforms that do not have them.
!symbian-abld:!symbian-sbsv2 {
!symbian_no_export_sqlite:!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) {
+ contains(QMAKE_HOST.os,Windows) {
+ # Trick on Windows to do a touch on the file, since copy keeps the timestamp.
+ copyWithTouch = copy /y /b NUL+
+ } else {
+ copyWithTouch = "$$QMAKE_COPY "
+ }
symbian_sqlite3_zip_file = $$PWD/SQLite3_v9.2.zip
# The QMAKE_COPY section is to update timestamp on the file.
@@ -10,7 +16,7 @@
symbian_sqlite3_header.CONFIG = combine no_link
symbian_sqlite3_header.dependency_type = TYPE_C
symbian_sqlite3_header.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/include/stdapis/${QMAKE_FILE_OUT_BASE}.h \
- && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \
+ && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \
&& $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \
&& $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT}
silent:symbian_sqlite3_header.commands = @echo unzipping $@ && $$symbian_sqlite3_header.commands
@@ -22,7 +28,7 @@
!isEmpty(OBJECTS_DIR):symbian_sqlite3_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_dso.output
symbian_sqlite3_dso.CONFIG = combine no_link target_predeps
symbian_sqlite3_dso.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/release/armv5/lib/${QMAKE_FILE_OUT_BASE}.dso \
- && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \
+ && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \
&& $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \
&& $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT}
silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands
diff --git a/src/qbase.pri b/src/qbase.pri
index 1e13149..76079f2 100644
--- a/src/qbase.pri
+++ b/src/qbase.pri
@@ -8,7 +8,6 @@ isEmpty(QT_MAJOR_VERSION) {
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
-mac:!contains(QMAKE_EXT_C, .mm):QMAKE_EXT_C += .mm
#load up the headers info
CONFIG += qt_install_headers
@@ -185,8 +184,8 @@ include(qt_targets.pri)
win32:DEFINES+=_USE_MATH_DEFINES
symbian {
- # Make partial upgrade SIS file for all dll's except webkit
- !contains(TARGET.UID3, 0x200267C2):!contains(TARGET.UID3, 0xE00267C2) {
+ # Make partial upgrade SIS file for all dll's except webkit and s60main
+ !contains(TARGET.UID3, 0x200267C2):!contains(TARGET.UID3, 0xE00267C2):!contains(TARGET.UID3, 0x2001E61F):!contains(TARGET.UID3, 0xE001E61F) {
# Partial upgrade SIS file
vendorinfo = \
"; Localised Vendor name" \
@@ -195,10 +194,13 @@ symbian {
"; Unique Vendor name" \
":\"Nokia, Qt\"" \
" "
+ isEmpty(QT_LIBINFIX): PARTIAL_UPGRADE_UID = 0x2001E61C
+ else: PARTIAL_UPGRADE_UID = 0xE001E61C
+
pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \
- "$${LITERAL_HASH}{\"$${TARGET}\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
+ "$${LITERAL_HASH}{\"$${TARGET}\"}, ($$PARTIAL_UPGRADE_UID), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
partial_upgrade.pkg_prerules = pu_header vendorinfo
- partial_upgrade.sources = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
+ partial_upgrade.files = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
partial_upgrade.path = c:/sys/bin
DEPLOYMENT += partial_upgrade
}
diff --git a/src/qt3support/canvas/q3canvas.cpp b/src/qt3support/canvas/q3canvas.cpp
index 959c435..1b4706d 100644
--- a/src/qt3support/canvas/q3canvas.cpp
+++ b/src/qt3support/canvas/q3canvas.cpp
@@ -1030,7 +1030,7 @@ void Q3Canvas::setUpdatePeriod(int ms)
The advance takes place in two phases. In phase 0, the
Q3CanvasItem::advance() function of each Q3CanvasItem::animated()
- canvas item is called with paramater 0. Then all these canvas
+ canvas item is called with parameter 0. Then all these canvas
items are called again, with parameter 1. In phase 0, the canvas
items should not change position, merely examine other items on
the canvas for which special processing is required, such as
diff --git a/src/qt3support/sql/q3sqlfieldinfo.qdoc b/src/qt3support/sql/q3sqlfieldinfo.qdoc
index 2ba9f70..a4c5619 100644
--- a/src/qt3support/sql/q3sqlfieldinfo.qdoc
+++ b/src/qt3support/sql/q3sqlfieldinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/sql/q3sqlrecordinfo.qdoc b/src/qt3support/sql/q3sqlrecordinfo.qdoc
index bbe46e4..1d89893 100644
--- a/src/qt3support/sql/q3sqlrecordinfo.qdoc
+++ b/src/qt3support/sql/q3sqlrecordinfo.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/text/q3richtext.cpp b/src/qt3support/text/q3richtext.cpp
index d84a85b..f8cd1ed 100644
--- a/src/qt3support/text/q3richtext.cpp
+++ b/src/qt3support/text/q3richtext.cpp
@@ -2914,7 +2914,7 @@ QString Q3TextDocument::selectedText(int id, bool asRichText) const
}
}
// ### workaround for plain text export until we get proper
- // mime types: turn unicode line seperators into the more
+ // mime types: turn unicode line separators into the more
// widely understood \n. Makes copy and pasting code snipplets
// from within Assistent possible
QChar* uc = (QChar*) s.unicode();
diff --git a/src/qt3support/tools/q3asciicache.qdoc b/src/qt3support/tools/q3asciicache.qdoc
index 87a8b6b..df82c13 100644
--- a/src/qt3support/tools/q3asciicache.qdoc
+++ b/src/qt3support/tools/q3asciicache.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3asciidict.qdoc b/src/qt3support/tools/q3asciidict.qdoc
index b73e5d6..8ab87c9 100644
--- a/src/qt3support/tools/q3asciidict.qdoc
+++ b/src/qt3support/tools/q3asciidict.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3cache.qdoc b/src/qt3support/tools/q3cache.qdoc
index f1a2f3a..0ee1167 100644
--- a/src/qt3support/tools/q3cache.qdoc
+++ b/src/qt3support/tools/q3cache.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3dict.qdoc b/src/qt3support/tools/q3dict.qdoc
index 993345e..0736bb4 100644
--- a/src/qt3support/tools/q3dict.qdoc
+++ b/src/qt3support/tools/q3dict.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3intcache.qdoc b/src/qt3support/tools/q3intcache.qdoc
index 81b2227..78c6a82 100644
--- a/src/qt3support/tools/q3intcache.qdoc
+++ b/src/qt3support/tools/q3intcache.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3intdict.qdoc b/src/qt3support/tools/q3intdict.qdoc
index 7d9338e..27c37a0 100644
--- a/src/qt3support/tools/q3intdict.qdoc
+++ b/src/qt3support/tools/q3intdict.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3memarray.qdoc b/src/qt3support/tools/q3memarray.qdoc
index a8f62bf..13b1c2f 100644
--- a/src/qt3support/tools/q3memarray.qdoc
+++ b/src/qt3support/tools/q3memarray.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3ptrdict.qdoc b/src/qt3support/tools/q3ptrdict.qdoc
index 247067f..5fb8706 100644
--- a/src/qt3support/tools/q3ptrdict.qdoc
+++ b/src/qt3support/tools/q3ptrdict.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3ptrlist.qdoc b/src/qt3support/tools/q3ptrlist.qdoc
index 247a6b3..294e4ba 100644
--- a/src/qt3support/tools/q3ptrlist.qdoc
+++ b/src/qt3support/tools/q3ptrlist.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3ptrqueue.qdoc b/src/qt3support/tools/q3ptrqueue.qdoc
index 3c6881d..2c41cf5 100644
--- a/src/qt3support/tools/q3ptrqueue.qdoc
+++ b/src/qt3support/tools/q3ptrqueue.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3ptrstack.qdoc b/src/qt3support/tools/q3ptrstack.qdoc
index c58dcb8..8128a7f 100644
--- a/src/qt3support/tools/q3ptrstack.qdoc
+++ b/src/qt3support/tools/q3ptrstack.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3ptrvector.qdoc b/src/qt3support/tools/q3ptrvector.qdoc
index 689f21c..586b6e4 100644
--- a/src/qt3support/tools/q3ptrvector.qdoc
+++ b/src/qt3support/tools/q3ptrvector.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3valuelist.qdoc b/src/qt3support/tools/q3valuelist.qdoc
index 30d1e68..554e0f5 100644
--- a/src/qt3support/tools/q3valuelist.qdoc
+++ b/src/qt3support/tools/q3valuelist.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3valuestack.qdoc b/src/qt3support/tools/q3valuestack.qdoc
index 7960950..6e2ccbb 100644
--- a/src/qt3support/tools/q3valuestack.qdoc
+++ b/src/qt3support/tools/q3valuestack.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt3support/tools/q3valuevector.h b/src/qt3support/tools/q3valuevector.h
index cdd5fcd..f86cb30 100644
--- a/src/qt3support/tools/q3valuevector.h
+++ b/src/qt3support/tools/q3valuevector.h
@@ -84,9 +84,9 @@ public:
void resize(int n, const T& val = T())
{
if (n < this->size())
- erase(this->begin() + n, this->end());
+ this->erase(this->begin() + n, this->end());
else
- insert(this->end(), n - this->size(), val);
+ this->insert(this->end(), n - this->size(), val);
}
diff --git a/src/qt3support/tools/q3valuevector.qdoc b/src/qt3support/tools/q3valuevector.qdoc
index a10b36e..afe7f9c 100644
--- a/src/qt3support/tools/q3valuevector.qdoc
+++ b/src/qt3support/tools/q3valuevector.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/qt_install.pri b/src/qt_install.pri
index f906e92..268bb86 100644
--- a/src/qt_install.pri
+++ b/src/qt_install.pri
@@ -38,7 +38,7 @@ qt_install_headers {
}
}
-embedded:equals(TARGET, QtGui) {
+embedded|qpa: equals(TARGET, QtGui) {
# install fonts for embedded
INSTALLS += fonts
fonts.path = $$[QT_INSTALL_LIBS]/fonts
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 4ad9fbb..b0bf2cc 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -2960,7 +2960,7 @@ EXPORTS
?qvsnprintf@@YAHPADIPBD0@Z @ 2959 NONAME ; int qvsnprintf(char *, unsigned int, char const *, char *)
?raiseError@QXmlStreamReader@@QAEXABVQString@@@Z @ 2960 NONAME ; void QXmlStreamReader::raiseError(class QString const &)
?rangeContains@QXmlUtils@@CA_NPBVQXmlCharRange@@0VQChar@@@Z @ 2961 NONAME ; bool QXmlUtils::rangeContains(class QXmlCharRange const *, class QXmlCharRange const *, class QChar)
- ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@QAEXXZ @ 2962 NONAME ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void)
+ ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@QAEXXZ @ 2962 NONAME ABSENT ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void)
?reactivateSocketNotifier@QEventDispatcherSymbian@@QAEXPAVQSocketNotifier@@@Z @ 2963 NONAME ; void QEventDispatcherSymbian::reactivateSocketNotifier(class QSocketNotifier *)
?read@QAbstractFileEngine@@UAE_JPAD_J@Z @ 2964 NONAME ; long long QAbstractFileEngine::read(char *, long long)
?read@QFSFileEngine@@UAE_JPAD_J@Z @ 2965 NONAME ; long long QFSFileEngine::read(char *, long long)
@@ -4482,61 +4482,8 @@ EXPORTS
?textDirection@QLocale@@QBE?AW4LayoutDirection@Qt@@XZ @ 4481 NONAME ; enum Qt::LayoutDirection QLocale::textDirection(void) const
?msecsSinceReference@QElapsedTimer@@QBE_JXZ @ 4482 NONAME ; long long QElapsedTimer::msecsSinceReference(void) const
?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4483 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void)
- ??0QCoreApplication@@QAE@AAHPAPADH@Z @ 4484 NONAME ; QCoreApplication::QCoreApplication(int &, char * *, int)
- ??0QCoreApplicationPrivate@@QAE@AAHPAPADI@Z @ 4485 NONAME ; QCoreApplicationPrivate::QCoreApplicationPrivate(int &, char * *, unsigned int)
- ?connect@QObject@@SA_NPBV1@ABVQMetaMethod@@01W4ConnectionType@Qt@@@Z @ 4486 NONAME ; bool QObject::connect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &, enum Qt::ConnectionType)
- ?contains@QString@@QBE?AVQBool@@ABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4487 NONAME ; class QBool QString::contains(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?contains@QStringRef@@QBE?AVQBool@@ABV1@W4CaseSensitivity@Qt@@@Z @ 4488 NONAME ; class QBool QStringRef::contains(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?contains@QStringRef@@QBE?AVQBool@@ABVQString@@W4CaseSensitivity@Qt@@@Z @ 4489 NONAME ; class QBool QStringRef::contains(class QString const &, enum Qt::CaseSensitivity) const
- ?contains@QStringRef@@QBE?AVQBool@@VQChar@@W4CaseSensitivity@Qt@@@Z @ 4490 NONAME ; class QBool QStringRef::contains(class QChar, enum Qt::CaseSensitivity) const
- ?contains@QStringRef@@QBE?AVQBool@@VQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4491 NONAME ; class QBool QStringRef::contains(class QLatin1String, enum Qt::CaseSensitivity) const
- ?count@QString@@QBEHABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4492 NONAME ; int QString::count(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?count@QStringRef@@QBEHABV1@W4CaseSensitivity@Qt@@@Z @ 4493 NONAME ; int QStringRef::count(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?count@QStringRef@@QBEHABVQString@@W4CaseSensitivity@Qt@@@Z @ 4494 NONAME ; int QStringRef::count(class QString const &, enum Qt::CaseSensitivity) const
- ?count@QStringRef@@QBEHVQChar@@W4CaseSensitivity@Qt@@@Z @ 4495 NONAME ; int QStringRef::count(class QChar, enum Qt::CaseSensitivity) const
- ?disconnect@QObject@@SA_NPBV1@ABVQMetaMethod@@01@Z @ 4496 NONAME ; bool QObject::disconnect(class QObject const *, class QMetaMethod const &, class QObject const *, class QMetaMethod const &)
- ?endsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4497 NONAME ; bool QString::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?endsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4498 NONAME ; bool QStringRef::endsWith(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?endsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4499 NONAME ; bool QStringRef::endsWith(class QString const &, enum Qt::CaseSensitivity) const
- ?endsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4500 NONAME ; bool QStringRef::endsWith(class QChar, enum Qt::CaseSensitivity) const
- ?endsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4501 NONAME ; bool QStringRef::endsWith(class QLatin1String, enum Qt::CaseSensitivity) const
- ?indexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4502 NONAME ; int QString::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const
- ?indexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4503 NONAME ; int QStringRef::indexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const
- ?indexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4504 NONAME ; int QStringRef::indexOf(class QString const &, int, enum Qt::CaseSensitivity) const
- ?indexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4505 NONAME ; int QStringRef::indexOf(class QChar, int, enum Qt::CaseSensitivity) const
- ?indexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4506 NONAME ; int QStringRef::indexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const
- ?isLocalFile@QUrl@@QBE_NXZ @ 4507 NONAME ; bool QUrl::isLocalFile(void) const
- ?lastIndexOf@QString@@QBEHABVQStringRef@@HW4CaseSensitivity@Qt@@@Z @ 4508 NONAME ; int QString::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const
- ?lastIndexOf@QStringRef@@QBEHABV1@HW4CaseSensitivity@Qt@@@Z @ 4509 NONAME ; int QStringRef::lastIndexOf(class QStringRef const &, int, enum Qt::CaseSensitivity) const
- ?lastIndexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4510 NONAME ; int QStringRef::lastIndexOf(class QString const &, int, enum Qt::CaseSensitivity) const
- ?lastIndexOf@QStringRef@@QBEHVQChar@@HW4CaseSensitivity@Qt@@@Z @ 4511 NONAME ; int QStringRef::lastIndexOf(class QChar, int, enum Qt::CaseSensitivity) const
- ?lastIndexOf@QStringRef@@QBEHVQLatin1String@@HW4CaseSensitivity@Qt@@@Z @ 4512 NONAME ; int QStringRef::lastIndexOf(class QLatin1String, int, enum Qt::CaseSensitivity) const
- ?lockInline@QMutex@@QAEXXZ @ 4513 NONAME ; void QMutex::lockInline(void)
- ?lockInternal@QMutex@@AAEXXZ @ 4514 NONAME ; void QMutex::lockInternal(void)
- ?nativeKey@QSharedMemory@@QBE?AVQString@@XZ @ 4515 NONAME ; class QString QSharedMemory::nativeKey(void) const
- ?senderSignalIndex@QObject@@IBEHXZ @ 4516 NONAME ; int QObject::senderSignalIndex(void) const
- ?setNativeKey@QSharedMemory@@QAEXABVQString@@@Z @ 4517 NONAME ; void QSharedMemory::setNativeKey(class QString const &)
- ?startsWith@QString@@QBE_NABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4518 NONAME ; bool QString::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?startsWith@QStringRef@@QBE_NABV1@W4CaseSensitivity@Qt@@@Z @ 4519 NONAME ; bool QStringRef::startsWith(class QStringRef const &, enum Qt::CaseSensitivity) const
- ?startsWith@QStringRef@@QBE_NABVQString@@W4CaseSensitivity@Qt@@@Z @ 4520 NONAME ; bool QStringRef::startsWith(class QString const &, enum Qt::CaseSensitivity) const
- ?startsWith@QStringRef@@QBE_NVQChar@@W4CaseSensitivity@Qt@@@Z @ 4521 NONAME ; bool QStringRef::startsWith(class QChar, enum Qt::CaseSensitivity) const
- ?startsWith@QStringRef@@QBE_NVQLatin1String@@W4CaseSensitivity@Qt@@@Z @ 4522 NONAME ; bool QStringRef::startsWith(class QLatin1String, enum Qt::CaseSensitivity) const
- ?tryLockInline@QMutex@@QAE_NXZ @ 4523 NONAME ; bool QMutex::tryLockInline(void)
- ?unlockInline@QMutex@@QAEXXZ @ 4524 NONAME ; void QMutex::unlockInline(void)
- ?unlockInternal@QMutex@@AAEXXZ @ 4525 NONAME ; void QMutex::unlockInternal(void)
- ?waitForDone@QThreadPool@@QAE_NH@Z @ 4526 NONAME ; bool QThreadPool::waitForDone(int)
- ?app_compile_version@QCoreApplicationPrivate@@2HA @ 4527 NONAME ; int QCoreApplicationPrivate::app_compile_version
- ??0QFileInfo@@QAE@PAVQFileInfoPrivate@@@Z @ 4528 NONAME ; QFileInfo::QFileInfo(class QFileInfoPrivate *)
- ??0QSystemError@@QAE@HW4ErrorScope@0@@Z @ 4529 NONAME ; QSystemError::QSystemError(int, enum QSystemError::ErrorScope)
- ??0QSystemError@@QAE@XZ @ 4530 NONAME ; QSystemError::QSystemError(void)
- ?cast@QMetaObject@@QBEPBVQObject@@PBV2@@Z @ 4531 NONAME ; class QObject const * QMetaObject::cast(class QObject const *) const
- ?error@QSystemError@@QAEHXZ @ 4532 NONAME ; int QSystemError::error(void)
- ?qt_symbian_SetupThreadHeap@@YAHHAAUSStdEpocThreadCreateInfo@@@Z @ 4533 NONAME ; int qt_symbian_SetupThreadHeap(int, struct SStdEpocThreadCreateInfo &)
- ?scope@QSystemError@@QAE?AW4ErrorScope@1@XZ @ 4534 NONAME ; enum QSystemError::ErrorScope QSystemError::scope(void)
- ?toAscii@QStringRef@@QBE?AVQByteArray@@XZ @ 4535 NONAME ; class QByteArray QStringRef::toAscii(void) const
- ?toLatin1@QStringRef@@QBE?AVQByteArray@@XZ @ 4536 NONAME ; class QByteArray QStringRef::toLatin1(void) const
- ?toLocal8Bit@QStringRef@@QBE?AVQByteArray@@XZ @ 4537 NONAME ; class QByteArray QStringRef::toLocal8Bit(void) const
- ?toString@QSystemError@@QAE?AVQString@@XZ @ 4538 NONAME ; class QString QSystemError::toString(void)
- ?toUcs4@QStringRef@@QBE?AV?$QVector@I@@XZ @ 4539 NONAME ; class QVector<unsigned int> QStringRef::toUcs4(void) const
- ?toUtf8@QStringRef@@QBE?AVQByteArray@@XZ @ 4540 NONAME ; class QByteArray QStringRef::toUtf8(void) const
+ ?qt_symbian_SetupThreadHeap@@YAHHAAUSStdEpocThreadCreateInfo@@@Z @ 4484 NONAME ; int qt_symbian_SetupThreadHeap(int, struct SStdEpocThreadCreateInfo &)
+ ?objectNameChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4485 NONAME ; void (*QAbstractDeclarativeData::objectNameChanged)(class QAbstractDeclarativeData *, class QObject *)
+ ?queueDeferredActiveObjectsCompletion@QEventDispatcherSymbian@@QAEXXZ @ 4486 NONAME ; void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion(void)
+ ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@UAEXXZ @ 4487 NONAME ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index cf2f325..9e88df7 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -1,1718 +1,1843 @@
EXPORTS
?write@QDeclarativeProperty@@QBE_NABVQVariant@@@Z @ 1 NONAME ; bool QDeclarativeProperty::write(class QVariant const &) const
- ?setStored@QMetaPropertyBuilder@@QAEX_N@Z @ 2 NONAME ; void QMetaPropertyBuilder::setStored(bool)
+ ?setStored@QMetaPropertyBuilder@@QAEX_N@Z @ 2 NONAME ABSENT ; void QMetaPropertyBuilder::setStored(bool)
?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *, int)
?qt_metacast@QDeclarativeComponent@@UAEPAXPBD@Z @ 4 NONAME ; void * QDeclarativeComponent::qt_metacast(char const *)
- ?name@QDeclarativeDebugService@@QBE?AVQString@@XZ @ 5 NONAME ; class QString QDeclarativeDebugService::name(void) const
- ?debugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 6 NONAME ; int QDeclarativeDebugObjectReference::debugId(void) const
+ ?name@QDeclarativeDebugService@@QBE?AVQString@@XZ @ 5 NONAME ABSENT ; class QString QDeclarativeDebugService::name(void) const
+ ?debugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 6 NONAME ABSENT ; int QDeclarativeDebugObjectReference::debugId(void) const
?addPluginPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 7 NONAME ; void QDeclarativeEngine::addPluginPath(class QString const &)
- ?name@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 8 NONAME ; class QByteArray QMetaPropertyBuilder::name(void) const
+ ?name@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 8 NONAME ABSENT ; class QByteArray QMetaPropertyBuilder::name(void) const
??6QDeclarativeInfo@@QAEAAV0@_J@Z @ 9 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long long)
- ?propertyOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 10 NONAME ; int QDeclarativeOpenMetaObjectType::propertyOffset(void) const
- ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *)
+ ?propertyOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 10 NONAME ABSENT ; int QDeclarativeOpenMetaObjectType::propertyOffset(void) const
+ ??0QDeclarativeText@@QAE@PAVQDeclarativeItem@@@Z @ 11 NONAME ABSENT ; QDeclarativeText::QDeclarativeText(class QDeclarativeItem *)
?propertyTypeName@QDeclarativeProperty@@QBEPBDXZ @ 12 NONAME ; char const * QDeclarativeProperty::propertyTypeName(void) const
- ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void)
- ?setLeft@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 14 NONAME ; void QDeclarativeAnchors::setLeft(class QDeclarativeAnchorLine const &)
+ ?getStaticMetaObject@QDeclarativeDebugService@@SAABUQMetaObject@@XZ @ 13 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugService::getStaticMetaObject(void)
+ ?setLeft@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 14 NONAME ABSENT ; void QDeclarativeAnchors::setLeft(class QDeclarativeAnchorLine const &)
?qt_metacall@QDeclarativeExpression@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int QDeclarativeExpression::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?staticMetaObject@QDeclarativePen@@2UQMetaObject@@B @ 16 NONAME ; struct QMetaObject const QDeclarativePen::staticMetaObject
+ ?staticMetaObject@QDeclarativePen@@2UQMetaObject@@B @ 16 NONAME ABSENT ; struct QMetaObject const QDeclarativePen::staticMetaObject
?transformOriginChanged@QDeclarativeItem@@IAEXW4TransformOrigin@1@@Z @ 17 NONAME ; void QDeclarativeItem::transformOriginChanged(enum QDeclarativeItem::TransformOrigin)
- ?isStored@QMetaPropertyBuilder@@QBE_NXZ @ 18 NONAME ; bool QMetaPropertyBuilder::isStored(void) const
+ ?isStored@QMetaPropertyBuilder@@QBE_NXZ @ 18 NONAME ABSENT ; bool QMetaPropertyBuilder::isStored(void) const
?elapsed@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 19 NONAME ; long long QDeclarativeItemPrivate::elapsed(class QElapsedTimer &)
?clearComponentCache@QDeclarativeEngine@@QAEXXZ @ 20 NONAME ; void QDeclarativeEngine::clearComponentCache(void)
?forceActiveFocus@QDeclarativeItem@@QAEXXZ @ 21 NONAME ; void QDeclarativeItem::forceActiveFocus(void)
- ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *, int)
+ ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 22 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *, int)
??1QDeclarativeParserStatus@@UAE@XZ @ 23 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(void)
- ?gradient@QDeclarativeRectangle@@QBEPAVQDeclarativeGradient@@XZ @ 24 NONAME ; class QDeclarativeGradient * QDeclarativeRectangle::gradient(void) const
- ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 25 NONAME ; void QMetaPropertyBuilder::setReadable(bool)
+ ?gradient@QDeclarativeRectangle@@QBEPAVQDeclarativeGradient@@XZ @ 24 NONAME ABSENT ; class QDeclarativeGradient * QDeclarativeRectangle::gradient(void) const
+ ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 25 NONAME ABSENT ; void QMetaPropertyBuilder::setReadable(bool)
?d_func@QDeclarativeExpression@@AAEPAVQDeclarativeExpressionPrivate@@XZ @ 26 NONAME ; class QDeclarativeExpressionPrivate * QDeclarativeExpression::d_func(void)
- ??1QDeclarativeDomValueValueSource@@QAE@XZ @ 27 NONAME ; QDeclarativeDomValueValueSource::~QDeclarativeDomValueValueSource(void)
+ ??1QDeclarativeDomValueValueSource@@QAE@XZ @ 27 NONAME ABSENT ; QDeclarativeDomValueValueSource::~QDeclarativeDomValueValueSource(void)
??_EQDeclarativeStateGroup@@UAE@I@Z @ 28 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(unsigned int)
- ?property@QDeclarativeDomObject@@QBE?AVQDeclarativeDomProperty@@ABVQByteArray@@@Z @ 29 NONAME ; class QDeclarativeDomProperty QDeclarativeDomObject::property(class QByteArray const &) const
- ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 30 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *, int)
+ ?property@QDeclarativeDomObject@@QBE?AVQDeclarativeDomProperty@@ABVQByteArray@@@Z @ 29 NONAME ABSENT ; class QDeclarativeDomProperty QDeclarativeDomObject::property(class QByteArray const &) const
+ ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 30 NONAME ABSENT ; class QString QDeclarativeAnchors::tr(char const *, char const *, int)
?location@QDeclarativeCustomParserNode@@QBE?AULocation@QDeclarativeParser@@XZ @ 31 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserNode::location(void) const
??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQString@@PAVQObject@@@Z @ 32 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QString const &, class QObject *)
?d_func@QDeclarativeContext@@AAEPAVQDeclarativeContextPrivate@@XZ @ 33 NONAME ; class QDeclarativeContextPrivate * QDeclarativeContext::d_func(void)
- ?resetLeft@QDeclarativeAnchors@@QAEXXZ @ 34 NONAME ; void QDeclarativeAnchors::resetLeft(void)
+ ?resetLeft@QDeclarativeAnchors@@QAEXXZ @ 34 NONAME ABSENT ; void QDeclarativeAnchors::resetLeft(void)
?setOfflineStoragePath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 35 NONAME ; void QDeclarativeEngine::setOfflineStoragePath(class QString const &)
- ?getStaticMetaObject@QListModelInterface@@SAABUQMetaObject@@XZ @ 36 NONAME ; struct QMetaObject const & QListModelInterface::getStaticMetaObject(void)
+ ?getStaticMetaObject@QListModelInterface@@SAABUQMetaObject@@XZ @ 36 NONAME ABSENT ; struct QMetaObject const & QListModelInterface::getStaticMetaObject(void)
?tr@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 37 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *, int)
??0QDeclarativeEngine@@QAE@PAVQObject@@@Z @ 38 NONAME ; QDeclarativeEngine::QDeclarativeEngine(class QObject *)
- ??0QDeclarativeDebugObjectReference@@QAE@ABV0@@Z @ 39 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(class QDeclarativeDebugObjectReference const &)
- ?set@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 40 NONAME ; void QDeclarativeListModel::set(int, class QScriptValue const &)
+ ??0QDeclarativeDebugObjectReference@@QAE@ABV0@@Z @ 39 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(class QDeclarativeDebugObjectReference const &)
+ ?set@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 40 NONAME ABSENT ; void QDeclarativeListModel::set(int, class QScriptValue const &)
?tr@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 41 NONAME ; class QString QDeclarativeState::tr(char const *, char const *, int)
- ?metaObject@QDeclarativeBinding@@UBEPBUQMetaObject@@XZ @ 42 NONAME ; struct QMetaObject const * QDeclarativeBinding::metaObject(void) const
- ?setUser@QMetaPropertyBuilder@@QAEX_N@Z @ 43 NONAME ; void QMetaPropertyBuilder::setUser(bool)
- ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 44 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *)
- ?setHorizontalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 45 NONAME ; void QDeclarativeAnchors::setHorizontalCenterOffset(float)
+ ?metaObject@QDeclarativeBinding@@UBEPBUQMetaObject@@XZ @ 42 NONAME ABSENT ; struct QMetaObject const * QDeclarativeBinding::metaObject(void) const
+ ?setUser@QMetaPropertyBuilder@@QAEX_N@Z @ 43 NONAME ABSENT ; void QMetaPropertyBuilder::setUser(bool)
+ ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 44 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *)
+ ?setHorizontalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 45 NONAME ABSENT ; void QDeclarativeAnchors::setHorizontalCenterOffset(float)
?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 46 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, int)
??0QDeclarativeProperty@@QAE@XZ @ 47 NONAME ; QDeclarativeProperty::QDeclarativeProperty(void)
- ?valueType@QDeclarativeValueTypeFactory@@SAPAVQDeclarativeValueType@@H@Z @ 48 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::valueType(int)
- ??1QDeclarativeText@@UAE@XZ @ 49 NONAME ; QDeclarativeText::~QDeclarativeText(void)
- ?getStaticMetaObject@QDeclarativeText@@SAABUQMetaObject@@XZ @ 50 NONAME ; struct QMetaObject const & QDeclarativeText::getStaticMetaObject(void)
- ?isDesignable@QMetaPropertyBuilder@@QBE_NXZ @ 51 NONAME ; bool QMetaPropertyBuilder::isDesignable(void) const
+ ?valueType@QDeclarativeValueTypeFactory@@SAPAVQDeclarativeValueType@@H@Z @ 48 NONAME ABSENT ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::valueType(int)
+ ??1QDeclarativeText@@UAE@XZ @ 49 NONAME ABSENT ; QDeclarativeText::~QDeclarativeText(void)
+ ?getStaticMetaObject@QDeclarativeText@@SAABUQMetaObject@@XZ @ 50 NONAME ABSENT ; struct QMetaObject const & QDeclarativeText::getStaticMetaObject(void)
+ ?isDesignable@QMetaPropertyBuilder@@QBE_NXZ @ 51 NONAME ABSENT ; bool QMetaPropertyBuilder::isDesignable(void) const
?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 52 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *, int)
?errors@QDeclarativeView@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 53 NONAME ; class QList<class QDeclarativeError> QDeclarativeView::errors(void) const
- ??0QPacket@@QAE@ABV0@@Z @ 54 NONAME ; QPacket::QPacket(class QPacket const &)
- ??1QDeclarativeDebugObjectExpressionWatch@@UAE@XZ @ 55 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(void)
+ ??0QPacket@@QAE@ABV0@@Z @ 54 NONAME ABSENT ; QPacket::QPacket(class QPacket const &)
+ ??1QDeclarativeDebugObjectExpressionWatch@@UAE@XZ @ 55 NONAME ABSENT ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(void)
?status@QDeclarativePixmap@@QBE?AW4Status@1@XZ @ 56 NONAME ; enum QDeclarativePixmap::Status QDeclarativePixmap::status(void) const
- ?bottom@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 57 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::bottom(void) const
- ??_EQDeclarativeDebugObjectQuery@@UAE@I@Z @ 58 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(unsigned int)
- ??0QDeclarativeDomObject@@QAE@XZ @ 59 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(void)
- ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 60 NONAME ; class QList<class QDeclarativeError> QDeclarativeDomDocument::errors(void) const
+ ?bottom@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 57 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::bottom(void) const
+ ??_EQDeclarativeDebugObjectQuery@@UAE@I@Z @ 58 NONAME ABSENT ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(unsigned int)
+ ??0QDeclarativeDomObject@@QAE@XZ @ 59 NONAME ABSENT ; QDeclarativeDomObject::QDeclarativeDomObject(void)
+ ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 60 NONAME ABSENT ; class QList<class QDeclarativeError> QDeclarativeDomDocument::errors(void) const
?toChanged@QDeclarativeTransition@@IAEXXZ @ 61 NONAME ; void QDeclarativeTransition::toChanged(void)
?objectOwnership@QDeclarativeEngine@@SA?AW4ObjectOwnership@1@PAVQObject@@@Z @ 62 NONAME ; enum QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(class QObject *)
- ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 63 NONAME ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *)
+ ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 63 NONAME ABSENT ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *)
?value@QDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 64 NONAME ; class QVariant QDeclarativePropertyMap::value(class QString const &) const
?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 65 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *)
- ?isWaiting@QDeclarativeDebugQuery@@QBE_NXZ @ 66 NONAME ; bool QDeclarativeDebugQuery::isWaiting(void) const
+ ?isWaiting@QDeclarativeDebugQuery@@QBE_NXZ @ 66 NONAME ABSENT ; bool QDeclarativeDebugQuery::isWaiting(void) const
??1Variant@QDeclarativeParser@@QAE@XZ @ 67 NONAME ; QDeclarativeParser::Variant::~Variant(void)
??0Variant@QDeclarativeParser@@QAE@ABVQString@@@Z @ 68 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &)
- ?paintedSizeChanged@QDeclarativeText@@IAEXXZ @ 69 NONAME ; void QDeclarativeText::paintedSizeChanged(void)
- ??1QDeclarativeDebugClient@@UAE@XZ @ 70 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(void)
- ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 71 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *)
- ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 72 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *)
+ ?paintedSizeChanged@QDeclarativeText@@IAEXXZ @ 69 NONAME ABSENT ; void QDeclarativeText::paintedSizeChanged(void)
+ ??1QDeclarativeDebugClient@@UAE@XZ @ 70 NONAME ABSENT ; QDeclarativeDebugClient::~QDeclarativeDebugClient(void)
+ ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 71 NONAME ABSENT ; class QString QPacketProtocol::trUtf8(char const *, char const *)
+ ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 72 NONAME ABSENT ; class QString QDeclarativeListModel::trUtf8(char const *, char const *)
?qt_metacast@QDeclarativeState@@UAEPAXPBD@Z @ 73 NONAME ; void * QDeclarativeState::qt_metacast(char const *)
- ??1QDeclarativeDebugContextReference@@QAE@XZ @ 74 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(void)
+ ??1QDeclarativeDebugContextReference@@QAE@XZ @ 74 NONAME ABSENT ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(void)
?getStaticMetaObject@QDeclarativeStateOperation@@SAABUQMetaObject@@XZ @ 75 NONAME ; struct QMetaObject const & QDeclarativeStateOperation::getStaticMetaObject(void)
- ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 76 NONAME ; bool QDeclarativeDomValue::isInvalid(void) const
- ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 77 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *, int)
+ ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 76 NONAME ABSENT ; bool QDeclarativeDomValue::isInvalid(void) const
+ ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 77 NONAME ABSENT ; class QString QDeclarativeText::trUtf8(char const *, char const *, int)
??0QDeclarativeListReference@@QAE@ABV0@@Z @ 78 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QDeclarativeListReference const &)
?classBegin@QDeclarativeItem@@MAEXXZ @ 79 NONAME ; void QDeclarativeItem::classBegin(void)
?setTransformOrigin@QDeclarativeItem@@QAEXW4TransformOrigin@1@@Z @ 80 NONAME ; void QDeclarativeItem::setTransformOrigin(enum QDeclarativeItem::TransformOrigin)
?event@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 81 NONAME ; bool QDeclarativeItem::event(class QEvent *)
- ?setAttributes@QMetaMethodBuilder@@QAEXH@Z @ 82 NONAME ; void QMetaMethodBuilder::setAttributes(int)
+ ?setAttributes@QMetaMethodBuilder@@QAEXH@Z @ 82 NONAME ABSENT ; void QMetaMethodBuilder::setAttributes(int)
?imageType@QDeclarativeImageProvider@@QBE?AW4ImageType@1@XZ @ 83 NONAME ; enum QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType(void) const
- ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 84 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int)
- ?qt_metacall@QDeclarativeDebugQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 85 NONAME ; int QDeclarativeDebugQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 84 NONAME ABSENT ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int)
+ ?qt_metacall@QDeclarativeDebugQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 85 NONAME ABSENT ; int QDeclarativeDebugQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
?findState@QDeclarativeStateGroup@@QBEPAVQDeclarativeState@@ABVQString@@@Z @ 86 NONAME ; class QDeclarativeState * QDeclarativeStateGroup::findState(class QString const &) const
?asScript@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 87 NONAME ; class QString QDeclarativeParser::Variant::asScript(void) const
?qt_metacast@QDeclarativeExtensionPlugin@@UAEPAXPBD@Z @ 88 NONAME ; void * QDeclarativeExtensionPlugin::qt_metacast(char const *)
- ?objectId@QDeclarativeDomObject@@QBE?AVQString@@XZ @ 89 NONAME ; class QString QDeclarativeDomObject::objectId(void) const
- ?right@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 90 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::right(void) const
- ?removeFromObject@QDeclarativeAbstractBinding@@QAEXXZ @ 91 NONAME ; void QDeclarativeAbstractBinding::removeFromObject(void)
+ ?objectId@QDeclarativeDomObject@@QBE?AVQString@@XZ @ 89 NONAME ABSENT ; class QString QDeclarativeDomObject::objectId(void) const
+ ?right@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 90 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::right(void) const
+ ?removeFromObject@QDeclarativeAbstractBinding@@QAEXXZ @ 91 NONAME ABSENT ; void QDeclarativeAbstractBinding::removeFromObject(void)
?resizeMode@QDeclarativeView@@QBE?AW4ResizeMode@1@XZ @ 92 NONAME ; enum QDeclarativeView::ResizeMode QDeclarativeView::resizeMode(void) const
- ?object@QDeclarativeOpenMetaObject@@QBEPAVQObject@@XZ @ 93 NONAME ; class QObject * QDeclarativeOpenMetaObject::object(void) const
- ?staticMetaObject@QDeclarativeBehavior@@2UQMetaObject@@B @ 94 NONAME ; struct QMetaObject const QDeclarativeBehavior::staticMetaObject
- ?toObject@QDeclarativeDomValue@@QBE?AVQDeclarativeDomObject@@XZ @ 95 NONAME ; class QDeclarativeDomObject QDeclarativeDomValue::toObject(void) const
+ ?object@QDeclarativeOpenMetaObject@@QBEPAVQObject@@XZ @ 93 NONAME ABSENT ; class QObject * QDeclarativeOpenMetaObject::object(void) const
+ ?staticMetaObject@QDeclarativeBehavior@@2UQMetaObject@@B @ 94 NONAME ABSENT ; struct QMetaObject const QDeclarativeBehavior::staticMetaObject
+ ?toObject@QDeclarativeDomValue@@QBE?AVQDeclarativeDomObject@@XZ @ 95 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomValue::toObject(void) const
?setLine@QDeclarativeError@@QAEXH@Z @ 96 NONAME ; void QDeclarativeError::setLine(int)
??6QDeclarativeInfo@@QAEAAV0@K@Z @ 97 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long)
- ??0QDeclarativeDebugConnection@@QAE@PAVQObject@@@Z @ 98 NONAME ; QDeclarativeDebugConnection::QDeclarativeDebugConnection(class QObject *)
- ?qt_metacast@QDeclarativeDebugQuery@@UAEPAXPBD@Z @ 99 NONAME ; void * QDeclarativeDebugQuery::qt_metacast(char const *)
- ?isValid@QDeclarativeGridScaledImage@@QBE_NXZ @ 100 NONAME ; bool QDeclarativeGridScaledImage::isValid(void) const
+ ??0QDeclarativeDebugConnection@@QAE@PAVQObject@@@Z @ 98 NONAME ABSENT ; QDeclarativeDebugConnection::QDeclarativeDebugConnection(class QObject *)
+ ?qt_metacast@QDeclarativeDebugQuery@@UAEPAXPBD@Z @ 99 NONAME ABSENT ; void * QDeclarativeDebugQuery::qt_metacast(char const *)
+ ?isValid@QDeclarativeGridScaledImage@@QBE_NXZ @ 100 NONAME ABSENT ; bool QDeclarativeGridScaledImage::isValid(void) const
?qt_metacast@QDeclarativeContext@@UAEPAXPBD@Z @ 101 NONAME ; void * QDeclarativeContext::qt_metacast(char const *)
- ?metaObject@QDeclarativeDebugClient@@UBEPBUQMetaObject@@XZ @ 102 NONAME ; struct QMetaObject const * QDeclarativeDebugClient::metaObject(void) const
+ ?metaObject@QDeclarativeDebugClient@@UBEPBUQMetaObject@@XZ @ 102 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugClient::metaObject(void) const
?transitions@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 103 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeItemPrivate::transitions(void)
- ??0QDeclarativeDebugPropertyWatch@@QAE@PAVQObject@@@Z @ 104 NONAME ; QDeclarativeDebugPropertyWatch::QDeclarativeDebugPropertyWatch(class QObject *)
- ??_EQDeclarativeDebugPropertyReference@@QAE@I@Z @ 105 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(unsigned int)
- ?itemsChanged@QListModelInterface@@IAEXHHABV?$QList@H@@@Z @ 106 NONAME ; void QListModelInterface::itemsChanged(int, int, class QList<int> const &)
+ ??0QDeclarativeDebugPropertyWatch@@QAE@PAVQObject@@@Z @ 104 NONAME ABSENT ; QDeclarativeDebugPropertyWatch::QDeclarativeDebugPropertyWatch(class QObject *)
+ ??_EQDeclarativeDebugPropertyReference@@QAE@I@Z @ 105 NONAME ABSENT ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(unsigned int)
+ ?itemsChanged@QListModelInterface@@IAEXHHABV?$QList@H@@@Z @ 106 NONAME ABSENT ; void QListModelInterface::itemsChanged(int, int, class QList<int> const &)
??6@YA?AVQDebug@@V0@PAVQDeclarativeItem@@@Z @ 107 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeItem *)
- ?write@QDeclarativePropertyPrivate@@SA_NABVQDeclarativeProperty@@ABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 108 NONAME ; bool QDeclarativePropertyPrivate::write(class QDeclarativeProperty const &, class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?verticalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 109 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::verticalTileRule(void) const
- ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 110 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *)
- ?isDynamic@QMetaPropertyBuilder@@QBE_NXZ @ 111 NONAME ; bool QMetaPropertyBuilder::isDynamic(void) const
- ?removeClassInfo@QMetaObjectBuilder@@QAEXH@Z @ 112 NONAME ; void QMetaObjectBuilder::removeClassInfo(int)
+ ?write@QDeclarativePropertyPrivate@@SA_NABVQDeclarativeProperty@@ABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 108 NONAME ABSENT ; bool QDeclarativePropertyPrivate::write(class QDeclarativeProperty const &, class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?verticalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 109 NONAME ABSENT ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::verticalTileRule(void) const
+ ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 110 NONAME ABSENT ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *)
+ ?isDynamic@QMetaPropertyBuilder@@QBE_NXZ @ 111 NONAME ABSENT ; bool QMetaPropertyBuilder::isDynamic(void) const
+ ?removeClassInfo@QMetaObjectBuilder@@QAEXH@Z @ 112 NONAME ABSENT ; void QMetaObjectBuilder::removeClassInfo(int)
?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 113 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &)
?description@QDeclarativeError@@QBE?AVQString@@XZ @ 114 NONAME ; class QString QDeclarativeError::description(void) const
- ?binding@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 115 NONAME ; class QString QDeclarativeDebugPropertyReference::binding(void) const
- ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 116 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *)
- ?readValueProperty@QDeclarativePropertyPrivate@@QAE?AVQVariant@@XZ @ 117 NONAME ; class QVariant QDeclarativePropertyPrivate::readValueProperty(void)
- ?propertyType@QDeclarativeDomDynamicProperty@@QBEHXZ @ 118 NONAME ; int QDeclarativeDomDynamicProperty::propertyType(void) const
- ?gridBottom@QDeclarativeGridScaledImage@@QBEHXZ @ 119 NONAME ; int QDeclarativeGridScaledImage::gridBottom(void) const
- ?setRadius@QDeclarativeRectangle@@QAEXM@Z @ 120 NONAME ; void QDeclarativeRectangle::setRadius(float)
- ?d_func@QDeclarativeBehavior@@AAEPAVQDeclarativeBehaviorPrivate@@XZ @ 121 NONAME ; class QDeclarativeBehaviorPrivate * QDeclarativeBehavior::d_func(void)
- ?isValid@QDeclarativePen@@QAE_NXZ @ 122 NONAME ; bool QDeclarativePen::isValid(void)
- ?result@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 123 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::result(void) const
- ?isEnumOrFlag@QMetaPropertyBuilder@@QBE_NXZ @ 124 NONAME ; bool QMetaPropertyBuilder::isEnumOrFlag(void) const
- ?addToObject@QDeclarativeAbstractBinding@@QAEXPAVQObject@@@Z @ 125 NONAME ; void QDeclarativeAbstractBinding::addToObject(class QObject *)
+ ?binding@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 115 NONAME ABSENT ; class QString QDeclarativeDebugPropertyReference::binding(void) const
+ ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 116 NONAME ABSENT ; class QString QDeclarativePen::trUtf8(char const *, char const *)
+ ?readValueProperty@QDeclarativePropertyPrivate@@QAE?AVQVariant@@XZ @ 117 NONAME ABSENT ; class QVariant QDeclarativePropertyPrivate::readValueProperty(void)
+ ?propertyType@QDeclarativeDomDynamicProperty@@QBEHXZ @ 118 NONAME ABSENT ; int QDeclarativeDomDynamicProperty::propertyType(void) const
+ ?gridBottom@QDeclarativeGridScaledImage@@QBEHXZ @ 119 NONAME ABSENT ; int QDeclarativeGridScaledImage::gridBottom(void) const
+ ?setRadius@QDeclarativeRectangle@@QAEXM@Z @ 120 NONAME ABSENT ; void QDeclarativeRectangle::setRadius(float)
+ ?d_func@QDeclarativeBehavior@@AAEPAVQDeclarativeBehaviorPrivate@@XZ @ 121 NONAME ABSENT ; class QDeclarativeBehaviorPrivate * QDeclarativeBehavior::d_func(void)
+ ?isValid@QDeclarativePen@@QAE_NXZ @ 122 NONAME ABSENT ; bool QDeclarativePen::isValid(void)
+ ?result@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 123 NONAME ABSENT ; class QVariant QDeclarativeDebugExpressionQuery::result(void) const
+ ?isEnumOrFlag@QMetaPropertyBuilder@@QBE_NXZ @ 124 NONAME ABSENT ; bool QMetaPropertyBuilder::isEnumOrFlag(void) const
+ ?addToObject@QDeclarativeAbstractBinding@@QAEXPAVQObject@@@Z @ 125 NONAME ABSENT ; void QDeclarativeAbstractBinding::addToObject(class QObject *)
?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 126 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *, int)
- ?d_func@QDeclarativeAnchors@@AAEPAVQDeclarativeAnchorsPrivate@@XZ @ 127 NONAME ; class QDeclarativeAnchorsPrivate * QDeclarativeAnchors::d_func(void)
- ??1QPacket@@UAE@XZ @ 128 NONAME ; QPacket::~QPacket(void)
- ?top@QDeclarativeScaleGrid@@QBEHXZ @ 129 NONAME ; int QDeclarativeScaleGrid::top(void) const
+ ?d_func@QDeclarativeAnchors@@AAEPAVQDeclarativeAnchorsPrivate@@XZ @ 127 NONAME ABSENT ; class QDeclarativeAnchorsPrivate * QDeclarativeAnchors::d_func(void)
+ ??1QPacket@@UAE@XZ @ 128 NONAME ABSENT ; QPacket::~QPacket(void)
+ ?top@QDeclarativeScaleGrid@@QBEHXZ @ 129 NONAME ABSENT ; int QDeclarativeScaleGrid::top(void) const
?setExpression@QDeclarativeExpression@@QAEXABVQString@@@Z @ 130 NONAME ; void QDeclarativeExpression::setExpression(class QString const &)
- ??1QDeclarativeDebugEngineReference@@QAE@XZ @ 131 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(void)
+ ??1QDeclarativeDebugEngineReference@@QAE@XZ @ 131 NONAME ABSENT ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(void)
??0QDeclarativeStateOperation@@QAE@PAVQObject@@@Z @ 132 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObject *)
?transform_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 133 NONAME ; void QDeclarativeItemPrivate::transform_clear(class QDeclarativeListProperty<class QGraphicsTransform> *)
- ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 134 NONAME ; struct QMetaObject const QDeclarativeValueType::staticMetaObject
- ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 135 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const
+ ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 134 NONAME ABSENT ; struct QMetaObject const QDeclarativeValueType::staticMetaObject
+ ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 135 NONAME ABSENT ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const
?focusChanged@QDeclarativeItem@@IAEX_N@Z @ 136 NONAME ; void QDeclarativeItem::focusChanged(bool)
- ?getStaticMetaObject@QDeclarativeBinding@@SAABUQMetaObject@@XZ @ 137 NONAME ; struct QMetaObject const & QDeclarativeBinding::getStaticMetaObject(void)
- ?copy@QDeclarativeMetaType@@SA_NHPAXPBX@Z @ 138 NONAME ; bool QDeclarativeMetaType::copy(int, void *, void const *)
- ?qt_metacall@QDeclarativeDebugEnginesQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 139 NONAME ; int QDeclarativeDebugEnginesQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 140 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *)
- ?setEnumOrFlag@QMetaPropertyBuilder@@QAEX_N@Z @ 141 NONAME ; void QMetaPropertyBuilder::setEnumOrFlag(bool)
- ?getStaticMetaObject@QDeclarativeRectangle@@SAABUQMetaObject@@XZ @ 142 NONAME ; struct QMetaObject const & QDeclarativeRectangle::getStaticMetaObject(void)
+ ?getStaticMetaObject@QDeclarativeBinding@@SAABUQMetaObject@@XZ @ 137 NONAME ABSENT ; struct QMetaObject const & QDeclarativeBinding::getStaticMetaObject(void)
+ ?copy@QDeclarativeMetaType@@SA_NHPAXPBX@Z @ 138 NONAME ABSENT ; bool QDeclarativeMetaType::copy(int, void *, void const *)
+ ?qt_metacall@QDeclarativeDebugEnginesQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 139 NONAME ABSENT ; int QDeclarativeDebugEnginesQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 140 NONAME ABSENT ; class QString QDeclarativeDebugWatch::tr(char const *, char const *)
+ ?setEnumOrFlag@QMetaPropertyBuilder@@QAEX_N@Z @ 141 NONAME ABSENT ; void QMetaPropertyBuilder::setEnumOrFlag(bool)
+ ?getStaticMetaObject@QDeclarativeRectangle@@SAABUQMetaObject@@XZ @ 142 NONAME ABSENT ; struct QMetaObject const & QDeclarativeRectangle::getStaticMetaObject(void)
?isValid@QDeclarativeProperty@@QBE_NXZ @ 143 NONAME ; bool QDeclarativeProperty::isValid(void) const
- ?isConnected@QDeclarativeDebugClient@@QBE_NXZ @ 144 NONAME ; bool QDeclarativeDebugClient::isConnected(void) const
- ?enabled@QDeclarativeBinding@@QBE_NXZ @ 145 NONAME ; bool QDeclarativeBinding::enabled(void) const
+ ?isConnected@QDeclarativeDebugClient@@QBE_NXZ @ 144 NONAME ABSENT ; bool QDeclarativeDebugClient::isConnected(void) const
+ ?enabled@QDeclarativeBinding@@QBE_NXZ @ 145 NONAME ABSENT ; bool QDeclarativeBinding::enabled(void) const
?setSource@QDeclarativeView@@QAEXABVQUrl@@@Z @ 146 NONAME ; void QDeclarativeView::setSource(class QUrl const &)
- ??_EQDeclarativeDebugService@@UAE@I@Z @ 147 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(unsigned int)
- ??0QDeclarativeDomDynamicProperty@@QAE@ABV0@@Z @ 148 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(class QDeclarativeDomDynamicProperty const &)
- ?className@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 149 NONAME ; class QString QDeclarativeDebugObjectReference::className(void) const
- ?indexOfSlot@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 150 NONAME ; int QMetaObjectBuilder::indexOfSlot(class QByteArray const &)
- ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 151 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *, int)
+ ??_EQDeclarativeDebugService@@UAE@I@Z @ 147 NONAME ABSENT ; QDeclarativeDebugService::~QDeclarativeDebugService(unsigned int)
+ ??0QDeclarativeDomDynamicProperty@@QAE@ABV0@@Z @ 148 NONAME ABSENT ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(class QDeclarativeDomDynamicProperty const &)
+ ?className@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 149 NONAME ABSENT ; class QString QDeclarativeDebugObjectReference::className(void) const
+ ?indexOfSlot@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 150 NONAME ABSENT ; int QMetaObjectBuilder::indexOfSlot(class QByteArray const &)
+ ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 151 NONAME ABSENT ; class QString QDeclarativeDebugConnection::tr(char const *, char const *, int)
?progressChanged@QDeclarativeComponent@@IAEXM@Z @ 152 NONAME ; void QDeclarativeComponent::progressChanged(float)
?hasError@QDeclarativeExpression@@QBE_NXZ @ 153 NONAME ; bool QDeclarativeExpression::hasError(void) const
?error@QDeclarativePixmap@@QBE?AVQString@@XZ @ 154 NONAME ; class QString QDeclarativePixmap::error(void) const
- ?property@QMetaObjectBuilder@@QBE?AVQMetaPropertyBuilder@@H@Z @ 155 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::property(int) const
- ?index@QDeclarativeType@@QBEHXZ @ 156 NONAME ; int QDeclarativeType::index(void) const
- ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 157 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *)
- ??0QDeclarativeScaleGrid@@QAE@PAVQObject@@@Z @ 158 NONAME ; QDeclarativeScaleGrid::QDeclarativeScaleGrid(class QObject *)
- ?engines@QDeclarativeDebugEnginesQuery@@QBE?AV?$QList@VQDeclarativeDebugEngineReference@@@@XZ @ 159 NONAME ; class QList<class QDeclarativeDebugEngineReference> QDeclarativeDebugEnginesQuery::engines(void) const
- ?qt_metacall@QDeclarativeDebugPropertyWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 160 NONAME ; int QDeclarativeDebugPropertyWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?metaObject@QDeclarativeAnchors@@UBEPBUQMetaObject@@XZ @ 161 NONAME ; struct QMetaObject const * QDeclarativeAnchors::metaObject(void) const
+ ?property@QMetaObjectBuilder@@QBE?AVQMetaPropertyBuilder@@H@Z @ 155 NONAME ABSENT ; class QMetaPropertyBuilder QMetaObjectBuilder::property(int) const
+ ?index@QDeclarativeType@@QBEHXZ @ 156 NONAME ABSENT ; int QDeclarativeType::index(void) const
+ ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 157 NONAME ABSENT ; class QString QDeclarativeRectangle::tr(char const *, char const *)
+ ??0QDeclarativeScaleGrid@@QAE@PAVQObject@@@Z @ 158 NONAME ABSENT ; QDeclarativeScaleGrid::QDeclarativeScaleGrid(class QObject *)
+ ?engines@QDeclarativeDebugEnginesQuery@@QBE?AV?$QList@VQDeclarativeDebugEngineReference@@@@XZ @ 159 NONAME ABSENT ; class QList<class QDeclarativeDebugEngineReference> QDeclarativeDebugEnginesQuery::engines(void) const
+ ?qt_metacall@QDeclarativeDebugPropertyWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 160 NONAME ABSENT ; int QDeclarativeDebugPropertyWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?metaObject@QDeclarativeAnchors@@UBEPBUQMetaObject@@XZ @ 161 NONAME ABSENT ; struct QMetaObject const * QDeclarativeAnchors::metaObject(void) const
??BQDeclarativePixmap@@QBEABVQPixmap@@XZ @ 162 NONAME ; QDeclarativePixmap::operator class QPixmap const &(void) const
?sceneResized@QDeclarativeView@@IAEXVQSize@@@Z @ 163 NONAME ; void QDeclarativeView::sceneResized(class QSize)
?subFocusItemChange@QDeclarativeItemPrivate@@UAEXXZ @ 164 NONAME ; void QDeclarativeItemPrivate::subFocusItemChange(void)
- ?hasNotifySignal@QDeclarativeDebugPropertyReference@@QBE_NXZ @ 165 NONAME ; bool QDeclarativeDebugPropertyReference::hasNotifySignal(void) const
- ?addSlot@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 166 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSlot(class QByteArray const &)
+ ?hasNotifySignal@QDeclarativeDebugPropertyReference@@QBE_NXZ @ 165 NONAME ABSENT ; bool QDeclarativeDebugPropertyReference::hasNotifySignal(void) const
+ ?addSlot@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 166 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addSlot(class QByteArray const &)
?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 167 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *)
- ?propertyCreated@QDeclarativeOpenMetaObjectType@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 168 NONAME ; void QDeclarativeOpenMetaObjectType::propertyCreated(int, class QMetaPropertyBuilder &)
+ ?propertyCreated@QDeclarativeOpenMetaObjectType@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 168 NONAME ABSENT ; void QDeclarativeOpenMetaObjectType::propertyCreated(int, class QMetaPropertyBuilder &)
??1QDeclarativeItemPrivate@@UAE@XZ @ 169 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(void)
?clear@QDeclarativePropertyMap@@QAEXABVQString@@@Z @ 170 NONAME ; void QDeclarativePropertyMap::clear(class QString const &)
- ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 171 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *, int)
+ ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 171 NONAME ABSENT ; class QString QDeclarativeDebugClient::tr(char const *, char const *, int)
?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 172 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeEngine *)
?insert@QDeclarativePropertyMap@@QAEXABVQString@@ABVQVariant@@@Z @ 173 NONAME ; void QDeclarativePropertyMap::insert(class QString const &, class QVariant const &)
??1QDeclarativeContext@@UAE@XZ @ 174 NONAME ; QDeclarativeContext::~QDeclarativeContext(void)
?operationCount@QDeclarativeState@@QBEHXZ @ 175 NONAME ; int QDeclarativeState::operationCount(void) const
?getStaticMetaObject@QDeclarativeItem@@SAABUQMetaObject@@XZ @ 176 NONAME ; struct QMetaObject const & QDeclarativeItem::getStaticMetaObject(void)
- ?qtAnimationStateChanged@QDeclarativeBehavior@@AAEXW4State@QAbstractAnimation@@0@Z @ 177 NONAME ; void QDeclarativeBehavior::qtAnimationStateChanged(enum QAbstractAnimation::State, enum QAbstractAnimation::State)
- ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 178 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *, int)
+ ?qtAnimationStateChanged@QDeclarativeBehavior@@AAEXW4State@QAbstractAnimation@@0@Z @ 177 NONAME ABSENT ; void QDeclarativeBehavior::qtAnimationStateChanged(enum QAbstractAnimation::State, enum QAbstractAnimation::State)
+ ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 178 NONAME ABSENT ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *, int)
?status@QDeclarativeComponent@@QBE?AW4Status@1@XZ @ 179 NONAME ; enum QDeclarativeComponent::Status QDeclarativeComponent::status(void) const
?boundingRect@QDeclarativeItem@@UBE?AVQRectF@@XZ @ 180 NONAME ; class QRectF QDeclarativeItem::boundingRect(void) const
- ?availableInVersion@QDeclarativeType@@QBE_NHH@Z @ 181 NONAME ; bool QDeclarativeType::availableInVersion(int, int) const
- ?getStaticMetaObject@QDeclarativeDebugWatch@@SAABUQMetaObject@@XZ @ 182 NONAME ; struct QMetaObject const & QDeclarativeDebugWatch::getStaticMetaObject(void)
- ??_EQDeclarativeRectangle@@UAE@I@Z @ 183 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(unsigned int)
- ?setTopMargin@QDeclarativeAnchors@@QAEXM@Z @ 184 NONAME ; void QDeclarativeAnchors::setTopMargin(float)
- ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 185 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &)
- ??1QDeclarativeValueTypeFactory@@QAE@XZ @ 186 NONAME ; QDeclarativeValueTypeFactory::~QDeclarativeValueTypeFactory(void)
- ?metaObject@QDeclarativeDebugObjectExpressionWatch@@UBEPBUQMetaObject@@XZ @ 187 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectExpressionWatch::metaObject(void) const
+ ?availableInVersion@QDeclarativeType@@QBE_NHH@Z @ 181 NONAME ABSENT ; bool QDeclarativeType::availableInVersion(int, int) const
+ ?getStaticMetaObject@QDeclarativeDebugWatch@@SAABUQMetaObject@@XZ @ 182 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugWatch::getStaticMetaObject(void)
+ ??_EQDeclarativeRectangle@@UAE@I@Z @ 183 NONAME ABSENT ; QDeclarativeRectangle::~QDeclarativeRectangle(unsigned int)
+ ?setTopMargin@QDeclarativeAnchors@@QAEXM@Z @ 184 NONAME ABSENT ; void QDeclarativeAnchors::setTopMargin(float)
+ ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 185 NONAME ABSENT ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty &)
+ ??1QDeclarativeValueTypeFactory@@QAE@XZ @ 186 NONAME ABSENT ; QDeclarativeValueTypeFactory::~QDeclarativeValueTypeFactory(void)
+ ?metaObject@QDeclarativeDebugObjectExpressionWatch@@UBEPBUQMetaObject@@XZ @ 187 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugObjectExpressionWatch::metaObject(void) const
??0QDeclarativeComponent@@QAE@PAVQObject@@@Z @ 188 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QObject *)
?qt_metacast@QDeclarativeItem@@UAEPAXPBD@Z @ 189 NONAME ; void * QDeclarativeItem::qt_metacast(char const *)
?changes@QDeclarativeState@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeStateOperation@@@@XZ @ 190 NONAME ; class QDeclarativeListProperty<class QDeclarativeStateOperation> QDeclarativeState::changes(void)
?resizeEvent@QDeclarativeView@@MAEXPAVQResizeEvent@@@Z @ 191 NONAME ; void QDeclarativeView::resizeEvent(class QResizeEvent *)
- ?d_func@QDeclarativeBinding@@ABEPBVQDeclarativeBindingPrivate@@XZ @ 192 NONAME ; class QDeclarativeBindingPrivate const * QDeclarativeBinding::d_func(void) const
- ?wrapMode@QDeclarativeText@@QBE?AW4WrapMode@1@XZ @ 193 NONAME ; enum QDeclarativeText::WrapMode QDeclarativeText::wrapMode(void) const
- ?centerIn@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 194 NONAME ; class QGraphicsObject * QDeclarativeAnchors::centerIn(void) const
- ??0QDeclarativeType@@AAE@HABURegisterType@QDeclarativePrivate@@@Z @ 195 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterType const &)
+ ?d_func@QDeclarativeBinding@@ABEPBVQDeclarativeBindingPrivate@@XZ @ 192 NONAME ABSENT ; class QDeclarativeBindingPrivate const * QDeclarativeBinding::d_func(void) const
+ ?wrapMode@QDeclarativeText@@QBE?AW4WrapMode@1@XZ @ 193 NONAME ABSENT ; enum QDeclarativeText::WrapMode QDeclarativeText::wrapMode(void) const
+ ?centerIn@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 194 NONAME ABSENT ; class QGraphicsObject * QDeclarativeAnchors::centerIn(void) const
+ ??0QDeclarativeType@@AAE@HABURegisterType@QDeclarativePrivate@@@Z @ 195 NONAME ABSENT ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterType const &)
?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 196 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *, int)
- ??0QMetaObjectBuilder@@QAE@PBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 197 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>)
+ ??0QMetaObjectBuilder@@QAE@PBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 197 NONAME ABSENT ; QMetaObjectBuilder::QMetaObjectBuilder(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>)
?quit@QDeclarativeEngine@@IAEXXZ @ 198 NONAME ; void QDeclarativeEngine::quit(void)
?qmlregister@QDeclarativePrivate@@YAHW4RegistrationType@1@PAX@Z @ 199 NONAME ; int QDeclarativePrivate::qmlregister(enum QDeclarativePrivate::RegistrationType, void *)
- ??0QMetaEnumBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 200 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(class QMetaObjectBuilder const *, int)
- ?setBottom@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 201 NONAME ; void QDeclarativeAnchors::setBottom(class QDeclarativeAnchorLine const &)
+ ??0QMetaEnumBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 200 NONAME ABSENT ; QMetaEnumBuilder::QMetaEnumBuilder(class QMetaObjectBuilder const *, int)
+ ?setBottom@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 201 NONAME ABSENT ; void QDeclarativeAnchors::setBottom(class QDeclarativeAnchorLine const &)
??0QDeclarativeCustomParser@@QAE@XZ @ 202 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(void)
- ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 203 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(class QByteArray const &) const
- ?styleColor@QDeclarativeText@@QBE?AVQColor@@XZ @ 204 NONAME ; class QColor QDeclarativeText::styleColor(void) const
- ?centerInChanged@QDeclarativeAnchors@@IAEXXZ @ 205 NONAME ; void QDeclarativeAnchors::centerInChanged(void)
- ?colorChanged@QDeclarativeRectangle@@IAEXXZ @ 206 NONAME ; void QDeclarativeRectangle::colorChanged(void)
- ??0QDeclarativePropertyPrivate@@QAE@ABV0@@Z @ 207 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(class QDeclarativePropertyPrivate const &)
+ ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 203 NONAME ABSENT ; class QVariant QDeclarativeOpenMetaObject::value(class QByteArray const &) const
+ ?styleColor@QDeclarativeText@@QBE?AVQColor@@XZ @ 204 NONAME ABSENT ; class QColor QDeclarativeText::styleColor(void) const
+ ?centerInChanged@QDeclarativeAnchors@@IAEXXZ @ 205 NONAME ABSENT ; void QDeclarativeAnchors::centerInChanged(void)
+ ?colorChanged@QDeclarativeRectangle@@IAEXXZ @ 206 NONAME ABSENT ; void QDeclarativeRectangle::colorChanged(void)
+ ??0QDeclarativePropertyPrivate@@QAE@ABV0@@Z @ 207 NONAME ABSENT ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(class QDeclarativePropertyPrivate const &)
?loadUrl@QDeclarativeComponent@@QAEXABVQUrl@@@Z @ 208 NONAME ; void QDeclarativeComponent::loadUrl(class QUrl const &)
?beginCreate@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 209 NONAME ; class QObject * QDeclarativeComponent::beginCreate(class QDeclarativeContext *)
- ?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 210 NONAME ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &)
+ ?setRight@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 210 NONAME ABSENT ; void QDeclarativeAnchors::setRight(class QDeclarativeAnchorLine const &)
?needsNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 211 NONAME ; bool QDeclarativeProperty::needsNotifySignal(void) const
- ?fill@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 212 NONAME ; class QGraphicsObject * QDeclarativeAnchors::fill(void) const
+ ?fill@QDeclarativeAnchors@@QBEPAVQGraphicsObject@@XZ @ 212 NONAME ABSENT ; class QGraphicsObject * QDeclarativeAnchors::fill(void) const
?top@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 213 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::top(void) const
?clear@QDeclarativeListReference@@QBE_NXZ @ 214 NONAME ; bool QDeclarativeListReference::clear(void) const
?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 215 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *)
- ?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 216 NONAME ; int QDeclarativeDebugFileReference::columnNumber(void) const
+ ?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 216 NONAME ABSENT ; int QDeclarativeDebugFileReference::columnNumber(void) const
??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *)
?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 218 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *)
- ?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 219 NONAME ; bool QDeclarativeDomProperty::isValid(void) const
- ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 220 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *)
+ ?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 219 NONAME ABSENT ; bool QDeclarativeDomProperty::isValid(void) const
+ ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 220 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *)
?statusChanged@QDeclarativeView@@IAEXW4Status@1@@Z @ 221 NONAME ; void QDeclarativeView::statusChanged(enum QDeclarativeView::Status)
- ?componentComplete@QDeclarativeText@@UAEXXZ @ 222 NONAME ; void QDeclarativeText::componentComplete(void)
+ ?componentComplete@QDeclarativeText@@UAEXXZ @ 222 NONAME ABSENT ; void QDeclarativeText::componentComplete(void)
?canCount@QDeclarativeListReference@@QBE_NXZ @ 223 NONAME ; bool QDeclarativeListReference::canCount(void) const
- ??1QListModelInterface@@UAE@XZ @ 224 NONAME ; QListModelInterface::~QListModelInterface(void)
- ??0QDeclarativeAnchors@@QAE@PAVQObject@@@Z @ 225 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QObject *)
+ ??1QListModelInterface@@UAE@XZ @ 224 NONAME ABSENT ; QListModelInterface::~QListModelInterface(void)
+ ??0QDeclarativeAnchors@@QAE@PAVQObject@@@Z @ 225 NONAME ABSENT ; QDeclarativeAnchors::QDeclarativeAnchors(class QObject *)
?resources_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 226 NONAME ; class QObject * QDeclarativeItemPrivate::resources_at(class QDeclarativeListProperty<class QObject> *, int)
- ?isExtendedType@QDeclarativeType@@QBE_NXZ @ 227 NONAME ; bool QDeclarativeType::isExtendedType(void) const
- ?top@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 228 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::top(void) const
+ ?isExtendedType@QDeclarativeType@@QBE_NXZ @ 227 NONAME ABSENT ; bool QDeclarativeType::isExtendedType(void) const
+ ?top@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 228 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::top(void) const
??0QDeclarativePropertyMap@@QAE@PAVQObject@@@Z @ 229 NONAME ; QDeclarativePropertyMap::QDeclarativePropertyMap(class QObject *)
??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAXPAVQDeclarativeRefCount@@PAVQObject@@ABVQString@@HAAVQDeclarativeExpressionPrivate@@@Z @ 230 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, void *, class QDeclarativeRefCount *, class QObject *, class QString const &, int, class QDeclarativeExpressionPrivate &)
- ?setColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 231 NONAME ; void QDeclarativeText::setColor(class QColor const &)
- ?hasStdCppSet@QMetaPropertyBuilder@@QBE_NXZ @ 232 NONAME ; bool QMetaPropertyBuilder::hasStdCppSet(void) const
- ??0QDeclarativeDebugFileReference@@QAE@ABV0@@Z @ 233 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(class QDeclarativeDebugFileReference const &)
- ?toValueInterceptor@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueInterceptor@@XZ @ 234 NONAME ; class QDeclarativeDomValueValueInterceptor QDeclarativeDomValue::toValueInterceptor(void) const
- ??0QDeclarativeDebugEngineReference@@QAE@H@Z @ 235 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(int)
+ ?setColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 231 NONAME ABSENT ; void QDeclarativeText::setColor(class QColor const &)
+ ?hasStdCppSet@QMetaPropertyBuilder@@QBE_NXZ @ 232 NONAME ABSENT ; bool QMetaPropertyBuilder::hasStdCppSet(void) const
+ ??0QDeclarativeDebugFileReference@@QAE@ABV0@@Z @ 233 NONAME ABSENT ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(class QDeclarativeDebugFileReference const &)
+ ?toValueInterceptor@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueInterceptor@@XZ @ 234 NONAME ABSENT ; class QDeclarativeDomValueValueInterceptor QDeclarativeDomValue::toValueInterceptor(void) const
+ ??0QDeclarativeDebugEngineReference@@QAE@H@Z @ 235 NONAME ABSENT ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(int)
?tr@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 236 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *, int)
?state@QDeclarativeItemPrivate@@QBE?AVQString@@XZ @ 237 NONAME ; class QString QDeclarativeItemPrivate::state(void) const
??1QDeclarativePropertyValueInterceptor@@UAE@XZ @ 238 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(void)
?getStaticMetaObject@QDeclarativePropertyMap@@SAABUQMetaObject@@XZ @ 239 NONAME ; struct QMetaObject const & QDeclarativePropertyMap::getStaticMetaObject(void)
- ??1QDeclarativeScaleGrid@@UAE@XZ @ 240 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(void)
- ?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 241 NONAME ; class QString QDeclarativeDebugObjectReference::idString(void) const
- ?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 242 NONAME ; class QByteArray QDeclarativeDomObject::customTypeData(void) const
+ ??1QDeclarativeScaleGrid@@UAE@XZ @ 240 NONAME ABSENT ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(void)
+ ?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 241 NONAME ABSENT ; class QString QDeclarativeDebugObjectReference::idString(void) const
+ ?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 242 NONAME ABSENT ; class QByteArray QDeclarativeDomObject::customTypeData(void) const
?stop@QDeclarativeTransition@@QAEXXZ @ 243 NONAME ; void QDeclarativeTransition::stop(void)
- ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 244 NONAME ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const
- ?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 245 NONAME ; float QDeclarativeAnchors::verticalCenterOffset(void) const
- ?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 246 NONAME ; struct QMetaObject const * QDeclarativeText::metaObject(void) const
+ ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 244 NONAME ABSENT ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const
+ ?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 245 NONAME ABSENT ; float QDeclarativeAnchors::verticalCenterOffset(void) const
+ ?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 246 NONAME ABSENT ; struct QMetaObject const * QDeclarativeText::metaObject(void) const
??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 247 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QObject *)
- ?createProperty@QDeclarativeOpenMetaObjectType@@QAEHABVQByteArray@@@Z @ 248 NONAME ; int QDeclarativeOpenMetaObjectType::createProperty(class QByteArray const &)
+ ?createProperty@QDeclarativeOpenMetaObjectType@@QAEHABVQByteArray@@@Z @ 248 NONAME ABSENT ; int QDeclarativeOpenMetaObjectType::createProperty(class QByteArray const &)
??0QDeclarativeContext@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 249 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, class QObject *)
??6QDeclarativeInfo@@QAEAAV0@M@Z @ 250 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(float)
- ??4QDeclarativeDomValueLiteral@@QAEAAV0@ABV0@@Z @ 251 NONAME ; class QDeclarativeDomValueLiteral & QDeclarativeDomValueLiteral::operator=(class QDeclarativeDomValueLiteral const &)
+ ??4QDeclarativeDomValueLiteral@@QAEAAV0@ABV0@@Z @ 251 NONAME ABSENT ; class QDeclarativeDomValueLiteral & QDeclarativeDomValueLiteral::operator=(class QDeclarativeDomValueLiteral const &)
?setScript@QDeclarativeScriptString@@QAEXABVQString@@@Z @ 252 NONAME ; void QDeclarativeScriptString::setScript(class QString const &)
?requestImage@QDeclarativeImageProvider@@UAE?AVQImage@@ABVQString@@PAVQSize@@ABV4@@Z @ 253 NONAME ; class QImage QDeclarativeImageProvider::requestImage(class QString const &, class QSize *, class QSize const &)
- ?qt_metacast@QPacketProtocol@@UAEPAXPBD@Z @ 254 NONAME ; void * QPacketProtocol::qt_metacast(char const *)
- ?addMetaObject@QMetaObjectBuilder@@QAEXPBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 255 NONAME ; void QMetaObjectBuilder::addMetaObject(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>)
- ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 256 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *, int)
- ?qt_metacast@QDeclarativeText@@UAEPAXPBD@Z @ 257 NONAME ; void * QDeclarativeText::qt_metacast(char const *)
+ ?qt_metacast@QPacketProtocol@@UAEPAXPBD@Z @ 254 NONAME ABSENT ; void * QPacketProtocol::qt_metacast(char const *)
+ ?addMetaObject@QMetaObjectBuilder@@QAEXPBUQMetaObject@@V?$QFlags@W4AddMember@QMetaObjectBuilder@@@@@Z @ 255 NONAME ABSENT ; void QMetaObjectBuilder::addMetaObject(struct QMetaObject const *, class QFlags<enum QMetaObjectBuilder::AddMember>)
+ ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 256 NONAME ABSENT ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *, int)
+ ?qt_metacast@QDeclarativeText@@UAEPAXPBD@Z @ 257 NONAME ABSENT ; void * QDeclarativeText::qt_metacast(char const *)
?anchors@QDeclarativeItemPrivate@@QAEPAVQDeclarativeAnchors@@XZ @ 258 NONAME ; class QDeclarativeAnchors * QDeclarativeItemPrivate::anchors(void)
- ??0QListModelInterface@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 259 NONAME ; QListModelInterface::QListModelInterface(class QObjectPrivate &, class QObject *)
- ?valueTypeName@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 260 NONAME ; class QString QDeclarativeDebugPropertyReference::valueTypeName(void) const
- ?setStyleColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 261 NONAME ; void QDeclarativeText::setStyleColor(class QColor const &)
- ?create@QDeclarativeType@@QBEPAVQObject@@XZ @ 262 NONAME ; class QObject * QDeclarativeType::create(void) const
- ?metaObject@QDeclarativeDebugExpressionQuery@@UBEPBUQMetaObject@@XZ @ 263 NONAME ; struct QMetaObject const * QDeclarativeDebugExpressionQuery::metaObject(void) const
+ ??0QListModelInterface@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 259 NONAME ABSENT ; QListModelInterface::QListModelInterface(class QObjectPrivate &, class QObject *)
+ ?valueTypeName@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 260 NONAME ABSENT ; class QString QDeclarativeDebugPropertyReference::valueTypeName(void) const
+ ?setStyleColor@QDeclarativeText@@QAEXABVQColor@@@Z @ 261 NONAME ABSENT ; void QDeclarativeText::setStyleColor(class QColor const &)
+ ?create@QDeclarativeType@@QBEPAVQObject@@XZ @ 262 NONAME ABSENT ; class QObject * QDeclarativeType::create(void) const
+ ?metaObject@QDeclarativeDebugExpressionQuery@@UBEPBUQMetaObject@@XZ @ 263 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugExpressionQuery::metaObject(void) const
?engine@QDeclarativeView@@QBEPAVQDeclarativeEngine@@XZ @ 264 NONAME ; class QDeclarativeEngine * QDeclarativeView::engine(void) const
- ?readyRead@QPacketProtocol@@IAEXXZ @ 265 NONAME ; void QPacketProtocol::readyRead(void)
- ?qt_metacall@QDeclarativeValueType@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 266 NONAME ; int QDeclarativeValueType::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?propertyType@QDeclarativePropertyPrivate@@QBEHXZ @ 267 NONAME ; int QDeclarativePropertyPrivate::propertyType(void) const
+ ?readyRead@QPacketProtocol@@IAEXXZ @ 265 NONAME ABSENT ; void QPacketProtocol::readyRead(void)
+ ?qt_metacall@QDeclarativeValueType@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 266 NONAME ABSENT ; int QDeclarativeValueType::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?propertyType@QDeclarativePropertyPrivate@@QBEHXZ @ 267 NONAME ABSENT ; int QDeclarativePropertyPrivate::propertyType(void) const
?inputMethodQuery@QDeclarativeItem@@MBE?AVQVariant@@W4InputMethodQuery@Qt@@@Z @ 268 NONAME ; class QVariant QDeclarativeItem::inputMethodQuery(enum Qt::InputMethodQuery) const
?sizeHint@QDeclarativeView@@UBE?AVQSize@@XZ @ 269 NONAME ; class QSize QDeclarativeView::sizeHint(void) const
?flags@QDeclarativeCustomParser@@QBE?AV?$QFlags@W4Flag@QDeclarativeCustomParser@@@@XZ @ 270 NONAME ; class QFlags<enum QDeclarativeCustomParser::Flag> QDeclarativeCustomParser::flags(void) const
- ?staticMetaObject@QDeclarativeDebugObjectExpressionWatch@@2UQMetaObject@@B @ 271 NONAME ; struct QMetaObject const QDeclarativeDebugObjectExpressionWatch::staticMetaObject
- ??0QDeclarativeDebugPropertyReference@@QAE@ABV0@@Z @ 272 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(class QDeclarativeDebugPropertyReference const &)
+ ?staticMetaObject@QDeclarativeDebugObjectExpressionWatch@@2UQMetaObject@@B @ 271 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugObjectExpressionWatch::staticMetaObject
+ ??0QDeclarativeDebugPropertyReference@@QAE@ABV0@@Z @ 272 NONAME ABSENT ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(class QDeclarativeDebugPropertyReference const &)
??_EQDeclarativeCustomParser@@UAE@I@Z @ 273 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(unsigned int)
??6QDeclarativeInfo@@QAEAAV0@ABVQStringRef@@@Z @ 274 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QStringRef const &)
- ?values@QDeclarativeDomList@@QBE?AV?$QList@VQDeclarativeDomValue@@@@XZ @ 275 NONAME ; class QList<class QDeclarativeDomValue> QDeclarativeDomList::values(void) const
+ ?values@QDeclarativeDomList@@QBE?AV?$QList@VQDeclarativeDomValue@@@@XZ @ 275 NONAME ABSENT ; class QList<class QDeclarativeDomValue> QDeclarativeDomList::values(void) const
?errorString@QDeclarativeComponent@@QBE?AVQString@@XZ @ 276 NONAME ; class QString QDeclarativeComponent::errorString(void) const
- ?metaObject@QDeclarativeEngineDebug@@UBEPBUQMetaObject@@XZ @ 277 NONAME ; struct QMetaObject const * QDeclarativeEngineDebug::metaObject(void) const
- ??1QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 278 NONAME ; QDeclarativeDomValueValueInterceptor::~QDeclarativeDomValueValueInterceptor(void)
- ?flatten@QDeclarativeListModel@@AAE_NXZ @ 279 NONAME ; bool QDeclarativeListModel::flatten(void)
- ?propertyCount@QMetaObjectBuilder@@QBEHXZ @ 280 NONAME ; int QMetaObjectBuilder::propertyCount(void) const
- ?method@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 281 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::method(int) const
- ?textFormat@QDeclarativeText@@QBE?AW4TextFormat@1@XZ @ 282 NONAME ; enum QDeclarativeText::TextFormat QDeclarativeText::textFormat(void) const
- ?getStaticMetaObject@QDeclarativeDebugObjectExpressionWatch@@SAABUQMetaObject@@XZ @ 283 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectExpressionWatch::getStaticMetaObject(void)
- ?write@QDeclarativeBehavior@@UAEXABVQVariant@@@Z @ 284 NONAME ; void QDeclarativeBehavior::write(class QVariant const &)
+ ?metaObject@QDeclarativeEngineDebug@@UBEPBUQMetaObject@@XZ @ 277 NONAME ABSENT ; struct QMetaObject const * QDeclarativeEngineDebug::metaObject(void) const
+ ??1QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 278 NONAME ABSENT ; QDeclarativeDomValueValueInterceptor::~QDeclarativeDomValueValueInterceptor(void)
+ ?flatten@QDeclarativeListModel@@AAE_NXZ @ 279 NONAME ABSENT ; bool QDeclarativeListModel::flatten(void)
+ ?propertyCount@QMetaObjectBuilder@@QBEHXZ @ 280 NONAME ABSENT ; int QMetaObjectBuilder::propertyCount(void) const
+ ?method@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 281 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::method(int) const
+ ?textFormat@QDeclarativeText@@QBE?AW4TextFormat@1@XZ @ 282 NONAME ABSENT ; enum QDeclarativeText::TextFormat QDeclarativeText::textFormat(void) const
+ ?getStaticMetaObject@QDeclarativeDebugObjectExpressionWatch@@SAABUQMetaObject@@XZ @ 283 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugObjectExpressionWatch::getStaticMetaObject(void)
+ ?write@QDeclarativeBehavior@@UAEXABVQVariant@@@Z @ 284 NONAME ABSENT ; void QDeclarativeBehavior::write(class QVariant const &)
?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 285 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &)
- ?resetTop@QDeclarativeAnchors@@QAEXXZ @ 286 NONAME ; void QDeclarativeAnchors::resetTop(void)
- ?queryId@QDeclarativeDebugWatch@@QBEHXZ @ 287 NONAME ; int QDeclarativeDebugWatch::queryId(void) const
+ ?resetTop@QDeclarativeAnchors@@QAEXXZ @ 286 NONAME ABSENT ; void QDeclarativeAnchors::resetTop(void)
+ ?queryId@QDeclarativeDebugWatch@@QBEHXZ @ 287 NONAME ABSENT ; int QDeclarativeDebugWatch::queryId(void) const
?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 288 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *, int)
?staticMetaObject@QDeclarativeComponent@@2UQMetaObject@@B @ 289 NONAME ; struct QMetaObject const QDeclarativeComponent::staticMetaObject
?setStateGroup@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@@Z @ 290 NONAME ; void QDeclarativeState::setStateGroup(class QDeclarativeStateGroup *)
- ?access@QMetaMethodBuilder@@QBE?AW4Access@QMetaMethod@@XZ @ 291 NONAME ; enum QMetaMethod::Access QMetaMethodBuilder::access(void) const
- ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 292 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *)
- ?attachedPropertiesType@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 293 NONAME ; struct QMetaObject const * QDeclarativeType::attachedPropertiesType(void) const
+ ?access@QMetaMethodBuilder@@QBE?AW4Access@QMetaMethod@@XZ @ 291 NONAME ABSENT ; enum QMetaMethod::Access QMetaMethodBuilder::access(void) const
+ ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 292 NONAME ABSENT ; class QString QDeclarativeDebugQuery::tr(char const *, char const *)
+ ?attachedPropertiesType@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 293 NONAME ABSENT ; struct QMetaObject const * QDeclarativeType::attachedPropertiesType(void) const
?setName@QDeclarativeState@@QAEXABVQString@@@Z @ 294 NONAME ; void QDeclarativeState::setName(class QString const &)
?setReversed@QDeclarativeTransition@@QAEX_N@Z @ 295 NONAME ; void QDeclarativeTransition::setReversed(bool)
- ?idForObject@QDeclarativeDebugService@@SAHPAVQObject@@@Z @ 296 NONAME ; int QDeclarativeDebugService::idForObject(class QObject *)
- ?qt_metacall@QDeclarativeDebugWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 297 NONAME ; int QDeclarativeDebugWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?idForObject@QDeclarativeDebugService@@SAHPAVQObject@@@Z @ 296 NONAME ABSENT ; int QDeclarativeDebugService::idForObject(class QObject *)
+ ?qt_metacall@QDeclarativeDebugWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 297 NONAME ABSENT ; int QDeclarativeDebugWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
?fromState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 298 NONAME ; class QString QDeclarativeTransition::fromState(void) const
??1QDeclarativeExpression@@UAE@XZ @ 299 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(void)
- ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 300 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &)
- ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 301 NONAME ; void QMetaObjectBuilder::removeMethod(int)
+ ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 300 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &)
+ ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 301 NONAME ABSENT ; void QMetaObjectBuilder::removeMethod(int)
?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const
- ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ; int QMetaObjectBuilder::methodCount(void) const
- ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ; class QFont QDeclarativeText::font(void) const
+ ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ABSENT ; int QMetaObjectBuilder::methodCount(void) const
+ ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ABSENT ; class QFont QDeclarativeText::font(void) const
?completeCreate@QDeclarativeComponent@@UAEXXZ @ 305 NONAME ; void QDeclarativeComponent::completeCreate(void)
- ??0QDeclarativeDomProperty@@QAE@XZ @ 306 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(void)
- ?initDefault@QDeclarativePropertyPrivate@@QAEXPAVQObject@@@Z @ 307 NONAME ; void QDeclarativePropertyPrivate::initDefault(class QObject *)
- ?count@QDeclarativeListModel@@UBEHXZ @ 308 NONAME ; int QDeclarativeListModel::count(void) const
+ ??0QDeclarativeDomProperty@@QAE@XZ @ 306 NONAME ABSENT ; QDeclarativeDomProperty::QDeclarativeDomProperty(void)
+ ?initDefault@QDeclarativePropertyPrivate@@QAEXPAVQObject@@@Z @ 307 NONAME ABSENT ; void QDeclarativePropertyPrivate::initDefault(class QObject *)
+ ?count@QDeclarativeListModel@@UBEHXZ @ 308 NONAME ABSENT ; int QDeclarativeListModel::count(void) const
?setSmooth@QDeclarativeItem@@QAEX_N@Z @ 309 NONAME ; void QDeclarativeItem::setSmooth(bool)
- ?value@QDeclarativeDebugPropertyReference@@QBE?AVQVariant@@XZ @ 310 NONAME ; class QVariant QDeclarativeDebugPropertyReference::value(void) const
+ ?value@QDeclarativeDebugPropertyReference@@QBE?AVQVariant@@XZ @ 310 NONAME ABSENT ; class QVariant QDeclarativeDebugPropertyReference::value(void) const
?resources@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 311 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::resources(void)
- ?clear@QPacketProtocol@@QAEXXZ @ 312 NONAME ; void QPacketProtocol::clear(void)
+ ?clear@QPacketProtocol@@QAEXXZ @ 312 NONAME ABSENT ; void QPacketProtocol::clear(void)
?setState@QDeclarativeItemPrivate@@QAEXABVQString@@@Z @ 313 NONAME ; void QDeclarativeItemPrivate::setState(class QString const &)
- ??4QDeclarativeDebugPropertyReference@@QAEAAV0@ABV0@@Z @ 314 NONAME ; class QDeclarativeDebugPropertyReference & QDeclarativeDebugPropertyReference::operator=(class QDeclarativeDebugPropertyReference const &)
+ ??4QDeclarativeDebugPropertyReference@@QAEAAV0@ABV0@@Z @ 314 NONAME ABSENT ; class QDeclarativeDebugPropertyReference & QDeclarativeDebugPropertyReference::operator=(class QDeclarativeDebugPropertyReference const &)
?metaObject@QDeclarativeView@@UBEPBUQMetaObject@@XZ @ 315 NONAME ; struct QMetaObject const * QDeclarativeView::metaObject(void) const
?listElementType@QDeclarativeListReference@@QBEPBUQMetaObject@@XZ @ 316 NONAME ; struct QMetaObject const * QDeclarativeListReference::listElementType(void) const
??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeContext@@@Z @ 317 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeContext *)
- ?setTarget@QDeclarativeBehavior@@UAEXABVQDeclarativeProperty@@@Z @ 318 NONAME ; void QDeclarativeBehavior::setTarget(class QDeclarativeProperty const &)
- ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 319 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *, int)
- ?parent@QDeclarativeOpenMetaObject@@IBEPAUQAbstractDynamicMetaObject@@XZ @ 320 NONAME ; struct QAbstractDynamicMetaObject * QDeclarativeOpenMetaObject::parent(void) const
- ??0QDeclarativeDebugClient@@QAE@ABVQString@@PAVQDeclarativeDebugConnection@@@Z @ 321 NONAME ; QDeclarativeDebugClient::QDeclarativeDebugClient(class QString const &, class QDeclarativeDebugConnection *)
+ ?setTarget@QDeclarativeBehavior@@UAEXABVQDeclarativeProperty@@@Z @ 318 NONAME ABSENT ; void QDeclarativeBehavior::setTarget(class QDeclarativeProperty const &)
+ ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 319 NONAME ABSENT ; class QString QDeclarativeValueType::tr(char const *, char const *, int)
+ ?parent@QDeclarativeOpenMetaObject@@IBEPAUQAbstractDynamicMetaObject@@XZ @ 320 NONAME ABSENT ; struct QAbstractDynamicMetaObject * QDeclarativeOpenMetaObject::parent(void) const
+ ??0QDeclarativeDebugClient@@QAE@ABVQString@@PAVQDeclarativeDebugConnection@@@Z @ 321 NONAME ABSENT ; QDeclarativeDebugClient::QDeclarativeDebugClient(class QString const &, class QDeclarativeDebugConnection *)
?qt_metacall@QDeclarativeStateOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 322 NONAME ; int QDeclarativeStateOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
?type@Variant@QDeclarativeParser@@QBE?AW4Type@12@XZ @ 323 NONAME ; enum QDeclarativeParser::Variant::Type QDeclarativeParser::Variant::type(void) const
??6QDeclarativeInfo@@QAEAAV0@_N@Z @ 324 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(bool)
- ?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 325 NONAME ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const
- ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectExpressionWatch@@ABVQDeclarativeDebugObjectReference@@ABVQString@@PAVQObject@@@Z @ 326 NONAME ; class QDeclarativeDebugObjectExpressionWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QString const &, class QObject *)
- ??_EQDeclarativeDebugConnection@@UAE@I@Z @ 327 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(unsigned int)
- ?qt_metacall@QDeclarativeDebugConnection@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 328 NONAME ; int QDeclarativeDebugConnection::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 329 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *, int)
+ ?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 325 NONAME ABSENT ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const
+ ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectExpressionWatch@@ABVQDeclarativeDebugObjectReference@@ABVQString@@PAVQObject@@@Z @ 326 NONAME ABSENT ; class QDeclarativeDebugObjectExpressionWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QString const &, class QObject *)
+ ??_EQDeclarativeDebugConnection@@UAE@I@Z @ 327 NONAME ABSENT ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(unsigned int)
+ ?qt_metacall@QDeclarativeDebugConnection@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 328 NONAME ABSENT ; int QDeclarativeDebugConnection::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 329 NONAME ABSENT ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *, int)
?errors@QDeclarativeComponent@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 330 NONAME ; class QList<class QDeclarativeError> QDeclarativeComponent::errors(void) const
??0QDeclarativeCustomParserNode@@QAE@ABV0@@Z @ 331 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(class QDeclarativeCustomParserNode const &)
??1QDeclarativeImageProvider@@UAE@XZ @ 332 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(void)
- ?sync@QDeclarativeListModel@@QAEXXZ @ 333 NONAME ; void QDeclarativeListModel::sync(void)
- ?objectForId@QDeclarativeDebugService@@SAPAVQObject@@H@Z @ 334 NONAME ; class QObject * QDeclarativeDebugService::objectForId(int)
+ ?sync@QDeclarativeListModel@@QAEXXZ @ 333 NONAME ABSENT ; void QDeclarativeListModel::sync(void)
+ ?objectForId@QDeclarativeDebugService@@SAPAVQObject@@H@Z @ 334 NONAME ABSENT ; class QObject * QDeclarativeDebugService::objectForId(int)
?hasFocus@QDeclarativeItem@@QBE_NXZ @ 335 NONAME ; bool QDeclarativeItem::hasFocus(void) const
??1QDeclarativeExtensionPlugin@@UAE@XZ @ 336 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(void)
- ?qt_metacall@QDeclarativeBehavior@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 337 NONAME ; int QDeclarativeBehavior::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?d_func@QDeclarativeBehavior@@ABEPBVQDeclarativeBehaviorPrivate@@XZ @ 338 NONAME ; class QDeclarativeBehaviorPrivate const * QDeclarativeBehavior::d_func(void) const
- ?wrapModeChanged@QDeclarativeText@@IAEXXZ @ 339 NONAME ; void QDeclarativeText::wrapModeChanged(void)
- ?elideModeChanged@QDeclarativeText@@IAEXW4TextElideMode@1@@Z @ 340 NONAME ; void QDeclarativeText::elideModeChanged(enum QDeclarativeText::TextElideMode)
+ ?qt_metacall@QDeclarativeBehavior@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 337 NONAME ABSENT ; int QDeclarativeBehavior::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?d_func@QDeclarativeBehavior@@ABEPBVQDeclarativeBehaviorPrivate@@XZ @ 338 NONAME ABSENT ; class QDeclarativeBehaviorPrivate const * QDeclarativeBehavior::d_func(void) const
+ ?wrapModeChanged@QDeclarativeText@@IAEXXZ @ 339 NONAME ABSENT ; void QDeclarativeText::wrapModeChanged(void)
+ ?elideModeChanged@QDeclarativeText@@IAEXW4TextElideMode@1@@Z @ 340 NONAME ABSENT ; void QDeclarativeText::elideModeChanged(enum QDeclarativeText::TextElideMode)
??1QDeclarativeExtensionInterface@@UAE@XZ @ 341 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(void)
- ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQMetaEnum@@@Z @ 342 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QMetaEnum const &)
- ?interfaceIId@QDeclarativeType@@QBEPBDXZ @ 343 NONAME ; char const * QDeclarativeType::interfaceIId(void) const
- ?resetHorizontalCenter@QDeclarativeAnchors@@QAEXXZ @ 344 NONAME ; void QDeclarativeAnchors::resetHorizontalCenter(void)
+ ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQMetaEnum@@@Z @ 342 NONAME ABSENT ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QMetaEnum const &)
+ ?interfaceIId@QDeclarativeType@@QBEPBDXZ @ 343 NONAME ABSENT ; char const * QDeclarativeType::interfaceIId(void) const
+ ?resetHorizontalCenter@QDeclarativeAnchors@@QAEXXZ @ 344 NONAME ABSENT ; void QDeclarativeAnchors::resetHorizontalCenter(void)
?outputWarningsToStandardError@QDeclarativeEngine@@QBE_NXZ @ 345 NONAME ; bool QDeclarativeEngine::outputWarningsToStandardError(void) const
?height@QDeclarativePixmap@@QBEHXZ @ 346 NONAME ; int QDeclarativePixmap::height(void) const
- ?getStaticMetaObject@QDeclarativeBehavior@@SAABUQMetaObject@@XZ @ 347 NONAME ; struct QMetaObject const & QDeclarativeBehavior::getStaticMetaObject(void)
- ??0QMetaEnumBuilder@@QAE@XZ @ 348 NONAME ; QMetaEnumBuilder::QMetaEnumBuilder(void)
- ?isValueType@QDeclarativeValueTypeFactory@@SA_NH@Z @ 349 NONAME ; bool QDeclarativeValueTypeFactory::isValueType(int)
- ?setWidth@QDeclarativePen@@QAEXH@Z @ 350 NONAME ; void QDeclarativePen::setWidth(int)
- ?isReadable@QMetaPropertyBuilder@@QBE_NXZ @ 351 NONAME ; bool QMetaPropertyBuilder::isReadable(void) const
+ ?getStaticMetaObject@QDeclarativeBehavior@@SAABUQMetaObject@@XZ @ 347 NONAME ABSENT ; struct QMetaObject const & QDeclarativeBehavior::getStaticMetaObject(void)
+ ??0QMetaEnumBuilder@@QAE@XZ @ 348 NONAME ABSENT ; QMetaEnumBuilder::QMetaEnumBuilder(void)
+ ?isValueType@QDeclarativeValueTypeFactory@@SA_NH@Z @ 349 NONAME ABSENT ; bool QDeclarativeValueTypeFactory::isValueType(int)
+ ?setWidth@QDeclarativePen@@QAEXH@Z @ 350 NONAME ABSENT ; void QDeclarativePen::setWidth(int)
+ ?isReadable@QMetaPropertyBuilder@@QBE_NXZ @ 351 NONAME ABSENT ; bool QMetaPropertyBuilder::isReadable(void) const
?metaObject@QDeclarativeExpression@@UBEPBUQMetaObject@@XZ @ 352 NONAME ; struct QMetaObject const * QDeclarativeExpression::metaObject(void) const
- ??0QDeclarativeDomValueLiteral@@QAE@ABV0@@Z @ 353 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(class QDeclarativeDomValueLiteral const &)
- ?getStaticMetaObject@QDeclarativeDebugQuery@@SAABUQMetaObject@@XZ @ 354 NONAME ; struct QMetaObject const & QDeclarativeDebugQuery::getStaticMetaObject(void)
- ??0QDeclarativeDomComponent@@QAE@XZ @ 355 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(void)
- ??1QDeclarativePropertyPrivate@@QAE@XZ @ 356 NONAME ; QDeclarativePropertyPrivate::~QDeclarativePropertyPrivate(void)
+ ??0QDeclarativeDomValueLiteral@@QAE@ABV0@@Z @ 353 NONAME ABSENT ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(class QDeclarativeDomValueLiteral const &)
+ ?getStaticMetaObject@QDeclarativeDebugQuery@@SAABUQMetaObject@@XZ @ 354 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugQuery::getStaticMetaObject(void)
+ ??0QDeclarativeDomComponent@@QAE@XZ @ 355 NONAME ABSENT ; QDeclarativeDomComponent::QDeclarativeDomComponent(void)
+ ??1QDeclarativePropertyPrivate@@QAE@XZ @ 356 NONAME ABSENT ; QDeclarativePropertyPrivate::~QDeclarativePropertyPrivate(void)
?setBaselineOffset@QDeclarativeItem@@QAEXM@Z @ 357 NONAME ; void QDeclarativeItem::setBaselineOffset(float)
- ??0QDeclarativeDebugPropertyReference@@QAE@XZ @ 358 NONAME ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(void)
+ ??0QDeclarativeDebugPropertyReference@@QAE@XZ @ 358 NONAME ABSENT ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(void)
?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 359 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *, int)
?setState@QDeclarativeStateGroup@@QAEXABVQString@@@Z @ 360 NONAME ; void QDeclarativeStateGroup::setState(class QString const &)
??_EQDeclarativeImageProvider@@UAE@I@Z @ 361 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(unsigned int)
?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 362 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *)
?isLoading@QDeclarativeComponent@@QBE_NXZ @ 363 NONAME ; bool QDeclarativeComponent::isLoading(void) const
- ?createFunction@QDeclarativeType@@QBEP6AXPAX@ZXZ @ 364 NONAME ; void (*)(void *) QDeclarativeType::createFunction(void) const
+ ?createFunction@QDeclarativeType@@QBEP6AXPAX@ZXZ @ 364 NONAME ABSENT ; void (*)(void *) QDeclarativeType::createFunction(void) const
?childrenRect@QDeclarativeItem@@QAE?AVQRectF@@XZ @ 365 NONAME ; class QRectF QDeclarativeItem::childrenRect(void)
- ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 366 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *)
- ?objectTypeMajorVersion@QDeclarativeDomObject@@QBEHXZ @ 367 NONAME ; int QDeclarativeDomObject::objectTypeMajorVersion(void) const
+ ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 366 NONAME ABSENT ; class QString QDeclarativeEngineDebug::tr(char const *, char const *)
+ ?objectTypeMajorVersion@QDeclarativeDomObject@@QBEHXZ @ 367 NONAME ABSENT ; int QDeclarativeDomObject::objectTypeMajorVersion(void) const
??6QDeclarativeInfo@@QAEAAV0@D@Z @ 368 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char)
- ??1QDeclarativeDomValueLiteral@@QAE@XZ @ 369 NONAME ; QDeclarativeDomValueLiteral::~QDeclarativeDomValueLiteral(void)
+ ??1QDeclarativeDomValueLiteral@@QAE@XZ @ 369 NONAME ABSENT ; QDeclarativeDomValueLiteral::~QDeclarativeDomValueLiteral(void)
?keepMouseGrab@QDeclarativeItem@@QBE_NXZ @ 370 NONAME ; bool QDeclarativeItem::keepMouseGrab(void) const
- ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 371 NONAME ; class QString QDeclarativeEngineDebug::tr(char const *, char const *, int)
- ?getStaticMetaObject@QDeclarativeDebugConnection@@SAABUQMetaObject@@XZ @ 372 NONAME ; struct QMetaObject const & QDeclarativeDebugConnection::getStaticMetaObject(void)
- ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 373 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *)
- ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@H@Z @ 374 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](int)
+ ?tr@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 371 NONAME ABSENT ; class QString QDeclarativeEngineDebug::tr(char const *, char const *, int)
+ ?getStaticMetaObject@QDeclarativeDebugConnection@@SAABUQMetaObject@@XZ @ 372 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugConnection::getStaticMetaObject(void)
+ ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 373 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *)
+ ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@H@Z @ 374 NONAME ABSENT ; class QVariant & QDeclarativeOpenMetaObject::operator[](int)
??0Variant@QDeclarativeParser@@QAE@XZ @ 375 NONAME ; QDeclarativeParser::Variant::Variant(void)
?status@QDeclarativeView@@QBE?AW4Status@1@XZ @ 376 NONAME ; enum QDeclarativeView::Status QDeclarativeView::status(void) const
- ??0QDeclarativeEngineDebug@@QAE@PAVQDeclarativeDebugConnection@@PAVQObject@@@Z @ 377 NONAME ; QDeclarativeEngineDebug::QDeclarativeEngineDebug(class QDeclarativeDebugConnection *, class QObject *)
+ ??0QDeclarativeEngineDebug@@QAE@PAVQDeclarativeDebugConnection@@PAVQObject@@@Z @ 377 NONAME ABSENT ; QDeclarativeEngineDebug::QDeclarativeEngineDebug(class QDeclarativeDebugConnection *, class QObject *)
?create@QDeclarativeComponent@@UAEPAVQObject@@PAVQDeclarativeContext@@@Z @ 378 NONAME ; class QObject * QDeclarativeComponent::create(class QDeclarativeContext *)
- ??_EQPacket@@UAE@I@Z @ 379 NONAME ; QPacket::~QPacket(unsigned int)
- ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 380 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *, int)
+ ??_EQPacket@@UAE@I@Z @ 379 NONAME ABSENT ; QPacket::~QPacket(unsigned int)
+ ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 380 NONAME ABSENT ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *, int)
?isResettable@QDeclarativeProperty@@QBE_NXZ @ 381 NONAME ; bool QDeclarativeProperty::isResettable(void) const
?isList@QDeclarativeCustomParserProperty@@QBE_NXZ @ 382 NONAME ; bool QDeclarativeCustomParserProperty::isList(void) const
- ?resetVerticalCenter@QDeclarativeAnchors@@QAEXXZ @ 383 NONAME ; void QDeclarativeAnchors::resetVerticalCenter(void)
- ??0QDeclarativeValueType@@QAE@PAVQObject@@@Z @ 384 NONAME ; QDeclarativeValueType::QDeclarativeValueType(class QObject *)
- ?staticMetaObject@QDeclarativeDebugConnection@@2UQMetaObject@@B @ 385 NONAME ; struct QMetaObject const QDeclarativeDebugConnection::staticMetaObject
- ?isLiteral@QDeclarativeDomValue@@QBE_NXZ @ 386 NONAME ; bool QDeclarativeDomValue::isLiteral(void) const
+ ?resetVerticalCenter@QDeclarativeAnchors@@QAEXXZ @ 383 NONAME ABSENT ; void QDeclarativeAnchors::resetVerticalCenter(void)
+ ??0QDeclarativeValueType@@QAE@PAVQObject@@@Z @ 384 NONAME ABSENT ; QDeclarativeValueType::QDeclarativeValueType(class QObject *)
+ ?staticMetaObject@QDeclarativeDebugConnection@@2UQMetaObject@@B @ 385 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugConnection::staticMetaObject
+ ?isLiteral@QDeclarativeDomValue@@QBE_NXZ @ 386 NONAME ABSENT ; bool QDeclarativeDomValue::isLiteral(void) const
?qt_metacall@QDeclarativeItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 387 NONAME ; int QDeclarativeItem::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?qt_metacall@QListModelInterface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 388 NONAME ; int QListModelInterface::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?move@QDeclarativeListModel@@QAEXHHH@Z @ 389 NONAME ; void QDeclarativeListModel::move(int, int, int)
- ?metaObject@QDeclarativeBehavior@@UBEPBUQMetaObject@@XZ @ 390 NONAME ; struct QMetaObject const * QDeclarativeBehavior::metaObject(void) const
+ ?qt_metacall@QListModelInterface@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 388 NONAME ABSENT ; int QListModelInterface::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?move@QDeclarativeListModel@@QAEXHHH@Z @ 389 NONAME ABSENT ; void QDeclarativeListModel::move(int, int, int)
+ ?metaObject@QDeclarativeBehavior@@UBEPBUQMetaObject@@XZ @ 390 NONAME ABSENT ; struct QMetaObject const * QDeclarativeBehavior::metaObject(void) const
?inputMethodPreHandler@QDeclarativeItem@@IAEXPAVQInputMethodEvent@@@Z @ 391 NONAME ; void QDeclarativeItem::inputMethodPreHandler(class QInputMethodEvent *)
- ?d_func@QDeclarativeText@@AAEPAVQDeclarativeTextPrivate@@XZ @ 392 NONAME ; class QDeclarativeTextPrivate * QDeclarativeText::d_func(void)
- ?signature@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 393 NONAME ; class QByteArray QMetaMethodBuilder::signature(void) const
+ ?d_func@QDeclarativeText@@AAEPAVQDeclarativeTextPrivate@@XZ @ 392 NONAME ABSENT ; class QDeclarativeTextPrivate * QDeclarativeText::d_func(void)
+ ?signature@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 393 NONAME ABSENT ; class QByteArray QMetaMethodBuilder::signature(void) const
??_EQDeclarativeParserStatus@@UAE@I@Z @ 394 NONAME ; QDeclarativeParserStatus::~QDeclarativeParserStatus(unsigned int)
- ?rightMargin@QDeclarativeAnchors@@QBEMXZ @ 395 NONAME ; float QDeclarativeAnchors::rightMargin(void) const
- ?itemsMoved@QListModelInterface@@IAEXHHH@Z @ 396 NONAME ; void QListModelInterface::itemsMoved(int, int, int)
- ?rectFFromString@QDeclarativeStringConverters@@YA?AVQRectF@@ABVQString@@PA_N@Z @ 397 NONAME ; class QRectF QDeclarativeStringConverters::rectFFromString(class QString const &, bool *)
+ ?rightMargin@QDeclarativeAnchors@@QBEMXZ @ 395 NONAME ABSENT ; float QDeclarativeAnchors::rightMargin(void) const
+ ?itemsMoved@QListModelInterface@@IAEXHHH@Z @ 396 NONAME ABSENT ; void QListModelInterface::itemsMoved(int, int, int)
+ ?rectFFromString@QDeclarativeStringConverters@@YA?AVQRectF@@ABVQString@@PA_N@Z @ 397 NONAME ABSENT ; class QRectF QDeclarativeStringConverters::rectFFromString(class QString const &, bool *)
?canAt@QDeclarativeListReference@@QBE_NXZ @ 398 NONAME ; bool QDeclarativeListReference::canAt(void) const
- ?children@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 399 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugObjectReference::children(void) const
- ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 400 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *)
- ?qt_metacall@QDeclarativeDebugExpressionQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 401 NONAME ; int QDeclarativeDebugExpressionQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?children@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 399 NONAME ABSENT ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugObjectReference::children(void) const
+ ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 400 NONAME ABSENT ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *)
+ ?qt_metacall@QDeclarativeDebugExpressionQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 401 NONAME ABSENT ; int QDeclarativeDebugExpressionQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
?getStaticMetaObject@QDeclarativeEngine@@SAABUQMetaObject@@XZ @ 402 NONAME ; struct QMetaObject const & QDeclarativeEngine::getStaticMetaObject(void)
?paintEvent@QDeclarativeView@@MAEXPAVQPaintEvent@@@Z @ 403 NONAME ; void QDeclarativeView::paintEvent(class QPaintEvent *)
- ?name@QDeclarativeDebugPropertyWatch@@QBE?AVQString@@XZ @ 404 NONAME ; class QString QDeclarativeDebugPropertyWatch::name(void) const
- ?bindingType@QDeclarativeAbstractBinding@@UBE?AW4Type@1@XZ @ 405 NONAME ; enum QDeclarativeAbstractBinding::Type QDeclarativeAbstractBinding::bindingType(void) const
- ?margins@QDeclarativeAnchors@@QBEMXZ @ 406 NONAME ; float QDeclarativeAnchors::margins(void) const
- ?length@QDeclarativeDomProperty@@QBEHXZ @ 407 NONAME ; int QDeclarativeDomProperty::length(void) const
- ??1QDeclarativeDomImport@@QAE@XZ @ 408 NONAME ; QDeclarativeDomImport::~QDeclarativeDomImport(void)
- ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
- ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ; bool QDeclarativeDomObject::isCustomType(void) const
- ?radius@QDeclarativeRectangle@@QBEMXZ @ 411 NONAME ; float QDeclarativeRectangle::radius(void) const
+ ?name@QDeclarativeDebugPropertyWatch@@QBE?AVQString@@XZ @ 404 NONAME ABSENT ; class QString QDeclarativeDebugPropertyWatch::name(void) const
+ ?bindingType@QDeclarativeAbstractBinding@@UBE?AW4Type@1@XZ @ 405 NONAME ABSENT ; enum QDeclarativeAbstractBinding::Type QDeclarativeAbstractBinding::bindingType(void) const
+ ?margins@QDeclarativeAnchors@@QBEMXZ @ 406 NONAME ABSENT ; float QDeclarativeAnchors::margins(void) const
+ ?length@QDeclarativeDomProperty@@QBEHXZ @ 407 NONAME ABSENT ; int QDeclarativeDomProperty::length(void) const
+ ??1QDeclarativeDomImport@@QAE@XZ @ 408 NONAME ABSENT ; QDeclarativeDomImport::~QDeclarativeDomImport(void)
+ ?mouseReleaseEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 409 NONAME ABSENT ; void QDeclarativeText::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+ ?isCustomType@QDeclarativeDomObject@@QBE_NXZ @ 410 NONAME ABSENT ; bool QDeclarativeDomObject::isCustomType(void) const
+ ?radius@QDeclarativeRectangle@@QBEMXZ @ 411 NONAME ABSENT ; float QDeclarativeRectangle::radius(void) const
??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 412 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *)
?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 413 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty<class QObject> *)
?timerEvent@QDeclarativeView@@MAEXPAVQTimerEvent@@@Z @ 414 NONAME ; void QDeclarativeView::timerEvent(class QTimerEvent *)
?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 415 NONAME ; void QDeclarativeTransition::setToState(class QString const &)
?requestPixmap@QDeclarativeImageProvider@@UAE?AVQPixmap@@ABVQString@@PAVQSize@@ABV4@@Z @ 416 NONAME ; class QPixmap QDeclarativeImageProvider::requestPixmap(class QString const &, class QSize *, class QSize const &)
- ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 417 NONAME ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const
+ ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 417 NONAME ABSENT ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const
?getStaticMetaObject@QDeclarativeView@@SAABUQMetaObject@@XZ @ 418 NONAME ; struct QMetaObject const & QDeclarativeView::getStaticMetaObject(void)
?metaObject@QDeclarativeStateOperation@@UBEPBUQMetaObject@@XZ @ 419 NONAME ; struct QMetaObject const * QDeclarativeStateOperation::metaObject(void) const
?keyReleasePreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 420 NONAME ; void QDeclarativeItem::keyReleasePreHandler(class QKeyEvent *)
- ?append@QDeclarativeListModel@@QAEXABVQScriptValue@@@Z @ 421 NONAME ; void QDeclarativeListModel::append(class QScriptValue const &)
- ??1QDeclarativeDebugObjectReference@@QAE@XZ @ 422 NONAME ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(void)
- ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 423 NONAME ; class QString QDeclarativeDebugClient::tr(char const *, char const *)
+ ?append@QDeclarativeListModel@@QAEXABVQScriptValue@@@Z @ 421 NONAME ABSENT ; void QDeclarativeListModel::append(class QScriptValue const &)
+ ??1QDeclarativeDebugObjectReference@@QAE@XZ @ 422 NONAME ABSENT ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(void)
+ ?tr@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 423 NONAME ABSENT ; class QString QDeclarativeDebugClient::tr(char const *, char const *)
?resolvedUrl@QDeclarativeContext@@QAE?AVQUrl@@ABV2@@Z @ 424 NONAME ; class QUrl QDeclarativeContext::resolvedUrl(class QUrl const &)
?object@QDeclarativeListReference@@QBEPAVQObject@@XZ @ 425 NONAME ; class QObject * QDeclarativeListReference::object(void) const
- ?setEnabled@QDeclarativeBehavior@@QAEX_N@Z @ 426 NONAME ; void QDeclarativeBehavior::setEnabled(bool)
+ ?setEnabled@QDeclarativeBehavior@@QAEX_N@Z @ 426 NONAME ABSENT ; void QDeclarativeBehavior::setEnabled(bool)
?line@QDeclarativeError@@QBEHXZ @ 427 NONAME ; int QDeclarativeError::line(void) const
?heightValid@QDeclarativeItem@@IBE_NXZ @ 428 NONAME ; bool QDeclarativeItem::heightValid(void) const
- ??1QDeclarativeOpenMetaObject@@UAE@XZ @ 429 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(void)
- ??0QPacket@@QAE@XZ @ 430 NONAME ; QPacket::QPacket(void)
+ ??1QDeclarativeOpenMetaObject@@UAE@XZ @ 429 NONAME ABSENT ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(void)
+ ??0QPacket@@QAE@XZ @ 430 NONAME ABSENT ; QPacket::QPacket(void)
?trUtf8@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 431 NONAME ; class QString QDeclarativePropertyMap::trUtf8(char const *, char const *, int)
?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0H@Z @ 432 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *, int)
- ??0QDeclarativeDebugEngineReference@@QAE@XZ @ 433 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(void)
+ ??0QDeclarativeDebugEngineReference@@QAE@XZ @ 433 NONAME ABSENT ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(void)
?qmlEngine@@YAPAVQDeclarativeEngine@@PBVQObject@@@Z @ 434 NONAME ; class QDeclarativeEngine * qmlEngine(class QObject const *)
?error@QDeclarativeExpression@@QBE?AVQDeclarativeError@@XZ @ 435 NONAME ; class QDeclarativeError QDeclarativeExpression::error(void) const
- ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 436 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *)
- ?styleColorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 437 NONAME ; void QDeclarativeText::styleColorChanged(class QColor const &)
- ?getStaticMetaObject@QDeclarativeDebugExpressionQuery@@SAABUQMetaObject@@XZ @ 438 NONAME ; struct QMetaObject const & QDeclarativeDebugExpressionQuery::getStaticMetaObject(void)
+ ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 436 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *)
+ ?styleColorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 437 NONAME ABSENT ; void QDeclarativeText::styleColorChanged(class QColor const &)
+ ?getStaticMetaObject@QDeclarativeDebugExpressionQuery@@SAABUQMetaObject@@XZ @ 438 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugExpressionQuery::getStaticMetaObject(void)
?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 439 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *, int)
- ?writeValueProperty@QDeclarativePropertyPrivate@@QAE_NABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 440 NONAME ; bool QDeclarativePropertyPrivate::writeValueProperty(class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?writeValueProperty@QDeclarativePropertyPrivate@@QAE_NABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 440 NONAME ABSENT ; bool QDeclarativePropertyPrivate::writeValueProperty(class QVariant const &, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
?errors@QDeclarativeCustomParser@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 441 NONAME ; class QList<class QDeclarativeError> QDeclarativeCustomParser::errors(void) const
?statesProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 442 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeStateGroup::statesProperty(void)
- ?roles@QDeclarativeListModel@@UBE?AV?$QList@H@@XZ @ 443 NONAME ; class QList<int> QDeclarativeListModel::roles(void) const
- ?name@QMetaEnumBuilder@@QBE?AVQByteArray@@XZ @ 444 NONAME ; class QByteArray QMetaEnumBuilder::name(void) const
- ??_EQDeclarativeDebugRootContextQuery@@UAE@I@Z @ 445 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(unsigned int)
- ?setColor@QDeclarativeRectangle@@QAEXABVQColor@@@Z @ 446 NONAME ; void QDeclarativeRectangle::setColor(class QColor const &)
+ ?roles@QDeclarativeListModel@@UBE?AV?$QList@H@@XZ @ 443 NONAME ABSENT ; class QList<int> QDeclarativeListModel::roles(void) const
+ ?name@QMetaEnumBuilder@@QBE?AVQByteArray@@XZ @ 444 NONAME ABSENT ; class QByteArray QMetaEnumBuilder::name(void) const
+ ??_EQDeclarativeDebugRootContextQuery@@UAE@I@Z @ 445 NONAME ABSENT ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(unsigned int)
+ ?setColor@QDeclarativeRectangle@@QAEXABVQColor@@@Z @ 446 NONAME ABSENT ; void QDeclarativeRectangle::setColor(class QColor const &)
?clipChanged@QDeclarativeItem@@IAEX_N@Z @ 447 NONAME ; void QDeclarativeItem::clipChanged(bool)
??0QDeclarativeCustomParser@@QAE@V?$QFlags@W4Flag@QDeclarativeCustomParser@@@@@Z @ 448 NONAME ; QDeclarativeCustomParser::QDeclarativeCustomParser(class QFlags<enum QDeclarativeCustomParser::Flag>)
- ?valueChanged@QDeclarativeDebugWatch@@IAEXABVQByteArray@@ABVQVariant@@@Z @ 449 NONAME ; void QDeclarativeDebugWatch::valueChanged(class QByteArray const &, class QVariant const &)
+ ?valueChanged@QDeclarativeDebugWatch@@IAEXABVQByteArray@@ABVQVariant@@@Z @ 449 NONAME ABSENT ; void QDeclarativeDebugWatch::valueChanged(class QByteArray const &, class QVariant const &)
?activeFocusChanged@QDeclarativeItem@@IAEX_N@Z @ 450 NONAME ; void QDeclarativeItem::activeFocusChanged(bool)
?smoothChanged@QDeclarativeItem@@IAEX_N@Z @ 451 NONAME ; void QDeclarativeItem::smoothChanged(bool)
- ?colorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 452 NONAME ; void QDeclarativeText::colorChanged(class QColor const &)
+ ?colorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 452 NONAME ABSENT ; void QDeclarativeText::colorChanged(class QColor const &)
?continueExecute@QDeclarativeView@@AAEXXZ @ 453 NONAME ; void QDeclarativeView::continueExecute(void)
?initialSize@QDeclarativeView@@QBE?AVQSize@@XZ @ 454 NONAME ; class QSize QDeclarativeView::initialSize(void) const
- ?interfaceIId@QDeclarativeMetaType@@SAPBDH@Z @ 455 NONAME ; char const * QDeclarativeMetaType::interfaceIId(int)
- ?isValid@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 456 NONAME ; bool QDeclarativeDomDynamicProperty::isValid(void) const
- ?baselineChanged@QDeclarativeAnchors@@IAEXXZ @ 457 NONAME ; void QDeclarativeAnchors::baselineChanged(void)
+ ?interfaceIId@QDeclarativeMetaType@@SAPBDH@Z @ 455 NONAME ABSENT ; char const * QDeclarativeMetaType::interfaceIId(int)
+ ?isValid@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 456 NONAME ABSENT ; bool QDeclarativeDomDynamicProperty::isValid(void) const
+ ?baselineChanged@QDeclarativeAnchors@@IAEXXZ @ 457 NONAME ABSENT ; void QDeclarativeAnchors::baselineChanged(void)
?name@QDeclarativeState@@QBE?AVQString@@XZ @ 458 NONAME ; class QString QDeclarativeState::name(void) const
- ??4QDeclarativeDomObject@@QAEAAV0@ABV0@@Z @ 459 NONAME ; class QDeclarativeDomObject & QDeclarativeDomObject::operator=(class QDeclarativeDomObject const &)
+ ??4QDeclarativeDomObject@@QAEAAV0@ABV0@@Z @ 459 NONAME ABSENT ; class QDeclarativeDomObject & QDeclarativeDomObject::operator=(class QDeclarativeDomObject const &)
?qt_metacall@QDeclarativeContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 460 NONAME ; int QDeclarativeContext::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??_EQDeclarativeValueType@@UAE@I@Z @ 461 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(unsigned int)
+ ??_EQDeclarativeValueType@@UAE@I@Z @ 461 NONAME ABSENT ; QDeclarativeValueType::~QDeclarativeValueType(unsigned int)
?qt_metacall@QDeclarativeState@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ; int QDeclarativeState::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?isEnabled@QDeclarativeDebugService@@QBE_NXZ @ 463 NONAME ; bool QDeclarativeDebugService::isEnabled(void) const
- ?stateChanged@QDeclarativeDebugWatch@@IAEXW4State@1@@Z @ 464 NONAME ; void QDeclarativeDebugWatch::stateChanged(enum QDeclarativeDebugWatch::State)
- ??0QMetaMethodBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 465 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(class QMetaObjectBuilder const *, int)
+ ?isEnabled@QDeclarativeDebugService@@QBE_NXZ @ 463 NONAME ABSENT ; bool QDeclarativeDebugService::isEnabled(void) const
+ ?stateChanged@QDeclarativeDebugWatch@@IAEXW4State@1@@Z @ 464 NONAME ABSENT ; void QDeclarativeDebugWatch::stateChanged(enum QDeclarativeDebugWatch::State)
+ ??0QMetaMethodBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 465 NONAME ABSENT ; QMetaMethodBuilder::QMetaMethodBuilder(class QMetaObjectBuilder const *, int)
??4QDeclarativeListReference@@QAEAAV0@ABV0@@Z @ 466 NONAME ; class QDeclarativeListReference & QDeclarativeListReference::operator=(class QDeclarativeListReference const &)
- ?componentFinalized@QDeclarativeBehavior@@AAEXXZ @ 467 NONAME ; void QDeclarativeBehavior::componentFinalized(void)
- ?stateChanged@QDeclarativeDebugQuery@@IAEXW4State@1@@Z @ 468 NONAME ; void QDeclarativeDebugQuery::stateChanged(enum QDeclarativeDebugQuery::State)
- ?setVerticalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 469 NONAME ; void QDeclarativeAnchors::setVerticalCenter(class QDeclarativeAnchorLine const &)
+ ?componentFinalized@QDeclarativeBehavior@@AAEXXZ @ 467 NONAME ABSENT ; void QDeclarativeBehavior::componentFinalized(void)
+ ?stateChanged@QDeclarativeDebugQuery@@IAEXW4State@1@@Z @ 468 NONAME ABSENT ; void QDeclarativeDebugQuery::stateChanged(enum QDeclarativeDebugQuery::State)
+ ?setVerticalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 469 NONAME ABSENT ; void QDeclarativeAnchors::setVerticalCenter(class QDeclarativeAnchorLine const &)
?keyPressEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 470 NONAME ; void QDeclarativeItem::keyPressEvent(class QKeyEvent *)
- ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 471 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *)
+ ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 471 NONAME ABSENT ; class QString QDeclarativeValueType::trUtf8(char const *, char const *)
?metaObject@QDeclarativeExtensionPlugin@@UBEPBUQMetaObject@@XZ @ 472 NONAME ; struct QMetaObject const * QDeclarativeExtensionPlugin::metaObject(void) const
- ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 473 NONAME ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *, int)
- ?setCenterIn@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 474 NONAME ; void QDeclarativeAnchors::setCenterIn(class QGraphicsObject *)
- ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@ABVQByteArray@@HH@Z @ 475 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(class QByteArray const &, int, int)
- ??0QDeclarativeDebugObjectQuery@@AAE@PAVQObject@@@Z @ 476 NONAME ; QDeclarativeDebugObjectQuery::QDeclarativeDebugObjectQuery(class QObject *)
- ?isComponent@QDeclarativeDomObject@@QBE_NXZ @ 477 NONAME ; bool QDeclarativeDomObject::isComponent(void) const
+ ?tr@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 473 NONAME ABSENT ; class QString QDeclarativeDebugObjectQuery::tr(char const *, char const *, int)
+ ?setCenterIn@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 474 NONAME ABSENT ; void QDeclarativeAnchors::setCenterIn(class QGraphicsObject *)
+ ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@ABVQByteArray@@HH@Z @ 475 NONAME ABSENT ; class QDeclarativeType * QDeclarativeMetaType::qmlType(class QByteArray const &, int, int)
+ ??0QDeclarativeDebugObjectQuery@@AAE@PAVQObject@@@Z @ 476 NONAME ABSENT ; QDeclarativeDebugObjectQuery::QDeclarativeDebugObjectQuery(class QObject *)
+ ?isComponent@QDeclarativeDomObject@@QBE_NXZ @ 477 NONAME ABSENT ; bool QDeclarativeDomObject::isComponent(void) const
?inputMethodEvent@QDeclarativeItem@@MAEXPAVQInputMethodEvent@@@Z @ 478 NONAME ; void QDeclarativeItem::inputMethodEvent(class QInputMethodEvent *)
- ?styleChanged@QDeclarativeText@@IAEXW4TextStyle@1@@Z @ 479 NONAME ; void QDeclarativeText::styleChanged(enum QDeclarativeText::TextStyle)
+ ?styleChanged@QDeclarativeText@@IAEXW4TextStyle@1@@Z @ 479 NONAME ABSENT ; void QDeclarativeText::styleChanged(enum QDeclarativeText::TextStyle)
?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeEngine@@@Z @ 480 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeEngine *)
?pluginPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 481 NONAME ; class QStringList QDeclarativeEngine::pluginPathList(void) const
?parentContext@QDeclarativeContext@@QBEPAV1@XZ @ 482 NONAME ; class QDeclarativeContext * QDeclarativeContext::parentContext(void) const
- ?leftMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 483 NONAME ; void QDeclarativeAnchors::leftMarginChanged(void)
- ?staticMetaObject@QDeclarativeDebugService@@2UQMetaObject@@B @ 484 NONAME ; struct QMetaObject const QDeclarativeDebugService::staticMetaObject
- ?topMargin@QDeclarativeAnchors@@QBEMXZ @ 485 NONAME ; float QDeclarativeAnchors::topMargin(void) const
- ??0QDeclarativeDebugExpressionQuery@@AAE@PAVQObject@@@Z @ 486 NONAME ; QDeclarativeDebugExpressionQuery::QDeclarativeDebugExpressionQuery(class QObject *)
- ??0QPacket@@IAE@ABVQByteArray@@@Z @ 487 NONAME ; QPacket::QPacket(class QByteArray const &)
+ ?leftMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 483 NONAME ABSENT ; void QDeclarativeAnchors::leftMarginChanged(void)
+ ?staticMetaObject@QDeclarativeDebugService@@2UQMetaObject@@B @ 484 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugService::staticMetaObject
+ ?topMargin@QDeclarativeAnchors@@QBEMXZ @ 485 NONAME ABSENT ; float QDeclarativeAnchors::topMargin(void) const
+ ??0QDeclarativeDebugExpressionQuery@@AAE@PAVQObject@@@Z @ 486 NONAME ABSENT ; QDeclarativeDebugExpressionQuery::QDeclarativeDebugExpressionQuery(class QObject *)
+ ??0QPacket@@IAE@ABVQByteArray@@@Z @ 487 NONAME ABSENT ; QPacket::QPacket(class QByteArray const &)
?implicitSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 488 NONAME ; class QSize const & QDeclarativePixmap::implicitSize(void) const
- ?setFlags@QMetaObjectBuilder@@QAEXV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@@Z @ 489 NONAME ; void QMetaObjectBuilder::setFlags(class QFlags<enum QMetaObjectBuilder::MetaObjectFlag>)
- ?horizontalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 490 NONAME ; void QDeclarativeAnchors::horizontalCenterChanged(void)
+ ?setFlags@QMetaObjectBuilder@@QAEXV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@@Z @ 489 NONAME ABSENT ; void QMetaObjectBuilder::setFlags(class QFlags<enum QMetaObjectBuilder::MetaObjectFlag>)
+ ?horizontalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 490 NONAME ABSENT ; void QDeclarativeAnchors::horizontalCenterChanged(void)
?right@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 491 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::right(void) const
- ?staticMetaObject@QDeclarativeDebugObjectQuery@@2UQMetaObject@@B @ 492 NONAME ; struct QMetaObject const QDeclarativeDebugObjectQuery::staticMetaObject
- ?propertyRead@QDeclarativeOpenMetaObject@@MAEXH@Z @ 493 NONAME ; void QDeclarativeOpenMetaObject::propertyRead(int)
+ ?staticMetaObject@QDeclarativeDebugObjectQuery@@2UQMetaObject@@B @ 492 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugObjectQuery::staticMetaObject
+ ?propertyRead@QDeclarativeOpenMetaObject@@MAEXH@Z @ 493 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyRead(int)
?importPathList@QDeclarativeEngine@@QBE?AVQStringList@@XZ @ 494 NONAME ; class QStringList QDeclarativeEngine::importPathList(void) const
- ?border@QDeclarativeRectangle@@QAEPAVQDeclarativePen@@XZ @ 495 NONAME ; class QDeclarativePen * QDeclarativeRectangle::border(void)
+ ?border@QDeclarativeRectangle@@QAEPAVQDeclarativePen@@XZ @ 495 NONAME ABSENT ; class QDeclarativePen * QDeclarativeRectangle::border(void)
?baselineOffset@QDeclarativeItem@@QBEMXZ @ 496 NONAME ; float QDeclarativeItem::baselineOffset(void) const
- ?dateFromString@QDeclarativeStringConverters@@YA?AVQDate@@ABVQString@@PA_N@Z @ 497 NONAME ; class QDate QDeclarativeStringConverters::dateFromString(class QString const &, bool *)
- ?qt_metacast@QDeclarativeDebugObjectExpressionWatch@@UAEPAXPBD@Z @ 498 NONAME ; void * QDeclarativeDebugObjectExpressionWatch::qt_metacast(char const *)
- ??0QDeclarativeDomValue@@QAE@ABV0@@Z @ 499 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(class QDeclarativeDomValue const &)
- ??1QDeclarativeListModel@@UAE@XZ @ 500 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(void)
+ ?dateFromString@QDeclarativeStringConverters@@YA?AVQDate@@ABVQString@@PA_N@Z @ 497 NONAME ABSENT ; class QDate QDeclarativeStringConverters::dateFromString(class QString const &, bool *)
+ ?qt_metacast@QDeclarativeDebugObjectExpressionWatch@@UAEPAXPBD@Z @ 498 NONAME ABSENT ; void * QDeclarativeDebugObjectExpressionWatch::qt_metacast(char const *)
+ ??0QDeclarativeDomValue@@QAE@ABV0@@Z @ 499 NONAME ABSENT ; QDeclarativeDomValue::QDeclarativeDomValue(class QDeclarativeDomValue const &)
+ ??1QDeclarativeListModel@@UAE@XZ @ 500 NONAME ABSENT ; QDeclarativeListModel::~QDeclarativeListModel(void)
?qmlAttachedPropertiesObject@@YAPAVQObject@@PAHPBV1@PBUQMetaObject@@_N@Z @ 501 NONAME ; class QObject * qmlAttachedPropertiesObject(int *, class QObject const *, struct QMetaObject const *, bool)
- ??_EQDeclarativeDebugClient@@UAE@I@Z @ 502 NONAME ; QDeclarativeDebugClient::~QDeclarativeDebugClient(unsigned int)
- ??4QDeclarativeDomComponent@@QAEAAV0@ABV0@@Z @ 503 NONAME ; class QDeclarativeDomComponent & QDeclarativeDomComponent::operator=(class QDeclarativeDomComponent const &)
- ?tr@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 504 NONAME ; class QString QPacketProtocol::tr(char const *, char const *)
- ?setFont@QDeclarativeText@@QAEXABVQFont@@@Z @ 505 NONAME ; void QDeclarativeText::setFont(class QFont const &)
+ ??_EQDeclarativeDebugClient@@UAE@I@Z @ 502 NONAME ABSENT ; QDeclarativeDebugClient::~QDeclarativeDebugClient(unsigned int)
+ ??4QDeclarativeDomComponent@@QAEAAV0@ABV0@@Z @ 503 NONAME ABSENT ; class QDeclarativeDomComponent & QDeclarativeDomComponent::operator=(class QDeclarativeDomComponent const &)
+ ?tr@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 504 NONAME ABSENT ; class QString QPacketProtocol::tr(char const *, char const *)
+ ?setFont@QDeclarativeText@@QAEXABVQFont@@@Z @ 505 NONAME ABSENT ; void QDeclarativeText::setFont(class QFont const &)
?fromChanged@QDeclarativeTransition@@IAEXXZ @ 506 NONAME ; void QDeclarativeTransition::fromChanged(void)
- ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 507 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QMetaMethod const &)
+ ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 507 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QMetaMethod const &)
?setHeight@QDeclarativeItemPrivate@@UAEXM@Z @ 508 NONAME ; void QDeclarativeItemPrivate::setHeight(float)
??0Variant@QDeclarativeParser@@QAE@ABV01@@Z @ 509 NONAME ; QDeclarativeParser::Variant::Variant(class QDeclarativeParser::Variant const &)
?getStaticMetaObject@QDeclarativeExtensionPlugin@@SAABUQMetaObject@@XZ @ 510 NONAME ; struct QMetaObject const & QDeclarativeExtensionPlugin::getStaticMetaObject(void)
- ??0QDeclarativeBinding@@QAE@PAXPAVQDeclarativeRefCount@@PAVQObject@@PAVQDeclarativeContextData@@ABVQString@@H2@Z @ 511 NONAME ; QDeclarativeBinding::QDeclarativeBinding(void *, class QDeclarativeRefCount *, class QObject *, class QDeclarativeContextData *, class QString const &, int, class QObject *)
- ?qt_metacast@QDeclarativeDebugClient@@UAEPAXPBD@Z @ 512 NONAME ; void * QDeclarativeDebugClient::qt_metacast(char const *)
- ?classInfoValue@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 513 NONAME ; class QByteArray QMetaObjectBuilder::classInfoValue(int) const
- ?right@QDeclarativeScaleGrid@@QBEHXZ @ 514 NONAME ; int QDeclarativeScaleGrid::right(void) const
- ?setClassName@QMetaObjectBuilder@@QAEXABVQByteArray@@@Z @ 515 NONAME ; void QMetaObjectBuilder::setClassName(class QByteArray const &)
- ??1QDeclarativeAnchors@@UAE@XZ @ 516 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(void)
- ?removeConstructor@QMetaObjectBuilder@@QAEXH@Z @ 517 NONAME ; void QMetaObjectBuilder::removeConstructor(int)
- ??4QDeclarativeDomValueValueInterceptor@@QAEAAV0@ABV0@@Z @ 518 NONAME ; class QDeclarativeDomValueValueInterceptor & QDeclarativeDomValueValueInterceptor::operator=(class QDeclarativeDomValueValueInterceptor const &)
+ ??0QDeclarativeBinding@@QAE@PAXPAVQDeclarativeRefCount@@PAVQObject@@PAVQDeclarativeContextData@@ABVQString@@H2@Z @ 511 NONAME ABSENT ; QDeclarativeBinding::QDeclarativeBinding(void *, class QDeclarativeRefCount *, class QObject *, class QDeclarativeContextData *, class QString const &, int, class QObject *)
+ ?qt_metacast@QDeclarativeDebugClient@@UAEPAXPBD@Z @ 512 NONAME ABSENT ; void * QDeclarativeDebugClient::qt_metacast(char const *)
+ ?classInfoValue@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 513 NONAME ABSENT ; class QByteArray QMetaObjectBuilder::classInfoValue(int) const
+ ?right@QDeclarativeScaleGrid@@QBEHXZ @ 514 NONAME ABSENT ; int QDeclarativeScaleGrid::right(void) const
+ ?setClassName@QMetaObjectBuilder@@QAEXABVQByteArray@@@Z @ 515 NONAME ABSENT ; void QMetaObjectBuilder::setClassName(class QByteArray const &)
+ ??1QDeclarativeAnchors@@UAE@XZ @ 516 NONAME ABSENT ; QDeclarativeAnchors::~QDeclarativeAnchors(void)
+ ?removeConstructor@QMetaObjectBuilder@@QAEXH@Z @ 517 NONAME ABSENT ; void QMetaObjectBuilder::removeConstructor(int)
+ ??4QDeclarativeDomValueValueInterceptor@@QAEAAV0@ABV0@@Z @ 518 NONAME ABSENT ; class QDeclarativeDomValueValueInterceptor & QDeclarativeDomValueValueInterceptor::operator=(class QDeclarativeDomValueValueInterceptor const &)
?resolveType@QDeclarativeCustomParser@@IBEPBUQMetaObject@@ABVQByteArray@@@Z @ 519 NONAME ; struct QMetaObject const * QDeclarativeCustomParser::resolveType(class QByteArray const &) const
??_EQDeclarativePropertyValueSource@@UAE@I@Z @ 520 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(unsigned int)
?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 521 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, char const *)
?staticMetaObject@QDeclarativeItem@@2UQMetaObject@@B @ 522 NONAME ; struct QMetaObject const QDeclarativeItem::staticMetaObject
- ?qt_metacast@QDeclarativeDebugRootContextQuery@@UAEPAXPBD@Z @ 523 NONAME ; void * QDeclarativeDebugRootContextQuery::qt_metacast(char const *)
- ?itemsRemoved@QListModelInterface@@IAEXHH@Z @ 524 NONAME ; void QListModelInterface::itemsRemoved(int, int)
+ ?qt_metacast@QDeclarativeDebugRootContextQuery@@UAEPAXPBD@Z @ 523 NONAME ABSENT ; void * QDeclarativeDebugRootContextQuery::qt_metacast(char const *)
+ ?itemsRemoved@QListModelInterface@@IAEXHH@Z @ 524 NONAME ABSENT ; void QListModelInterface::itemsRemoved(int, int)
?networkAccessManager@QDeclarativeEngine@@QBEPAVQNetworkAccessManager@@XZ @ 525 NONAME ; class QNetworkAccessManager * QDeclarativeEngine::networkAccessManager(void) const
- ??0QDeclarativeDomValue@@QAE@XZ @ 526 NONAME ; QDeclarativeDomValue::QDeclarativeDomValue(void)
+ ??0QDeclarativeDomValue@@QAE@XZ @ 526 NONAME ABSENT ; QDeclarativeDomValue::QDeclarativeDomValue(void)
?init@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItem@@@Z @ 527 NONAME ; void QDeclarativeItemPrivate::init(class QDeclarativeItem *)
- ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQByteArray@@0H@Z @ 528 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QByteArray const &, class QByteArray const &, int)
+ ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQByteArray@@0H@Z @ 528 NONAME ABSENT ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QByteArray const &, class QByteArray const &, int)
?getStaticMetaObject@QDeclarativeState@@SAABUQMetaObject@@XZ @ 529 NONAME ; struct QMetaObject const & QDeclarativeState::getStaticMetaObject(void)
- ?isResettable@QMetaPropertyBuilder@@QBE_NXZ @ 530 NONAME ; bool QMetaPropertyBuilder::isResettable(void) const
+ ?isResettable@QMetaPropertyBuilder@@QBE_NXZ @ 530 NONAME ABSENT ; bool QMetaPropertyBuilder::isResettable(void) const
?focusScopeItemChange@QDeclarativeItemPrivate@@UAEX_N@Z @ 531 NONAME ; void QDeclarativeItemPrivate::focusScopeItemChange(bool)
- ?bottomMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 532 NONAME ; void QDeclarativeAnchors::bottomMarginChanged(void)
+ ?bottomMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 532 NONAME ABSENT ; void QDeclarativeAnchors::bottomMarginChanged(void)
?offlineStoragePath@QDeclarativeEngine@@QBE?AVQString@@XZ @ 533 NONAME ; class QString QDeclarativeEngine::offlineStoragePath(void) const
?keys@QDeclarativePropertyMap@@QBE?AVQStringList@@XZ @ 534 NONAME ; class QStringList QDeclarativePropertyMap::keys(void) const
?addItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 535 NONAME ; void QDeclarativeItemPrivate::addItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>)
?clear@QDeclarativePixmap@@QAEXPAVQObject@@@Z @ 536 NONAME ; void QDeclarativePixmap::clear(class QObject *)
- ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 537 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QMetaMethod const &)
+ ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 537 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QMetaMethod const &)
??6QDeclarativeInfo@@QAEAAV0@F@Z @ 538 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(short)
- ?serialize@QMetaObjectBuilder@@QBEXAAVQDataStream@@@Z @ 539 NONAME ; void QMetaObjectBuilder::serialize(class QDataStream &) const
- ??0QDeclarativeDebugContextReference@@QAE@ABV0@@Z @ 540 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(class QDeclarativeDebugContextReference const &)
- ?saveProperty@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H@Z @ 541 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveProperty(struct QMetaObject const *, int)
+ ?serialize@QMetaObjectBuilder@@QBEXAAVQDataStream@@@Z @ 539 NONAME ABSENT ; void QMetaObjectBuilder::serialize(class QDataStream &) const
+ ??0QDeclarativeDebugContextReference@@QAE@ABV0@@Z @ 540 NONAME ABSENT ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(class QDeclarativeDebugContextReference const &)
+ ?saveProperty@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H@Z @ 541 NONAME ABSENT ; class QByteArray QDeclarativePropertyPrivate::saveProperty(struct QMetaObject const *, int)
?propertyType@QDeclarativeProperty@@QBEHXZ @ 542 NONAME ; int QDeclarativeProperty::propertyType(void) const
- ?isDefaultProperty@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 543 NONAME ; bool QDeclarativeDomDynamicProperty::isDefaultProperty(void) const
- ??_EQDeclarativeBehavior@@UAE@I@Z @ 544 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(unsigned int)
- ??_EQDeclarativeListModel@@UAE@I@Z @ 545 NONAME ; QDeclarativeListModel::~QDeclarativeListModel(unsigned int)
- ?isCreatable@QDeclarativeType@@QBE_NXZ @ 546 NONAME ; bool QDeclarativeType::isCreatable(void) const
+ ?isDefaultProperty@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 543 NONAME ABSENT ; bool QDeclarativeDomDynamicProperty::isDefaultProperty(void) const
+ ??_EQDeclarativeBehavior@@UAE@I@Z @ 544 NONAME ABSENT ; QDeclarativeBehavior::~QDeclarativeBehavior(unsigned int)
+ ??_EQDeclarativeListModel@@UAE@I@Z @ 545 NONAME ABSENT ; QDeclarativeListModel::~QDeclarativeListModel(unsigned int)
+ ?isCreatable@QDeclarativeType@@QBE_NXZ @ 546 NONAME ABSENT ; bool QDeclarativeType::isCreatable(void) const
??6QDeclarativeInfo@@QAEAAV0@ABVQString@@@Z @ 547 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QString const &)
- ?tr@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 548 NONAME ; class QString QDeclarativePen::tr(char const *, char const *)
+ ?tr@QDeclarativePen@@SA?AVQString@@PBD0@Z @ 548 NONAME ABSENT ; class QString QDeclarativePen::tr(char const *, char const *)
?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 549 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *, int)
- ??0QDeclarativeListModel@@QAE@PAVQObject@@@Z @ 550 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QObject *)
- ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugContextReference@@ABVQString@@PAVQObject@@@Z @ 551 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugContextReference const &, class QString const &, class QObject *)
+ ??0QDeclarativeListModel@@QAE@PAVQObject@@@Z @ 550 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(class QObject *)
+ ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugContextReference@@ABVQString@@PAVQObject@@@Z @ 551 NONAME ABSENT ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugContextReference const &, class QString const &, class QObject *)
?setColumn@QDeclarativeError@@QAEXH@Z @ 552 NONAME ; void QDeclarativeError::setColumn(int)
??1QDeclarativeTransition@@UAE@XZ @ 553 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(void)
??AQDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 554 NONAME ; class QVariant QDeclarativePropertyMap::operator[](class QString const &) const
- ?qt_metacall@QDeclarativeListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 555 NONAME ; int QDeclarativeListModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@QDeclarativeListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 555 NONAME ABSENT ; int QDeclarativeListModel::qt_metacall(enum QMetaObject::Call, int, void * *)
?qdeclarativeelement_destructor@QDeclarativePrivate@@YAXPAVQObject@@@Z @ 556 NONAME ; void QDeclarativePrivate::qdeclarativeelement_destructor(class QObject *)
- ?registerCustomStringConverter@QDeclarativeMetaType@@SAXHP6A?AVQVariant@@ABVQString@@@Z@Z @ 557 NONAME ; void QDeclarativeMetaType::registerCustomStringConverter(int, class QVariant (*)(class QString const &))
+ ?registerCustomStringConverter@QDeclarativeMetaType@@SAXHP6A?AVQVariant@@ABVQString@@@Z@Z @ 557 NONAME ABSENT ; void QDeclarativeMetaType::registerCustomStringConverter(int, class QVariant (*)(class QString const &))
?metaObject@QDeclarativeEngine@@UBEPBUQMetaObject@@XZ @ 558 NONAME ; struct QMetaObject const * QDeclarativeEngine::metaObject(void) const
- ??_EQDeclarativeDebugContextReference@@QAE@I@Z @ 559 NONAME ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(unsigned int)
- ?propertyWrite@QDeclarativeOpenMetaObject@@MAEXH@Z @ 560 NONAME ; void QDeclarativeOpenMetaObject::propertyWrite(int)
- ?qt_metacall@QDeclarativeDebugService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 561 NONAME ; int QDeclarativeDebugService::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setVerticalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 562 NONAME ; void QDeclarativeAnchors::setVerticalCenterOffset(float)
- ??1QDeclarativeDebugWatch@@UAE@XZ @ 563 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(void)
- ??1QPacketAutoSend@@UAE@XZ @ 564 NONAME ; QPacketAutoSend::~QPacketAutoSend(void)
- ?geometryChanged@QDeclarativeText@@MAEXABVQRectF@@0@Z @ 565 NONAME ; void QDeclarativeText::geometryChanged(class QRectF const &, class QRectF const &)
- ?d_func@QDeclarativeRectangle@@AAEPAVQDeclarativeRectanglePrivate@@XZ @ 566 NONAME ; class QDeclarativeRectanglePrivate * QDeclarativeRectangle::d_func(void)
- ?qt_metacast@QDeclarativeListModel@@UAEPAXPBD@Z @ 567 NONAME ; void * QDeclarativeListModel::qt_metacast(char const *)
+ ??_EQDeclarativeDebugContextReference@@QAE@I@Z @ 559 NONAME ABSENT ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(unsigned int)
+ ?propertyWrite@QDeclarativeOpenMetaObject@@MAEXH@Z @ 560 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyWrite(int)
+ ?qt_metacall@QDeclarativeDebugService@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 561 NONAME ABSENT ; int QDeclarativeDebugService::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setVerticalCenterOffset@QDeclarativeAnchors@@QAEXM@Z @ 562 NONAME ABSENT ; void QDeclarativeAnchors::setVerticalCenterOffset(float)
+ ??1QDeclarativeDebugWatch@@UAE@XZ @ 563 NONAME ABSENT ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(void)
+ ??1QPacketAutoSend@@UAE@XZ @ 564 NONAME ABSENT ; QPacketAutoSend::~QPacketAutoSend(void)
+ ?geometryChanged@QDeclarativeText@@MAEXABVQRectF@@0@Z @ 565 NONAME ABSENT ; void QDeclarativeText::geometryChanged(class QRectF const &, class QRectF const &)
+ ?d_func@QDeclarativeRectangle@@AAEPAVQDeclarativeRectanglePrivate@@XZ @ 566 NONAME ABSENT ; class QDeclarativeRectanglePrivate * QDeclarativeRectangle::d_func(void)
+ ?qt_metacast@QDeclarativeListModel@@UAEPAXPBD@Z @ 567 NONAME ABSENT ; void * QDeclarativeListModel::qt_metacast(char const *)
?name@QDeclarativeCustomParserProperty@@QBE?AVQByteArray@@XZ @ 568 NONAME ; class QByteArray QDeclarativeCustomParserProperty::name(void) const
- ?update@QDeclarativeBinding@@QAEXXZ @ 569 NONAME ; void QDeclarativeBinding::update(void)
+ ?update@QDeclarativeBinding@@QAEXXZ @ 569 NONAME ABSENT ; void QDeclarativeBinding::update(void)
?trUtf8@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 570 NONAME ; class QString QDeclarativeEngine::trUtf8(char const *, char const *)
- ?qt_metacast@QDeclarativeDebugConnection@@UAEPAXPBD@Z @ 571 NONAME ; void * QDeclarativeDebugConnection::qt_metacast(char const *)
- ?removeWatch@QDeclarativeEngineDebug@@QAEXPAVQDeclarativeDebugWatch@@@Z @ 572 NONAME ; void QDeclarativeEngineDebug::removeWatch(class QDeclarativeDebugWatch *)
- ?qt_metacast@QDeclarativeBinding@@UAEPAXPBD@Z @ 573 NONAME ; void * QDeclarativeBinding::qt_metacast(char const *)
- ?baseline@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 574 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::baseline(void) const
+ ?qt_metacast@QDeclarativeDebugConnection@@UAEPAXPBD@Z @ 571 NONAME ABSENT ; void * QDeclarativeDebugConnection::qt_metacast(char const *)
+ ?removeWatch@QDeclarativeEngineDebug@@QAEXPAVQDeclarativeDebugWatch@@@Z @ 572 NONAME ABSENT ; void QDeclarativeEngineDebug::removeWatch(class QDeclarativeDebugWatch *)
+ ?qt_metacast@QDeclarativeBinding@@UAEPAXPBD@Z @ 573 NONAME ABSENT ; void * QDeclarativeBinding::qt_metacast(char const *)
+ ?baseline@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 574 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::baseline(void) const
?connectDownloadProgress@QDeclarativePixmap@@QAE_NPAVQObject@@PBD@Z @ 575 NONAME ; bool QDeclarativePixmap::connectDownloadProgress(class QObject *, char const *)
- ?restore@QDeclarativePropertyPrivate@@SA?AVQDeclarativeProperty@@ABVQByteArray@@PAVQObject@@PAVQDeclarativeContextData@@@Z @ 576 NONAME ; class QDeclarativeProperty QDeclarativePropertyPrivate::restore(class QByteArray const &, class QObject *, class QDeclarativeContextData *)
+ ?restore@QDeclarativePropertyPrivate@@SA?AVQDeclarativeProperty@@ABVQByteArray@@PAVQObject@@PAVQDeclarativeContextData@@@Z @ 576 NONAME ABSENT ; class QDeclarativeProperty QDeclarativePropertyPrivate::restore(class QByteArray const &, class QObject *, class QDeclarativeContextData *)
??0QDeclarativeProperty@@QAE@PAVQObject@@@Z @ 577 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *)
- ?source@QDeclarativeDebugObjectReference@@QBE?AVQDeclarativeDebugFileReference@@XZ @ 578 NONAME ; class QDeclarativeDebugFileReference QDeclarativeDebugObjectReference::source(void) const
- ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 579 NONAME ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *, int)
- ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@H@Z @ 580 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(int)
+ ?source@QDeclarativeDebugObjectReference@@QBE?AVQDeclarativeDebugFileReference@@XZ @ 578 NONAME ABSENT ; class QDeclarativeDebugFileReference QDeclarativeDebugObjectReference::source(void) const
+ ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 579 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *, int)
+ ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@H@Z @ 580 NONAME ABSENT ; class QDeclarativeType * QDeclarativeMetaType::qmlType(int)
??1QDeclarativeCustomParser@@UAE@XZ @ 581 NONAME ; QDeclarativeCustomParser::~QDeclarativeCustomParser(void)
- ?toList@QDeclarativeDomValue@@QBE?AVQDeclarativeDomList@@XZ @ 582 NONAME ; class QDeclarativeDomList QDeclarativeDomValue::toList(void) const
- ?metaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 583 NONAME ; struct QMetaObject const * QDeclarativeType::metaObject(void) const
- ?animation@QDeclarativeBehavior@@QAEPAVQDeclarativeAbstractAnimation@@XZ @ 584 NONAME ; class QDeclarativeAbstractAnimation * QDeclarativeBehavior::animation(void)
- ?listType@QDeclarativeMetaType@@SAHH@Z @ 585 NONAME ; int QDeclarativeMetaType::listType(int)
+ ?toList@QDeclarativeDomValue@@QBE?AVQDeclarativeDomList@@XZ @ 582 NONAME ABSENT ; class QDeclarativeDomList QDeclarativeDomValue::toList(void) const
+ ?metaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 583 NONAME ABSENT ; struct QMetaObject const * QDeclarativeType::metaObject(void) const
+ ?animation@QDeclarativeBehavior@@QAEPAVQDeclarativeAbstractAnimation@@XZ @ 584 NONAME ABSENT ; class QDeclarativeAbstractAnimation * QDeclarativeBehavior::animation(void)
+ ?listType@QDeclarativeMetaType@@SAHH@Z @ 585 NONAME ABSENT ; int QDeclarativeMetaType::listType(int)
?transform_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@PAVQGraphicsTransform@@@Z @ 586 NONAME ; void QDeclarativeItemPrivate::transform_append(class QDeclarativeListProperty<class QGraphicsTransform> *, class QGraphicsTransform *)
?d_func@QDeclarativeComponent@@AAEPAVQDeclarativeComponentPrivate@@XZ @ 587 NONAME ; class QDeclarativeComponentPrivate * QDeclarativeComponent::d_func(void)
- ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@@Z @ 588 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &)
- ?qt_metacall@QDeclarativeScaleGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ; int QDeclarativeScaleGrid::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@@Z @ 588 NONAME ABSENT ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &)
+ ?qt_metacall@QDeclarativeScaleGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ABSENT ; int QDeclarativeScaleGrid::qt_metacall(enum QMetaObject::Call, int, void * *)
?size@QDeclarativePropertyMap@@QBEHXZ @ 590 NONAME ; int QDeclarativePropertyMap::size(void) const
?cancel@QDeclarativeState@@QAEXXZ @ 591 NONAME ; void QDeclarativeState::cancel(void)
?qt_metacall@QDeclarativeStateGroup@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 592 NONAME ; int QDeclarativeStateGroup::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??0QDeclarativePropertyPrivate@@QAE@XZ @ 593 NONAME ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(void)
- ?getStaticMetaObject@QDeclarativeDebugPropertyWatch@@SAABUQMetaObject@@XZ @ 594 NONAME ; struct QMetaObject const & QDeclarativeDebugPropertyWatch::getStaticMetaObject(void)
- ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 595 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *, int)
+ ??0QDeclarativePropertyPrivate@@QAE@XZ @ 593 NONAME ABSENT ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(void)
+ ?getStaticMetaObject@QDeclarativeDebugPropertyWatch@@SAABUQMetaObject@@XZ @ 594 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugPropertyWatch::getStaticMetaObject(void)
+ ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 595 NONAME ABSENT ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *, int)
?transformOrigin@QDeclarativeItem@@QBE?AW4TransformOrigin@1@XZ @ 596 NONAME ; enum QDeclarativeItem::TransformOrigin QDeclarativeItem::transformOrigin(void) const
- ?setState@QDeclarativeDebugWatch@@AAEXW4State@1@@Z @ 597 NONAME ; void QDeclarativeDebugWatch::setState(enum QDeclarativeDebugWatch::State)
+ ?setState@QDeclarativeDebugWatch@@AAEXW4State@1@@Z @ 597 NONAME ABSENT ; void QDeclarativeDebugWatch::setState(enum QDeclarativeDebugWatch::State)
?evaluateEnum@QDeclarativeCustomParser@@IBEHABVQByteArray@@@Z @ 598 NONAME ; int QDeclarativeCustomParser::evaluateEnum(class QByteArray const &) const
- ?setState@QDeclarativeDebugQuery@@AAEXW4State@1@@Z @ 599 NONAME ; void QDeclarativeDebugQuery::setState(enum QDeclarativeDebugQuery::State)
- ?d_func@QDeclarativeText@@ABEPBVQDeclarativeTextPrivate@@XZ @ 600 NONAME ; class QDeclarativeTextPrivate const * QDeclarativeText::d_func(void) const
+ ?setState@QDeclarativeDebugQuery@@AAEXW4State@1@@Z @ 599 NONAME ABSENT ; void QDeclarativeDebugQuery::setState(enum QDeclarativeDebugQuery::State)
+ ?d_func@QDeclarativeText@@ABEPBVQDeclarativeTextPrivate@@XZ @ 600 NONAME ABSENT ; class QDeclarativeTextPrivate const * QDeclarativeText::d_func(void) const
?transitionsProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 601 NONAME ; class QDeclarativeListProperty<class QDeclarativeTransition> QDeclarativeStateGroup::transitionsProperty(void)
- ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 602 NONAME ; class QByteArray QDeclarativeType::typeName(void) const
+ ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 602 NONAME ABSENT ; class QByteArray QDeclarativeType::typeName(void) const
?asStringList@Variant@QDeclarativeParser@@QBE?AVQStringList@@XZ @ 603 NONAME ; class QStringList QDeclarativeParser::Variant::asStringList(void) const
- ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 604 NONAME ; void QMetaEnumBuilder::removeKey(int)
- ?addRelatedMetaObject@QMetaObjectBuilder@@QAEHABQ6AABUQMetaObject@@XZ@Z @ 605 NONAME ; int QMetaObjectBuilder::addRelatedMetaObject(struct QMetaObject const & (* const)(void) const &)
- ??0QDeclarativeDomValueLiteral@@QAE@XZ @ 606 NONAME ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(void)
- ??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 607 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int)
+ ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 604 NONAME ABSENT ; void QMetaEnumBuilder::removeKey(int)
+ ?addRelatedMetaObject@QMetaObjectBuilder@@QAEHABQ6AABUQMetaObject@@XZ@Z @ 605 NONAME ABSENT ; int QMetaObjectBuilder::addRelatedMetaObject(struct QMetaObject const & (* const)(void) const &)
+ ??0QDeclarativeDomValueLiteral@@QAE@XZ @ 606 NONAME ABSENT ; QDeclarativeDomValueLiteral::QDeclarativeDomValueLiteral(void)
+ ??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 607 NONAME ABSENT ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int)
?computeTransformOrigin@QDeclarativeItemPrivate@@QBE?AVQPointF@@XZ @ 608 NONAME ; class QPointF QDeclarativeItemPrivate::computeTransformOrigin(void) const
??0QDeclarativeListReference@@QAE@PAVQObject@@PBDPAVQDeclarativeEngine@@@Z @ 609 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QObject *, char const *, class QDeclarativeEngine *)
- ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 610 NONAME ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &)
- ??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 611 NONAME ; QDeclarativePen::QDeclarativePen(class QObject *)
- ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 612 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *, int)
+ ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 610 NONAME ABSENT ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &)
+ ??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 611 NONAME ABSENT ; QDeclarativePen::QDeclarativePen(class QObject *)
+ ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 612 NONAME ABSENT ; class QString QPacketProtocol::trUtf8(char const *, char const *, int)
?setContextObject@QDeclarativeContext@@QAEXPAVQObject@@@Z @ 613 NONAME ; void QDeclarativeContext::setContextObject(class QObject *)
??_EQDeclarativeState@@UAE@I@Z @ 614 NONAME ; QDeclarativeState::~QDeclarativeState(unsigned int)
?expression@QDeclarativeExpression@@QBE?AVQString@@XZ @ 615 NONAME ; class QString QDeclarativeExpression::expression(void) const
- ??1QDeclarativeDomDocument@@QAE@XZ @ 616 NONAME ; QDeclarativeDomDocument::~QDeclarativeDomDocument(void)
- ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 617 NONAME ; class QString QDeclarativeListModel::trUtf8(char const *, char const *, int)
+ ??1QDeclarativeDomDocument@@QAE@XZ @ 616 NONAME ABSENT ; QDeclarativeDomDocument::~QDeclarativeDomDocument(void)
+ ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 617 NONAME ABSENT ; class QString QDeclarativeListModel::trUtf8(char const *, char const *, int)
?asNumber@Variant@QDeclarativeParser@@QBENXZ @ 618 NONAME ; double QDeclarativeParser::Variant::asNumber(void) const
- ?d_func@QDeclarativeDebugClient@@ABEPBVQDeclarativeDebugClientPrivate@@XZ @ 619 NONAME ; class QDeclarativeDebugClientPrivate const * QDeclarativeDebugClient::d_func(void) const
+ ?d_func@QDeclarativeDebugClient@@ABEPBVQDeclarativeDebugClientPrivate@@XZ @ 619 NONAME ABSENT ; class QDeclarativeDebugClientPrivate const * QDeclarativeDebugClient::d_func(void) const
?sceneEvent@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 620 NONAME ; bool QDeclarativeItem::sceneEvent(class QEvent *)
- ??0QDeclarativeDebugRootContextQuery@@AAE@PAVQObject@@@Z @ 621 NONAME ; QDeclarativeDebugRootContextQuery::QDeclarativeDebugRootContextQuery(class QObject *)
- ?name@QDeclarativeDebugEngineReference@@QBE?AVQString@@XZ @ 622 NONAME ; class QString QDeclarativeDebugEngineReference::name(void) const
+ ??0QDeclarativeDebugRootContextQuery@@AAE@PAVQObject@@@Z @ 621 NONAME ABSENT ; QDeclarativeDebugRootContextQuery::QDeclarativeDebugRootContextQuery(class QObject *)
+ ?name@QDeclarativeDebugEngineReference@@QBE?AVQString@@XZ @ 622 NONAME ABSENT ; class QString QDeclarativeDebugEngineReference::name(void) const
??_EQDeclarativeTransition@@UAE@I@Z @ 623 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(unsigned int)
- ??0QDeclarativeAction@@QAE@ABV0@@Z @ 624 NONAME ; QDeclarativeAction::QDeclarativeAction(class QDeclarativeAction const &)
+ ??0QDeclarativeAction@@QAE@ABV0@@Z @ 624 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(class QDeclarativeAction const &)
?extends@QDeclarativeState@@QBE?AVQString@@XZ @ 625 NONAME ; class QString QDeclarativeState::extends(void) const
?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserProperty@@ABVQString@@@Z @ 626 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserProperty const &, class QString const &)
??0QDeclarativeCustomParserNode@@QAE@XZ @ 627 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(void)
- ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 628 NONAME ; class QString QDeclarativeDomImport::version(void) const
+ ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 628 NONAME ABSENT ; class QString QDeclarativeDomImport::version(void) const
?smooth@QDeclarativeItem@@QBE_NXZ @ 629 NONAME ; bool QDeclarativeItem::smooth(void) const
??1QDeclarativeInfo@@QAE@XZ @ 630 NONAME ; QDeclarativeInfo::~QDeclarativeInfo(void)
?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 631 NONAME ; void * QDeclarativeStateOperation::qt_metacast(char const *)
- ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 632 NONAME ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &)
- ?isValueType@QDeclarativePropertyPrivate@@QBE_NXZ @ 633 NONAME ; bool QDeclarativePropertyPrivate::isValueType(void) const
- ??0QDeclarativeDomValueValueSource@@QAE@ABV0@@Z @ 634 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(class QDeclarativeDomValueValueSource const &)
- ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 635 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *, int)
+ ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 632 NONAME ABSENT ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &)
+ ?isValueType@QDeclarativePropertyPrivate@@QBE_NXZ @ 633 NONAME ABSENT ; bool QDeclarativePropertyPrivate::isValueType(void) const
+ ??0QDeclarativeDomValueValueSource@@QAE@ABV0@@Z @ 634 NONAME ABSENT ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(class QDeclarativeDomValueValueSource const &)
+ ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0H@Z @ 635 NONAME ABSENT ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *, int)
?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0H@Z @ 636 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *, int)
- ??_EQDeclarativeDebugExpressionQuery@@UAE@I@Z @ 637 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(unsigned int)
- ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 638 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *, int)
- ?qt_metacall@QDeclarativeDebugObjectExpressionWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 639 NONAME ; int QDeclarativeDebugObjectExpressionWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??_EQDeclarativeDebugExpressionQuery@@UAE@I@Z @ 637 NONAME ABSENT ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(unsigned int)
+ ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 638 NONAME ABSENT ; class QString QListModelInterface::trUtf8(char const *, char const *, int)
+ ?qt_metacall@QDeclarativeDebugObjectExpressionWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 639 NONAME ABSENT ; int QDeclarativeDebugObjectExpressionWatch::qt_metacall(enum QMetaObject::Call, int, void * *)
?d_func@QDeclarativeItem@@AAEPAVQDeclarativeItemPrivate@@XZ @ 640 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItem::d_func(void)
- ?binding@QDeclarativeDomValueBinding@@QBE?AVQString@@XZ @ 641 NONAME ; class QString QDeclarativeDomValueBinding::binding(void) const
+ ?binding@QDeclarativeDomValueBinding@@QBE?AVQString@@XZ @ 641 NONAME ABSENT ; class QString QDeclarativeDomValueBinding::binding(void) const
?updateAutoState@QDeclarativeStateGroup@@AAE_NXZ @ 642 NONAME ; bool QDeclarativeStateGroup::updateAutoState(void)
- ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 643 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *)
+ ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 643 NONAME ABSENT ; class QString QDeclarativeDebugService::tr(char const *, char const *)
?tr@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 644 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *, int)
??1QDeclarativeProperty@@QAE@XZ @ 645 NONAME ; QDeclarativeProperty::~QDeclarativeProperty(void)
- ?fontChanged@QDeclarativeText@@IAEXABVQFont@@@Z @ 646 NONAME ; void QDeclarativeText::fontChanged(class QFont const &)
+ ?fontChanged@QDeclarativeText@@IAEXABVQFont@@@Z @ 646 NONAME ABSENT ; void QDeclarativeText::fontChanged(class QFont const &)
?isLoading@QDeclarativePixmap@@QBE_NXZ @ 647 NONAME ; bool QDeclarativePixmap::isLoading(void) const
?removeItemChangeListener@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItemChangeListener@@V?$QFlags@W4ChangeType@QDeclarativeItemPrivate@@@@@Z @ 648 NONAME ; void QDeclarativeItemPrivate::removeItemChangeListener(class QDeclarativeItemChangeListener *, class QFlags<enum QDeclarativeItemPrivate::ChangeType>)
- ?isList@QDeclarativeDomValue@@QBE_NXZ @ 649 NONAME ; bool QDeclarativeDomValue::isList(void) const
- ?insert@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 650 NONAME ; void QDeclarativeListModel::insert(int, class QScriptValue const &)
- ?staticMetaObject@QDeclarativeListModel@@2UQMetaObject@@B @ 651 NONAME ; struct QMetaObject const QDeclarativeListModel::staticMetaObject
+ ?isList@QDeclarativeDomValue@@QBE_NXZ @ 649 NONAME ABSENT ; bool QDeclarativeDomValue::isList(void) const
+ ?insert@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 650 NONAME ABSENT ; void QDeclarativeListModel::insert(int, class QScriptValue const &)
+ ?staticMetaObject@QDeclarativeListModel@@2UQMetaObject@@B @ 651 NONAME ABSENT ; struct QMetaObject const QDeclarativeListModel::staticMetaObject
?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@@Z @ 652 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &)
- ?indexOfConstructor@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 653 NONAME ; int QMetaObjectBuilder::indexOfConstructor(class QByteArray const &)
+ ?indexOfConstructor@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 653 NONAME ABSENT ; int QMetaObjectBuilder::indexOfConstructor(class QByteArray const &)
?lineNumber@QDeclarativeExpression@@QBEHXZ @ 654 NONAME ; int QDeclarativeExpression::lineNumber(void) const
- ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 655 NONAME ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 655 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::trUtf8(char const *, char const *, int)
?toString@QDeclarativeError@@QBE?AVQString@@XZ @ 656 NONAME ; class QString QDeclarativeError::toString(void) const
- ?index@QMetaPropertyBuilder@@QBEHXZ @ 657 NONAME ; int QMetaPropertyBuilder::index(void) const
- ?commaPositions@QDeclarativeDomList@@QBE?AV?$QList@H@@XZ @ 658 NONAME ; class QList<int> QDeclarativeDomList::commaPositions(void) const
- ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 659 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *)
- ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 660 NONAME ; class QString QDeclarativeAnchors::tr(char const *, char const *)
+ ?index@QMetaPropertyBuilder@@QBEHXZ @ 657 NONAME ABSENT ; int QMetaPropertyBuilder::index(void) const
+ ?commaPositions@QDeclarativeDomList@@QBE?AV?$QList@H@@XZ @ 658 NONAME ABSENT ; class QList<int> QDeclarativeDomList::commaPositions(void) const
+ ?tr@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 659 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::tr(char const *, char const *)
+ ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 660 NONAME ABSENT ; class QString QDeclarativeAnchors::tr(char const *, char const *)
?tr@QDeclarativeEngine@@SA?AVQString@@PBD0@Z @ 661 NONAME ; class QString QDeclarativeEngine::tr(char const *, char const *)
- ?setTextFormat@QDeclarativeText@@QAEXW4TextFormat@1@@Z @ 662 NONAME ; void QDeclarativeText::setTextFormat(enum QDeclarativeText::TextFormat)
- ?parserStatusCast@QDeclarativeType@@QBEHXZ @ 663 NONAME ; int QDeclarativeType::parserStatusCast(void) const
- ??_EQListModelInterface@@UAE@I@Z @ 664 NONAME ; QListModelInterface::~QListModelInterface(unsigned int)
- ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 665 NONAME ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *)
- ?getStaticMetaObject@QDeclarativeListModel@@SAABUQMetaObject@@XZ @ 666 NONAME ; struct QMetaObject const & QDeclarativeListModel::getStaticMetaObject(void)
- ?setStdCppSet@QMetaPropertyBuilder@@QAEX_N@Z @ 667 NONAME ; void QMetaPropertyBuilder::setStdCppSet(bool)
+ ?setTextFormat@QDeclarativeText@@QAEXW4TextFormat@1@@Z @ 662 NONAME ABSENT ; void QDeclarativeText::setTextFormat(enum QDeclarativeText::TextFormat)
+ ?parserStatusCast@QDeclarativeType@@QBEHXZ @ 663 NONAME ABSENT ; int QDeclarativeType::parserStatusCast(void) const
+ ??_EQListModelInterface@@UAE@I@Z @ 664 NONAME ABSENT ; QListModelInterface::~QListModelInterface(unsigned int)
+ ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 665 NONAME ABSENT ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *)
+ ?getStaticMetaObject@QDeclarativeListModel@@SAABUQMetaObject@@XZ @ 666 NONAME ABSENT ; struct QMetaObject const & QDeclarativeListModel::getStaticMetaObject(void)
+ ?setStdCppSet@QMetaPropertyBuilder@@QAEX_N@Z @ 667 NONAME ABSENT ; void QMetaPropertyBuilder::setStdCppSet(bool)
??0QDeclarativeItemPrivate@@QAE@XZ @ 668 NONAME ; QDeclarativeItemPrivate::QDeclarativeItemPrivate(void)
- ??0QDeclarativeDebugService@@QAE@ABVQString@@PAVQObject@@@Z @ 669 NONAME ; QDeclarativeDebugService::QDeclarativeDebugService(class QString const &, class QObject *)
+ ??0QDeclarativeDebugService@@QAE@ABVQString@@PAVQObject@@@Z @ 669 NONAME ABSENT ; QDeclarativeDebugService::QDeclarativeDebugService(class QString const &, class QObject *)
?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@_N@Z @ 670 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, bool)
- ??_EQPacketAutoSend@@UAE@I@Z @ 671 NONAME ; QPacketAutoSend::~QPacketAutoSend(unsigned int)
- ?saveValueType@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H0H@Z @ 672 NONAME ; class QByteArray QDeclarativePropertyPrivate::saveValueType(struct QMetaObject const *, int, struct QMetaObject const *, int)
+ ??_EQPacketAutoSend@@UAE@I@Z @ 671 NONAME ABSENT ; QPacketAutoSend::~QPacketAutoSend(unsigned int)
+ ?saveValueType@QDeclarativePropertyPrivate@@SA?AVQByteArray@@PBUQMetaObject@@H0H@Z @ 672 NONAME ABSENT ; class QByteArray QDeclarativePropertyPrivate::saveValueType(struct QMetaObject const *, int, struct QMetaObject const *, int)
?resetHeight@QDeclarativeItem@@QAEXXZ @ 673 NONAME ; void QDeclarativeItem::resetHeight(void)
- ?setVAlign@QDeclarativeText@@QAEXW4VAlignment@1@@Z @ 674 NONAME ; void QDeclarativeText::setVAlign(enum QDeclarativeText::VAlignment)
- ??1QDeclarativeDebugService@@UAE@XZ @ 675 NONAME ; QDeclarativeDebugService::~QDeclarativeDebugService(void)
- ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 676 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *, int)
- ?elideMode@QDeclarativeText@@QBE?AW4TextElideMode@1@XZ @ 677 NONAME ; enum QDeclarativeText::TextElideMode QDeclarativeText::elideMode(void) const
+ ?setVAlign@QDeclarativeText@@QAEXW4VAlignment@1@@Z @ 674 NONAME ABSENT ; void QDeclarativeText::setVAlign(enum QDeclarativeText::VAlignment)
+ ??1QDeclarativeDebugService@@UAE@XZ @ 675 NONAME ABSENT ; QDeclarativeDebugService::~QDeclarativeDebugService(void)
+ ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 676 NONAME ABSENT ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *, int)
+ ?elideMode@QDeclarativeText@@QBE?AW4TextElideMode@1@XZ @ 677 NONAME ABSENT ; enum QDeclarativeText::TextElideMode QDeclarativeText::elideMode(void) const
?baseUrl@QDeclarativeContext@@QBE?AVQUrl@@XZ @ 678 NONAME ; class QUrl QDeclarativeContext::baseUrl(void) const
- ?qt_metacall@QDeclarativeDebugRootContextQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 679 NONAME ; int QDeclarativeDebugRootContextQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@QDeclarativeDebugRootContextQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 679 NONAME ABSENT ; int QDeclarativeDebugRootContextQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
?isNamed@QDeclarativeState@@QBE_NXZ @ 680 NONAME ; bool QDeclarativeState::isNamed(void) const
?isString@Variant@QDeclarativeParser@@QBE_NXZ @ 681 NONAME ; bool QDeclarativeParser::Variant::isString(void) const
?restart@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 682 NONAME ; long long QDeclarativeItemPrivate::restart(class QElapsedTimer &)
- ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 683 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 683 NONAME ABSENT ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *, int)
?qt_metacast@QDeclarativeTransition@@UAEPAXPBD@Z @ 684 NONAME ; void * QDeclarativeTransition::qt_metacast(char const *)
??1QDeclarativePixmap@@QAE@XZ @ 685 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(void)
- ?timeFromString@QDeclarativeStringConverters@@YA?AVQTime@@ABVQString@@PA_N@Z @ 686 NONAME ; class QTime QDeclarativeStringConverters::timeFromString(class QString const &, bool *)
- ?d_func@QDeclarativeDebugClient@@AAEPAVQDeclarativeDebugClientPrivate@@XZ @ 687 NONAME ; class QDeclarativeDebugClientPrivate * QDeclarativeDebugClient::d_func(void)
- ??1QDeclarativeType@@AAE@XZ @ 688 NONAME ; QDeclarativeType::~QDeclarativeType(void)
- ?colorFromString@QDeclarativeStringConverters@@YA?AVQColor@@ABVQString@@PA_N@Z @ 689 NONAME ; class QColor QDeclarativeStringConverters::colorFromString(class QString const &, bool *)
- ??_EQPacketProtocol@@UAE@I@Z @ 690 NONAME ; QPacketProtocol::~QPacketProtocol(unsigned int)
- ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 691 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *)
+ ?timeFromString@QDeclarativeStringConverters@@YA?AVQTime@@ABVQString@@PA_N@Z @ 686 NONAME ABSENT ; class QTime QDeclarativeStringConverters::timeFromString(class QString const &, bool *)
+ ?d_func@QDeclarativeDebugClient@@AAEPAVQDeclarativeDebugClientPrivate@@XZ @ 687 NONAME ABSENT ; class QDeclarativeDebugClientPrivate * QDeclarativeDebugClient::d_func(void)
+ ??1QDeclarativeType@@AAE@XZ @ 688 NONAME ABSENT ; QDeclarativeType::~QDeclarativeType(void)
+ ?colorFromString@QDeclarativeStringConverters@@YA?AVQColor@@ABVQString@@PA_N@Z @ 689 NONAME ABSENT ; class QColor QDeclarativeStringConverters::colorFromString(class QString const &, bool *)
+ ??_EQPacketProtocol@@UAE@I@Z @ 690 NONAME ABSENT ; QPacketProtocol::~QPacketProtocol(unsigned int)
+ ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 691 NONAME ABSENT ; class QString QDeclarativeListModel::tr(char const *, char const *)
??0QDeclarativePixmap@@QAE@XZ @ 692 NONAME ; QDeclarativePixmap::QDeclarativePixmap(void)
- ??0QDeclarativeDebugObjectReference@@QAE@XZ @ 693 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(void)
+ ??0QDeclarativeDebugObjectReference@@QAE@XZ @ 693 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(void)
?staticMetaObject@QDeclarativeExtensionPlugin@@2UQMetaObject@@B @ 694 NONAME ; struct QMetaObject const QDeclarativeExtensionPlugin::staticMetaObject
- ?isNull@QDeclarativeScaleGrid@@QBE_NXZ @ 695 NONAME ; bool QDeclarativeScaleGrid::isNull(void) const
+ ?isNull@QDeclarativeScaleGrid@@QBE_NXZ @ 695 NONAME ABSENT ; bool QDeclarativeScaleGrid::isNull(void) const
??_EQDeclarativeStateOperation@@UAE@I@Z @ 696 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(unsigned int)
??6QDeclarativeInfo@@QAEAAV0@H@Z @ 697 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(int)
- ??0QDeclarativeDomDynamicProperty@@QAE@XZ @ 698 NONAME ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(void)
- ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 699 NONAME ; class QString QDeclarativeRectangle::tr(char const *, char const *, int)
+ ??0QDeclarativeDomDynamicProperty@@QAE@XZ @ 698 NONAME ABSENT ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(void)
+ ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 699 NONAME ABSENT ; class QString QDeclarativeRectangle::tr(char const *, char const *, int)
?type@QDeclarativeProperty@@QBE?AW4Type@1@XZ @ 700 NONAME ; enum QDeclarativeProperty::Type QDeclarativeProperty::type(void) const
- ??0QDeclarativeDebugQuery@@IAE@PAVQObject@@@Z @ 701 NONAME ; QDeclarativeDebugQuery::QDeclarativeDebugQuery(class QObject *)
- ?baselineOffset@QDeclarativeAnchors@@QBEMXZ @ 702 NONAME ; float QDeclarativeAnchors::baselineOffset(void) const
- ??4QDeclarativeDomDocument@@QAEAAV0@ABV0@@Z @ 703 NONAME ; class QDeclarativeDomDocument & QDeclarativeDomDocument::operator=(class QDeclarativeDomDocument const &)
- ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@PAVQDeclarativeOpenMetaObjectType@@_N@Z @ 704 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, class QDeclarativeOpenMetaObjectType *, bool)
+ ??0QDeclarativeDebugQuery@@IAE@PAVQObject@@@Z @ 701 NONAME ABSENT ; QDeclarativeDebugQuery::QDeclarativeDebugQuery(class QObject *)
+ ?baselineOffset@QDeclarativeAnchors@@QBEMXZ @ 702 NONAME ABSENT ; float QDeclarativeAnchors::baselineOffset(void) const
+ ??4QDeclarativeDomDocument@@QAEAAV0@ABV0@@Z @ 703 NONAME ABSENT ; class QDeclarativeDomDocument & QDeclarativeDomDocument::operator=(class QDeclarativeDomDocument const &)
+ ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@PAVQDeclarativeOpenMetaObjectType@@_N@Z @ 704 NONAME ABSENT ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, class QDeclarativeOpenMetaObjectType *, bool)
?trUtf8@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 705 NONAME ; class QString QDeclarativeExpression::trUtf8(char const *, char const *)
- ??0QPacketProtocol@@QAE@PAVQIODevice@@PAVQObject@@@Z @ 706 NONAME ; QPacketProtocol::QPacketProtocol(class QIODevice *, class QObject *)
+ ??0QPacketProtocol@@QAE@PAVQIODevice@@PAVQObject@@@Z @ 706 NONAME ABSENT ; QPacketProtocol::QPacketProtocol(class QIODevice *, class QObject *)
??1QDeclarativeListReference@@QAE@XZ @ 707 NONAME ; QDeclarativeListReference::~QDeclarativeListReference(void)
?clearError@QDeclarativeExpression@@QAEXXZ @ 708 NONAME ; void QDeclarativeExpression::clearError(void)
- ?setLineNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 709 NONAME ; void QDeclarativeDebugFileReference::setLineNumber(int)
+ ?setLineNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 709 NONAME ABSENT ; void QDeclarativeDebugFileReference::setLineNumber(int)
?qt_metacall@QDeclarativeExtensionPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 710 NONAME ; int QDeclarativeExtensionPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?boundingRect@QDeclarativeText@@UBE?AVQRectF@@XZ @ 711 NONAME ; class QRectF QDeclarativeText::boundingRect(void) const
- ?setColor@QDeclarativePen@@QAEXABVQColor@@@Z @ 712 NONAME ; void QDeclarativePen::setColor(class QColor const &)
- ??0QDeclarativeDomImport@@QAE@XZ @ 713 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(void)
+ ?boundingRect@QDeclarativeText@@UBE?AVQRectF@@XZ @ 711 NONAME ABSENT ; class QRectF QDeclarativeText::boundingRect(void) const
+ ?setColor@QDeclarativePen@@QAEXABVQColor@@@Z @ 712 NONAME ABSENT ; void QDeclarativePen::setColor(class QColor const &)
+ ??0QDeclarativeDomImport@@QAE@XZ @ 713 NONAME ABSENT ; QDeclarativeDomImport::QDeclarativeDomImport(void)
?clearErrors@QDeclarativeCustomParser@@QAEXXZ @ 714 NONAME ; void QDeclarativeCustomParser::clearErrors(void)
- ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 715 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *, int)
- ?toRelocatableData@QMetaObjectBuilder@@QBE?AVQByteArray@@PA_N@Z @ 716 NONAME ; class QByteArray QMetaObjectBuilder::toRelocatableData(bool *) const
+ ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 715 NONAME ABSENT ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *, int)
+ ?toRelocatableData@QMetaObjectBuilder@@QBE?AVQByteArray@@PA_N@Z @ 716 NONAME ABSENT ; class QByteArray QMetaObjectBuilder::toRelocatableData(bool *) const
?qt_metacast@QDeclarativeView@@UAEPAXPBD@Z @ 717 NONAME ; void * QDeclarativeView::qt_metacast(char const *)
?mapToItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 718 NONAME ; class QScriptValue QDeclarativeItem::mapToItem(class QScriptValue const &, float, float) const
?setPluginPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 719 NONAME ; void QDeclarativeEngine::setPluginPathList(class QStringList const &)
?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 720 NONAME ; struct QMetaObject const * QDeclarativeState::metaObject(void) const
- ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 721 NONAME ; class QRectF QDeclarativeRectangle::boundingRect(void) const
- ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 722 NONAME ; class QString QDeclarativeDomImport::uri(void) const
+ ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 721 NONAME ABSENT ; class QRectF QDeclarativeRectangle::boundingRect(void) const
+ ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 722 NONAME ABSENT ; class QString QDeclarativeDomImport::uri(void) const
?setContextProperty@QDeclarativeContext@@QAEXABVQString@@PAVQObject@@@Z @ 723 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QObject *)
?setBaseUrl@QDeclarativeEngine@@QAEXABVQUrl@@@Z @ 724 NONAME ; void QDeclarativeEngine::setBaseUrl(class QUrl const &)
- ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 725 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *, int)
- ?setScriptable@QMetaPropertyBuilder@@QAEX_N@Z @ 726 NONAME ; void QMetaPropertyBuilder::setScriptable(bool)
+ ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 725 NONAME ABSENT ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *, int)
+ ?setScriptable@QMetaPropertyBuilder@@QAEX_N@Z @ 726 NONAME ABSENT ; void QMetaPropertyBuilder::setScriptable(bool)
??0QDeclarativeProperty@@QAE@PAVQObject@@PAVQDeclarativeEngine@@@Z @ 727 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QDeclarativeEngine *)
- ?itemsInserted@QListModelInterface@@IAEXHH@Z @ 728 NONAME ; void QListModelInterface::itemsInserted(int, int)
- ?generateBorderedRect@QDeclarativeRectangle@@AAEXXZ @ 729 NONAME ; void QDeclarativeRectangle::generateBorderedRect(void)
- ?verticalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 730 NONAME ; void QDeclarativeAnchors::verticalCenterOffsetChanged(void)
+ ?itemsInserted@QListModelInterface@@IAEXHH@Z @ 728 NONAME ABSENT ; void QListModelInterface::itemsInserted(int, int)
+ ?generateBorderedRect@QDeclarativeRectangle@@AAEXXZ @ 729 NONAME ABSENT ; void QDeclarativeRectangle::generateBorderedRect(void)
+ ?verticalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 730 NONAME ABSENT ; void QDeclarativeAnchors::verticalCenterOffsetChanged(void)
?width@QDeclarativeItem@@QBEMXZ @ 731 NONAME ; float QDeclarativeItem::width(void) const
- ?isValueInterceptor@QDeclarativeDomValue@@QBE_NXZ @ 732 NONAME ; bool QDeclarativeDomValue::isValueInterceptor(void) const
+ ?isValueInterceptor@QDeclarativeDomValue@@QBE_NXZ @ 732 NONAME ABSENT ; bool QDeclarativeDomValue::isValueInterceptor(void) const
?transform_at@QDeclarativeItemPrivate@@SAPAVQGraphicsTransform@@PAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@H@Z @ 733 NONAME ; class QGraphicsTransform * QDeclarativeItemPrivate::transform_at(class QDeclarativeListProperty<class QGraphicsTransform> *, int)
- ??1QDeclarativeDomValueBinding@@QAE@XZ @ 734 NONAME ; QDeclarativeDomValueBinding::~QDeclarativeDomValueBinding(void)
- ?qt_metacast@QDeclarativeAnchors@@UAEPAXPBD@Z @ 735 NONAME ; void * QDeclarativeAnchors::qt_metacast(char const *)
- ?isInterface@QDeclarativeMetaType@@SA_NH@Z @ 736 NONAME ; bool QDeclarativeMetaType::isInterface(int)
- ?qt_metacall@QDeclarativeRectangle@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 737 NONAME ; int QDeclarativeRectangle::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 738 NONAME ; class QString QDeclarativePen::trUtf8(char const *, char const *, int)
+ ??1QDeclarativeDomValueBinding@@QAE@XZ @ 734 NONAME ABSENT ; QDeclarativeDomValueBinding::~QDeclarativeDomValueBinding(void)
+ ?qt_metacast@QDeclarativeAnchors@@UAEPAXPBD@Z @ 735 NONAME ABSENT ; void * QDeclarativeAnchors::qt_metacast(char const *)
+ ?isInterface@QDeclarativeMetaType@@SA_NH@Z @ 736 NONAME ABSENT ; bool QDeclarativeMetaType::isInterface(int)
+ ?qt_metacall@QDeclarativeRectangle@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 737 NONAME ABSENT ; int QDeclarativeRectangle::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?trUtf8@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 738 NONAME ABSENT ; class QString QDeclarativePen::trUtf8(char const *, char const *, int)
??0Variant@QDeclarativeParser@@QAE@ABVQString@@PAVNode@AST@QDeclarativeJS@@@Z @ 739 NONAME ; QDeclarativeParser::Variant::Variant(class QString const &, class QDeclarativeJS::AST::Node *)
- ?rootObject@QDeclarativeDomDocument@@QBE?AVQDeclarativeDomObject@@XZ @ 740 NONAME ; class QDeclarativeDomObject QDeclarativeDomDocument::rootObject(void) const
- ?rightChanged@QDeclarativeAnchors@@IAEXXZ @ 741 NONAME ; void QDeclarativeAnchors::rightChanged(void)
+ ?rootObject@QDeclarativeDomDocument@@QBE?AVQDeclarativeDomObject@@XZ @ 740 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomDocument::rootObject(void) const
+ ?rightChanged@QDeclarativeAnchors@@IAEXXZ @ 741 NONAME ABSENT ; void QDeclarativeAnchors::rightChanged(void)
?isReady@QDeclarativePixmap@@QBE_NXZ @ 742 NONAME ; bool QDeclarativePixmap::isReady(void) const
??6QDeclarativeInfo@@QAEAAV0@ABVQByteArray@@@Z @ 743 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QByteArray const &)
?qt_metacast@QDeclarativeEngine@@UAEPAXPBD@Z @ 744 NONAME ; void * QDeclarativeEngine::qt_metacast(char const *)
- ?objectType@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 745 NONAME ; class QByteArray QDeclarativeDomObject::objectType(void) const
- ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 746 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QByteArray const &)
+ ?objectType@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 745 NONAME ABSENT ; class QByteArray QDeclarativeDomObject::objectType(void) const
+ ?addConstructor@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 746 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addConstructor(class QByteArray const &)
?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 747 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeContext *)
- ?staticMetaObject@QDeclarativeDebugExpressionQuery@@2UQMetaObject@@B @ 748 NONAME ; struct QMetaObject const QDeclarativeDebugExpressionQuery::staticMetaObject
- ?queryRootContexts@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugRootContextQuery@@ABVQDeclarativeDebugEngineReference@@PAVQObject@@@Z @ 749 NONAME ; class QDeclarativeDebugRootContextQuery * QDeclarativeEngineDebug::queryRootContexts(class QDeclarativeDebugEngineReference const &, class QObject *)
- ?vector3DFromString@QDeclarativeStringConverters@@YA?AVQVector3D@@ABVQString@@PA_N@Z @ 750 NONAME ; class QVector3D QDeclarativeStringConverters::vector3DFromString(class QString const &, bool *)
+ ?staticMetaObject@QDeclarativeDebugExpressionQuery@@2UQMetaObject@@B @ 748 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugExpressionQuery::staticMetaObject
+ ?queryRootContexts@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugRootContextQuery@@ABVQDeclarativeDebugEngineReference@@PAVQObject@@@Z @ 749 NONAME ABSENT ; class QDeclarativeDebugRootContextQuery * QDeclarativeEngineDebug::queryRootContexts(class QDeclarativeDebugEngineReference const &, class QObject *)
+ ?vector3DFromString@QDeclarativeStringConverters@@YA?AVQVector3D@@ABVQString@@PA_N@Z @ 750 NONAME ABSENT ; class QVector3D QDeclarativeStringConverters::vector3DFromString(class QString const &, bool *)
?rootContext@QDeclarativeView@@QBEPAVQDeclarativeContext@@XZ @ 751 NONAME ; class QDeclarativeContext * QDeclarativeView::rootContext(void) const
- ??_EQDeclarativeDebugPropertyWatch@@UAE@I@Z @ 752 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(unsigned int)
- ?relatedMetaObjectCount@QMetaObjectBuilder@@QBEHXZ @ 753 NONAME ; int QMetaObjectBuilder::relatedMetaObjectCount(void) const
+ ??_EQDeclarativeDebugPropertyWatch@@UAE@I@Z @ 752 NONAME ABSENT ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(unsigned int)
+ ?relatedMetaObjectCount@QMetaObjectBuilder@@QBEHXZ @ 753 NONAME ABSENT ; int QMetaObjectBuilder::relatedMetaObjectCount(void) const
?script@QDeclarativeScriptString@@QBE?AVQString@@XZ @ 754 NONAME ; class QString QDeclarativeScriptString::script(void) const
- ?index@QMetaMethodBuilder@@QBEHXZ @ 755 NONAME ; int QMetaMethodBuilder::index(void) const
- ??4QDeclarativeDomValueBinding@@QAEAAV0@ABV0@@Z @ 756 NONAME ; class QDeclarativeDomValueBinding & QDeclarativeDomValueBinding::operator=(class QDeclarativeDomValueBinding const &)
+ ?index@QMetaMethodBuilder@@QBEHXZ @ 755 NONAME ABSENT ; int QMetaMethodBuilder::index(void) const
+ ??4QDeclarativeDomValueBinding@@QAEAAV0@ABV0@@Z @ 756 NONAME ABSENT ; class QDeclarativeDomValueBinding & QDeclarativeDomValueBinding::operator=(class QDeclarativeDomValueBinding const &)
??0QDeclarativeExpression@@QAE@XZ @ 757 NONAME ; QDeclarativeExpression::QDeclarativeExpression(void)
?paint@QDeclarativeItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 758 NONAME ; void QDeclarativeItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?send@QPacketProtocol@@QAE?AVQPacketAutoSend@@XZ @ 759 NONAME ; class QPacketAutoSend QPacketProtocol::send(void)
- ?countChanged@QDeclarativeListModel@@IAEXXZ @ 760 NONAME ; void QDeclarativeListModel::countChanged(void)
- ??0QDeclarativeGridScaledImage@@QAE@PAVQIODevice@@@Z @ 761 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QIODevice *)
- ??_EQDeclarativeBinding@@UAE@I@Z @ 762 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(unsigned int)
- ?baseMetaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 763 NONAME ; struct QMetaObject const * QDeclarativeType::baseMetaObject(void) const
- ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 764 NONAME ; class QString QDeclarativeDebugConnection::tr(char const *, char const *)
- ?staticMetaObject@QDeclarativeBinding@@2UQMetaObject@@B @ 765 NONAME ; struct QMetaObject const QDeclarativeBinding::staticMetaObject
- ?qualifier@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 766 NONAME ; class QString QDeclarativeDomImport::qualifier(void) const
+ ?send@QPacketProtocol@@QAE?AVQPacketAutoSend@@XZ @ 759 NONAME ABSENT ; class QPacketAutoSend QPacketProtocol::send(void)
+ ?countChanged@QDeclarativeListModel@@IAEXXZ @ 760 NONAME ABSENT ; void QDeclarativeListModel::countChanged(void)
+ ??0QDeclarativeGridScaledImage@@QAE@PAVQIODevice@@@Z @ 761 NONAME ABSENT ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QIODevice *)
+ ??_EQDeclarativeBinding@@UAE@I@Z @ 762 NONAME ABSENT ; QDeclarativeBinding::~QDeclarativeBinding(unsigned int)
+ ?baseMetaObject@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 763 NONAME ABSENT ; struct QMetaObject const * QDeclarativeType::baseMetaObject(void) const
+ ?tr@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 764 NONAME ABSENT ; class QString QDeclarativeDebugConnection::tr(char const *, char const *)
+ ?staticMetaObject@QDeclarativeBinding@@2UQMetaObject@@B @ 765 NONAME ABSENT ; struct QMetaObject const QDeclarativeBinding::staticMetaObject
+ ?qualifier@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 766 NONAME ABSENT ; class QString QDeclarativeDomImport::qualifier(void) const
??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@@Z @ 767 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeContext *)
- ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 768 NONAME ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *)
+ ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 768 NONAME ABSENT ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *)
?contains@QDeclarativePropertyMap@@QBE_NABVQString@@@Z @ 769 NONAME ; bool QDeclarativePropertyMap::contains(class QString const &) const
- ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 770 NONAME ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *)
+ ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 770 NONAME ABSENT ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *)
?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 771 NONAME ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const
- ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 772 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *)
+ ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 772 NONAME ABSENT ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *)
?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 773 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *, int)
- ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 774 NONAME ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const
+ ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 774 NONAME ABSENT ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const
?hasNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 775 NONAME ; bool QDeclarativeProperty::hasNotifySignal(void) const
- ?create@QDeclarativeType@@QBEXPAPAVQObject@@PAPAXI@Z @ 776 NONAME ; void QDeclarativeType::create(class QObject * *, void * *, unsigned int) const
+ ?create@QDeclarativeType@@QBEXPAPAVQObject@@PAPAXI@Z @ 776 NONAME ABSENT ; void QDeclarativeType::create(class QObject * *, void * *, unsigned int) const
?reversible@QDeclarativeTransition@@QBE_NXZ @ 777 NONAME ; bool QDeclarativeTransition::reversible(void) const
- ?invalidPacket@QPacketProtocol@@IAEXXZ @ 778 NONAME ; void QPacketProtocol::invalidPacket(void)
- ??0QDeclarativeDebugObjectReference@@QAE@H@Z @ 779 NONAME ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(int)
- ?superClass@QMetaObjectBuilder@@QBEPBUQMetaObject@@XZ @ 780 NONAME ; struct QMetaObject const * QMetaObjectBuilder::superClass(void) const
+ ?invalidPacket@QPacketProtocol@@IAEXXZ @ 778 NONAME ABSENT ; void QPacketProtocol::invalidPacket(void)
+ ??0QDeclarativeDebugObjectReference@@QAE@H@Z @ 779 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(int)
+ ?superClass@QMetaObjectBuilder@@QBEPBUQMetaObject@@XZ @ 780 NONAME ABSENT ; struct QMetaObject const * QMetaObjectBuilder::superClass(void) const
?isValid@QDeclarativeListReference@@QBE_NXZ @ 781 NONAME ; bool QDeclarativeListReference::isValid(void) const
?source@QDeclarativeView@@QBE?AVQUrl@@XZ @ 782 NONAME ; class QUrl QDeclarativeView::source(void) const
?method@QDeclarativeProperty@@QBE?AVQMetaMethod@@XZ @ 783 NONAME ; class QMetaMethod QDeclarativeProperty::method(void) const
??0QDeclarativeInfo@@QAE@ABV0@@Z @ 784 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfo const &)
- ?deleteFromBinding@QDeclarativeAction@@QAEXXZ @ 785 NONAME ; void QDeclarativeAction::deleteFromBinding(void)
+ ?deleteFromBinding@QDeclarativeAction@@QAEXXZ @ 785 NONAME ABSENT ; void QDeclarativeAction::deleteFromBinding(void)
?setClip@QDeclarativeItem@@QAEX_N@Z @ 786 NONAME ; void QDeclarativeItem::setClip(bool)
??4QDeclarativeCustomParserNode@@QAEAAV0@ABV0@@Z @ 787 NONAME ; class QDeclarativeCustomParserNode & QDeclarativeCustomParserNode::operator=(class QDeclarativeCustomParserNode const &)
- ?color@QDeclarativePen@@QBE?AVQColor@@XZ @ 788 NONAME ; class QColor QDeclarativePen::color(void) const
+ ?color@QDeclarativePen@@QBE?AVQColor@@XZ @ 788 NONAME ABSENT ; class QColor QDeclarativePen::color(void) const
?clear@QDeclarativePixmap@@QAEXXZ @ 789 NONAME ; void QDeclarativePixmap::clear(void)
- ?setDesignable@QMetaPropertyBuilder@@QAEX_N@Z @ 790 NONAME ; void QMetaPropertyBuilder::setDesignable(bool)
- ?setWrapMode@QDeclarativeText@@QAEXW4WrapMode@1@@Z @ 791 NONAME ; void QDeclarativeText::setWrapMode(enum QDeclarativeText::WrapMode)
- ?addClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@0@Z @ 792 NONAME ; int QMetaObjectBuilder::addClassInfo(class QByteArray const &, class QByteArray const &)
- ?qt_metacall@QDeclarativePen@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 793 NONAME ; int QDeclarativePen::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?dynamicProperty@QDeclarativeDomObject@@QBE?AVQDeclarativeDomDynamicProperty@@ABVQByteArray@@@Z @ 794 NONAME ; class QDeclarativeDomDynamicProperty QDeclarativeDomObject::dynamicProperty(class QByteArray const &) const
- ??1QDeclarativeDomComponent@@QAE@XZ @ 795 NONAME ; QDeclarativeDomComponent::~QDeclarativeDomComponent(void)
- ?setRight@QDeclarativeScaleGrid@@QAEXH@Z @ 796 NONAME ; void QDeclarativeScaleGrid::setRight(int)
- ?isList@QDeclarativeMetaType@@SA_NH@Z @ 797 NONAME ; bool QDeclarativeMetaType::isList(int)
+ ?setDesignable@QMetaPropertyBuilder@@QAEX_N@Z @ 790 NONAME ABSENT ; void QMetaPropertyBuilder::setDesignable(bool)
+ ?setWrapMode@QDeclarativeText@@QAEXW4WrapMode@1@@Z @ 791 NONAME ABSENT ; void QDeclarativeText::setWrapMode(enum QDeclarativeText::WrapMode)
+ ?addClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@0@Z @ 792 NONAME ABSENT ; int QMetaObjectBuilder::addClassInfo(class QByteArray const &, class QByteArray const &)
+ ?qt_metacall@QDeclarativePen@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 793 NONAME ABSENT ; int QDeclarativePen::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?dynamicProperty@QDeclarativeDomObject@@QBE?AVQDeclarativeDomDynamicProperty@@ABVQByteArray@@@Z @ 794 NONAME ABSENT ; class QDeclarativeDomDynamicProperty QDeclarativeDomObject::dynamicProperty(class QByteArray const &) const
+ ??1QDeclarativeDomComponent@@QAE@XZ @ 795 NONAME ABSENT ; QDeclarativeDomComponent::~QDeclarativeDomComponent(void)
+ ?setRight@QDeclarativeScaleGrid@@QAEXH@Z @ 796 NONAME ABSENT ; void QDeclarativeScaleGrid::setRight(int)
+ ?isList@QDeclarativeMetaType@@SA_NH@Z @ 797 NONAME ABSENT ; bool QDeclarativeMetaType::isList(int)
??6QDeclarativeInfo@@QAEAAV0@VQTextStreamManipulator@@@Z @ 798 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStreamManipulator)
?index@QDeclarativeProperty@@QBEHXZ @ 799 NONAME ; int QDeclarativeProperty::index(void) const
- ?d_func@QMetaPropertyBuilder@@ABEPAVQMetaPropertyBuilderPrivate@@XZ @ 800 NONAME ; class QMetaPropertyBuilderPrivate * QMetaPropertyBuilder::d_func(void) const
- ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 801 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *, int)
- ?setEnabled@QDeclarativeAbstractBinding@@QAEX_N@Z @ 802 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool)
- ?returnType@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 803 NONAME ; class QByteArray QMetaMethodBuilder::returnType(void) const
- ?propertyValueSourceCast@QDeclarativeType@@QBEHXZ @ 804 NONAME ; int QDeclarativeType::propertyValueSourceCast(void) const
- ?mousePressEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 805 NONAME ; void QDeclarativeText::mousePressEvent(class QGraphicsSceneMouseEvent *)
- ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 806 NONAME ; class QString QDeclarativeText::trUtf8(char const *, char const *)
- ?constructor@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 807 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::constructor(int) const
- ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PAVQObject@@@Z @ 808 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(class QObject *)
+ ?d_func@QMetaPropertyBuilder@@ABEPAVQMetaPropertyBuilderPrivate@@XZ @ 800 NONAME ABSENT ; class QMetaPropertyBuilderPrivate * QMetaPropertyBuilder::d_func(void) const
+ ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0H@Z @ 801 NONAME ABSENT ; class QString QDeclarativeScaleGrid::tr(char const *, char const *, int)
+ ?setEnabled@QDeclarativeAbstractBinding@@QAEX_N@Z @ 802 NONAME ABSENT ; void QDeclarativeAbstractBinding::setEnabled(bool)
+ ?returnType@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 803 NONAME ABSENT ; class QByteArray QMetaMethodBuilder::returnType(void) const
+ ?propertyValueSourceCast@QDeclarativeType@@QBEHXZ @ 804 NONAME ABSENT ; int QDeclarativeType::propertyValueSourceCast(void) const
+ ?mousePressEvent@QDeclarativeText@@MAEXPAVQGraphicsSceneMouseEvent@@@Z @ 805 NONAME ABSENT ; void QDeclarativeText::mousePressEvent(class QGraphicsSceneMouseEvent *)
+ ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 806 NONAME ABSENT ; class QString QDeclarativeText::trUtf8(char const *, char const *)
+ ?constructor@QMetaObjectBuilder@@QBE?AVQMetaMethodBuilder@@H@Z @ 807 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::constructor(int) const
+ ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PAVQObject@@@Z @ 808 NONAME ABSENT ; class QMetaProperty QDeclarativeMetaType::defaultProperty(class QObject *)
?resetHeight@QDeclarativeItemPrivate@@UAEXXZ @ 809 NONAME ; void QDeclarativeItemPrivate::resetHeight(void)
- ?qt_metacast@QDeclarativeDebugPropertyWatch@@UAEPAXPBD@Z @ 810 NONAME ; void * QDeclarativeDebugPropertyWatch::qt_metacast(char const *)
+ ?qt_metacast@QDeclarativeDebugPropertyWatch@@UAEPAXPBD@Z @ 810 NONAME ABSENT ; void * QDeclarativeDebugPropertyWatch::qt_metacast(char const *)
??1QDeclarativeStateOperation@@UAE@XZ @ 811 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(void)
- ??_EQDeclarativeDebugQuery@@UAE@I@Z @ 812 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(unsigned int)
- ?update@QDeclarativeAbstractBinding@@QAEXXZ @ 813 NONAME ; void QDeclarativeAbstractBinding::update(void)
- ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 814 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *, int)
- ?read@QPacketProtocol@@QAE?AVQPacket@@XZ @ 815 NONAME ; class QPacket QPacketProtocol::read(void)
+ ??_EQDeclarativeDebugQuery@@UAE@I@Z @ 812 NONAME ABSENT ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(unsigned int)
+ ?update@QDeclarativeAbstractBinding@@QAEXXZ @ 813 NONAME ABSENT ; void QDeclarativeAbstractBinding::update(void)
+ ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 814 NONAME ABSENT ; class QString QDeclarativeBehavior::tr(char const *, char const *, int)
+ ?read@QPacketProtocol@@QAE?AVQPacket@@XZ @ 815 NONAME ABSENT ; class QPacket QPacketProtocol::read(void)
?setParentItem@QDeclarativeItem@@QAEXPAV1@@Z @ 816 NONAME ; void QDeclarativeItem::setParentItem(class QDeclarativeItem *)
?qmlAttachedProperties@QDeclarativeComponent@@SAPAVQDeclarativeComponentAttached@@PAVQObject@@@Z @ 817 NONAME ; class QDeclarativeComponentAttached * QDeclarativeComponent::qmlAttachedProperties(class QObject *)
??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 818 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *)
?valueChanged@QDeclarativeExpression@@IAEXXZ @ 819 NONAME ; void QDeclarativeExpression::valueChanged(void)
??_EQDeclarativeView@@UAE@I@Z @ 820 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int)
?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 821 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int)
- ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 822 NONAME ; class QByteArray QMetaMethodBuilder::tag(void) const
- ?getStaticMetaObject@QPacketProtocol@@SAABUQMetaObject@@XZ @ 823 NONAME ; struct QMetaObject const & QPacketProtocol::getStaticMetaObject(void)
+ ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 822 NONAME ABSENT ; class QByteArray QMetaMethodBuilder::tag(void) const
+ ?getStaticMetaObject@QPacketProtocol@@SAABUQMetaObject@@XZ @ 823 NONAME ABSENT ; struct QMetaObject const & QPacketProtocol::getStaticMetaObject(void)
?setContext@QDeclarativeScriptString@@QAEXPAVQDeclarativeContext@@@Z @ 824 NONAME ; void QDeclarativeScriptString::setContext(class QDeclarativeContext *)
?addImageProvider@QDeclarativeEngine@@QAEXABVQString@@PAVQDeclarativeImageProvider@@@Z @ 825 NONAME ; void QDeclarativeEngine::addImageProvider(class QString const &, class QDeclarativeImageProvider *)
?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 826 NONAME ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const
?stateChanged@QDeclarativeItem@@IAEXABVQString@@@Z @ 827 NONAME ; void QDeclarativeItem::stateChanged(class QString const &)
- ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 828 NONAME ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment)
- ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 829 NONAME ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &)
- ?setDynamic@QMetaPropertyBuilder@@QAEX_N@Z @ 830 NONAME ; void QMetaPropertyBuilder::setDynamic(bool)
+ ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 828 NONAME ABSENT ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment)
+ ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 829 NONAME ABSENT ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &)
+ ?setDynamic@QMetaPropertyBuilder@@QAEX_N@Z @ 830 NONAME ABSENT ; void QMetaPropertyBuilder::setDynamic(bool)
?pixmap@QDeclarativePixmap@@QBEABVQPixmap@@XZ @ 831 NONAME ; class QPixmap const & QDeclarativePixmap::pixmap(void) const
?d_func@QDeclarativeEngine@@ABEPBVQDeclarativeEnginePrivate@@XZ @ 832 NONAME ; class QDeclarativeEnginePrivate const * QDeclarativeEngine::d_func(void) const
- ?toBinding@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueBinding@@XZ @ 833 NONAME ; class QDeclarativeDomValueBinding QDeclarativeDomValue::toBinding(void) const
+ ?toBinding@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueBinding@@XZ @ 833 NONAME ABSENT ; class QDeclarativeDomValueBinding QDeclarativeDomValue::toBinding(void) const
?removeImageProvider@QDeclarativeEngine@@QAEXABVQString@@@Z @ 834 NONAME ; void QDeclarativeEngine::removeImageProvider(class QString const &)
- ?horizontalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 835 NONAME ; void QDeclarativeAnchors::horizontalCenterOffsetChanged(void)
+ ?horizontalCenterOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 835 NONAME ABSENT ; void QDeclarativeAnchors::horizontalCenterOffsetChanged(void)
?tr@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 836 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *)
?d_func@QDeclarativeItem@@ABEPBVQDeclarativeItemPrivate@@XZ @ 837 NONAME ; class QDeclarativeItemPrivate const * QDeclarativeItem::d_func(void) const
- ?isUser@QMetaPropertyBuilder@@QBE_NXZ @ 838 NONAME ; bool QMetaPropertyBuilder::isUser(void) const
- ?doUpdate@QDeclarativeRectangle@@AAEXXZ @ 839 NONAME ; void QDeclarativeRectangle::doUpdate(void)
+ ?isUser@QMetaPropertyBuilder@@QBE_NXZ @ 838 NONAME ABSENT ; bool QMetaPropertyBuilder::isUser(void) const
+ ?doUpdate@QDeclarativeRectangle@@AAEXXZ @ 839 NONAME ABSENT ; void QDeclarativeRectangle::doUpdate(void)
?qmlExecuteDeferred@@YAXPAVQObject@@@Z @ 840 NONAME ; void qmlExecuteDeferred(class QObject *)
?setImplicitHeight@QDeclarativeItem@@IAEXM@Z @ 841 NONAME ; void QDeclarativeItem::setImplicitHeight(float)
- ?horizontalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 842 NONAME ; float QDeclarativeAnchors::horizontalCenterOffset(void) const
- ?resetRight@QDeclarativeAnchors@@QAEXXZ @ 843 NONAME ; void QDeclarativeAnchors::resetRight(void)
+ ?horizontalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 842 NONAME ABSENT ; float QDeclarativeAnchors::horizontalCenterOffset(void) const
+ ?resetRight@QDeclarativeAnchors@@QAEXXZ @ 843 NONAME ABSENT ; void QDeclarativeAnchors::resetRight(void)
??6QDeclarativeInfo@@QAEAAV0@J@Z @ 844 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(long)
?isReady@QDeclarativeComponent@@QBE_NXZ @ 845 NONAME ; bool QDeclarativeComponent::isReady(void) const
- ??4QDeclarativeDebugObjectReference@@QAEAAV0@ABV0@@Z @ 846 NONAME ; class QDeclarativeDebugObjectReference & QDeclarativeDebugObjectReference::operator=(class QDeclarativeDebugObjectReference const &)
- ??1QDeclarativeDomDynamicProperty@@QAE@XZ @ 847 NONAME ; QDeclarativeDomDynamicProperty::~QDeclarativeDomDynamicProperty(void)
- ??1QDeclarativeBehavior@@UAE@XZ @ 848 NONAME ; QDeclarativeBehavior::~QDeclarativeBehavior(void)
+ ??4QDeclarativeDebugObjectReference@@QAEAAV0@ABV0@@Z @ 846 NONAME ABSENT ; class QDeclarativeDebugObjectReference & QDeclarativeDebugObjectReference::operator=(class QDeclarativeDebugObjectReference const &)
+ ??1QDeclarativeDomDynamicProperty@@QAE@XZ @ 847 NONAME ABSENT ; QDeclarativeDomDynamicProperty::~QDeclarativeDomDynamicProperty(void)
+ ??1QDeclarativeBehavior@@UAE@XZ @ 848 NONAME ABSENT ; QDeclarativeBehavior::~QDeclarativeBehavior(void)
?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@@Z @ 849 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *)
- ?qt_metacall@QDeclarativeDebugClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 850 NONAME ; int QDeclarativeDebugClient::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 851 NONAME ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const
- ??1QDeclarativeDebugQuery@@UAE@XZ @ 852 NONAME ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void)
+ ?qt_metacall@QDeclarativeDebugClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 850 NONAME ABSENT ; int QDeclarativeDebugClient::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 851 NONAME ABSENT ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const
+ ??1QDeclarativeDebugQuery@@UAE@XZ @ 852 NONAME ABSENT ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void)
?data_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 853 NONAME ; void QDeclarativeItemPrivate::data_append(class QDeclarativeListProperty<class QObject> *, class QObject *)
?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 854 NONAME ; class QString QDeclarativeState::tr(char const *, char const *)
- ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 855 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int)
- ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 856 NONAME ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *)
- ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 857 NONAME ; float QDeclarativeAnchors::bottomMargin(void) const
+ ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 855 NONAME ABSENT ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int)
+ ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 856 NONAME ABSENT ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *)
+ ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 857 NONAME ABSENT ; float QDeclarativeAnchors::bottomMargin(void) const
?q_func@QDeclarativeItemPrivate@@AAEPAVQDeclarativeItem@@XZ @ 858 NONAME ; class QDeclarativeItem * QDeclarativeItemPrivate::q_func(void)
- ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 859 NONAME ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *)
- ??1QDeclarativeDomList@@QAE@XZ @ 860 NONAME ; QDeclarativeDomList::~QDeclarativeDomList(void)
- ??0QDeclarativeOpenMetaObjectType@@QAE@PBUQMetaObject@@PAVQDeclarativeEngine@@@Z @ 861 NONAME ; QDeclarativeOpenMetaObjectType::QDeclarativeOpenMetaObjectType(struct QMetaObject const *, class QDeclarativeEngine *)
- ?removeProperty@QMetaObjectBuilder@@QAEXH@Z @ 862 NONAME ; void QMetaObjectBuilder::removeProperty(int)
- ?staticMetaObject@QDeclarativeScaleGrid@@2UQMetaObject@@B @ 863 NONAME ; struct QMetaObject const QDeclarativeScaleGrid::staticMetaObject
- ??0QDeclarativeDomObject@@QAE@ABV0@@Z @ 864 NONAME ; QDeclarativeDomObject::QDeclarativeDomObject(class QDeclarativeDomObject const &)
- ?qt_metacast@QDeclarativeDebugWatch@@UAEPAXPBD@Z @ 865 NONAME ; void * QDeclarativeDebugWatch::qt_metacast(char const *)
+ ?trUtf8@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 859 NONAME ABSENT ; class QString QDeclarativeScaleGrid::trUtf8(char const *, char const *)
+ ??1QDeclarativeDomList@@QAE@XZ @ 860 NONAME ABSENT ; QDeclarativeDomList::~QDeclarativeDomList(void)
+ ??0QDeclarativeOpenMetaObjectType@@QAE@PBUQMetaObject@@PAVQDeclarativeEngine@@@Z @ 861 NONAME ABSENT ; QDeclarativeOpenMetaObjectType::QDeclarativeOpenMetaObjectType(struct QMetaObject const *, class QDeclarativeEngine *)
+ ?removeProperty@QMetaObjectBuilder@@QAEXH@Z @ 862 NONAME ABSENT ; void QMetaObjectBuilder::removeProperty(int)
+ ?staticMetaObject@QDeclarativeScaleGrid@@2UQMetaObject@@B @ 863 NONAME ABSENT ; struct QMetaObject const QDeclarativeScaleGrid::staticMetaObject
+ ??0QDeclarativeDomObject@@QAE@ABV0@@Z @ 864 NONAME ABSENT ; QDeclarativeDomObject::QDeclarativeDomObject(class QDeclarativeDomObject const &)
+ ?qt_metacast@QDeclarativeDebugWatch@@UAEPAXPBD@Z @ 865 NONAME ABSENT ; void * QDeclarativeDebugWatch::qt_metacast(char const *)
?implicitHeight@QDeclarativeItem@@QBEMXZ @ 866 NONAME ; float QDeclarativeItem::implicitHeight(void) const
- ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 867 NONAME ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *)
+ ?trUtf8@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 867 NONAME ABSENT ; class QString QDeclarativeDebugPropertyWatch::trUtf8(char const *, char const *)
??6@YA?AVQDebug@@V0@ABVQDeclarativeError@@@Z @ 868 NONAME ; class QDebug operator<<(class QDebug, class QDeclarativeError const &)
?setContextProperty@QDeclarativeContext@@QAEXABVQString@@ABVQVariant@@@Z @ 869 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QVariant const &)
- ?imports@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeDomImport@@@@XZ @ 870 NONAME ; class QList<class QDeclarativeDomImport> QDeclarativeDomDocument::imports(void) const
+ ?imports@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeDomImport@@@@XZ @ 870 NONAME ABSENT ; class QList<class QDeclarativeDomImport> QDeclarativeDomDocument::imports(void) const
?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 871 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *)
- ?getStaticMetaObject@QDeclarativePen@@SAABUQMetaObject@@XZ @ 872 NONAME ; struct QMetaObject const & QDeclarativePen::getStaticMetaObject(void)
- ?penChanged@QDeclarativePen@@IAEXXZ @ 873 NONAME ; void QDeclarativePen::penChanged(void)
- ?propertyTypeName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 874 NONAME ; class QByteArray QDeclarativeDomDynamicProperty::propertyTypeName(void) const
- ?position@QDeclarativeDomValue@@QBEHXZ @ 875 NONAME ; int QDeclarativeDomValue::position(void) const
+ ?getStaticMetaObject@QDeclarativePen@@SAABUQMetaObject@@XZ @ 872 NONAME ABSENT ; struct QMetaObject const & QDeclarativePen::getStaticMetaObject(void)
+ ?penChanged@QDeclarativePen@@IAEXXZ @ 873 NONAME ABSENT ; void QDeclarativePen::penChanged(void)
+ ?propertyTypeName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 874 NONAME ABSENT ; class QByteArray QDeclarativeDomDynamicProperty::propertyTypeName(void) const
+ ?position@QDeclarativeDomValue@@QBEHXZ @ 875 NONAME ABSENT ; int QDeclarativeDomValue::position(void) const
?setWidth@QDeclarativeItemPrivate@@UAEXM@Z @ 876 NONAME ; void QDeclarativeItemPrivate::setWidth(float)
- ?staticMetaObject@QDeclarativeDebugWatch@@2UQMetaObject@@B @ 877 NONAME ; struct QMetaObject const QDeclarativeDebugWatch::staticMetaObject
+ ?staticMetaObject@QDeclarativeDebugWatch@@2UQMetaObject@@B @ 877 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugWatch::staticMetaObject
??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@@Z @ 878 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &)
??_EQDeclarativeContext@@UAE@I@Z @ 879 NONAME ; QDeclarativeContext::~QDeclarativeContext(unsigned int)
- ?staticMetaObject@QDeclarativeDebugQuery@@2UQMetaObject@@B @ 880 NONAME ; struct QMetaObject const QDeclarativeDebugQuery::staticMetaObject
+ ?staticMetaObject@QDeclarativeDebugQuery@@2UQMetaObject@@B @ 880 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugQuery::staticMetaObject
??0QDeclarativeExtensionPlugin@@QAE@PAVQObject@@@Z @ 881 NONAME ; QDeclarativeExtensionPlugin::QDeclarativeExtensionPlugin(class QObject *)
- ?resetBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@@Z @ 882 NONAME ; bool QDeclarativeEngineDebug::resetBindingForObject(int, class QString const &)
- ??_EQDeclarativeOpenMetaObject@@UAE@I@Z @ 883 NONAME ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(unsigned int)
+ ?resetBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@@Z @ 882 NONAME ABSENT ; bool QDeclarativeEngineDebug::resetBindingForObject(int, class QString const &)
+ ??_EQDeclarativeOpenMetaObject@@UAE@I@Z @ 883 NONAME ABSENT ; QDeclarativeOpenMetaObject::~QDeclarativeOpenMetaObject(unsigned int)
?states@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 884 NONAME ; class QDeclarativeListProperty<class QDeclarativeState> QDeclarativeItemPrivate::states(void)
- ?rawMetaObjectForType@QDeclarativePropertyPrivate@@SAPBUQMetaObject@@PAVQDeclarativeEnginePrivate@@H@Z @ 885 NONAME ; struct QMetaObject const * QDeclarativePropertyPrivate::rawMetaObjectForType(class QDeclarativeEnginePrivate *, int)
+ ?rawMetaObjectForType@QDeclarativePropertyPrivate@@SAPBUQMetaObject@@PAVQDeclarativeEnginePrivate@@H@Z @ 885 NONAME ABSENT ; struct QMetaObject const * QDeclarativePropertyPrivate::rawMetaObjectForType(class QDeclarativeEnginePrivate *, int)
?setHeight@QDeclarativeItem@@QAEXM@Z @ 886 NONAME ; void QDeclarativeItem::setHeight(float)
- ??0QDeclarativeDomDocument@@QAE@ABV0@@Z @ 887 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(class QDeclarativeDomDocument const &)
- ?position@QDeclarativeDomDynamicProperty@@QBEHXZ @ 888 NONAME ; int QDeclarativeDomDynamicProperty::position(void) const
+ ??0QDeclarativeDomDocument@@QAE@ABV0@@Z @ 887 NONAME ABSENT ; QDeclarativeDomDocument::QDeclarativeDomDocument(class QDeclarativeDomDocument const &)
+ ?position@QDeclarativeDomDynamicProperty@@QBEHXZ @ 888 NONAME ABSENT ; int QDeclarativeDomDynamicProperty::position(void) const
?animations@QDeclarativeTransition@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeAbstractAnimation@@@@XZ @ 889 NONAME ; class QDeclarativeListProperty<class QDeclarativeAbstractAnimation> QDeclarativeTransition::animations(void)
?tr@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 890 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *, int)
- ??_EQMetaObjectBuilder@@UAE@I@Z @ 891 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(unsigned int)
- ?propertyName@QDeclarativeDomProperty@@QBE?AVQByteArray@@XZ @ 892 NONAME ; class QByteArray QDeclarativeDomProperty::propertyName(void) const
- ?setBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@ABVQVariant@@_N@Z @ 893 NONAME ; bool QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool)
+ ??_EQMetaObjectBuilder@@UAE@I@Z @ 891 NONAME ABSENT ; QMetaObjectBuilder::~QMetaObjectBuilder(unsigned int)
+ ?propertyName@QDeclarativeDomProperty@@QBE?AVQByteArray@@XZ @ 892 NONAME ABSENT ; class QByteArray QDeclarativeDomProperty::propertyName(void) const
+ ?setBindingForObject@QDeclarativeEngineDebug@@QAE_NHABVQString@@ABVQVariant@@_N@Z @ 893 NONAME ABSENT ; bool QDeclarativeEngineDebug::setBindingForObject(int, class QString const &, class QVariant const &, bool)
??0QDeclarativeView@@QAE@PAVQWidget@@@Z @ 894 NONAME ; QDeclarativeView::QDeclarativeView(class QWidget *)
?createObject@QDeclarativeComponent@@IAE?AVQScriptValue@@PAVQObject@@@Z @ 895 NONAME ; class QScriptValue QDeclarativeComponent::createObject(class QObject *)
- ?name@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 896 NONAME ; class QString QDeclarativeDebugPropertyReference::name(void) const
- ?object@QDeclarativeDomValueValueSource@@QBE?AVQDeclarativeDomObject@@XZ @ 897 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueSource::object(void) const
- ??0QMetaPropertyBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 898 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(class QMetaObjectBuilder const *, int)
- ?d_func@QDeclarativeEngineDebug@@ABEPBVQDeclarativeEngineDebugPrivate@@XZ @ 899 NONAME ; class QDeclarativeEngineDebugPrivate const * QDeclarativeEngineDebug::d_func(void) const
- ?d_func@QDeclarativeBinding@@AAEPAVQDeclarativeBindingPrivate@@XZ @ 900 NONAME ; class QDeclarativeBindingPrivate * QDeclarativeBinding::d_func(void)
- ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 901 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *, int)
- ?attachedPropertiesFuncId@QDeclarativeMetaType@@SAHPBUQMetaObject@@@Z @ 902 NONAME ; int QDeclarativeMetaType::attachedPropertiesFuncId(struct QMetaObject const *)
+ ?name@QDeclarativeDebugPropertyReference@@QBE?AVQString@@XZ @ 896 NONAME ABSENT ; class QString QDeclarativeDebugPropertyReference::name(void) const
+ ?object@QDeclarativeDomValueValueSource@@QBE?AVQDeclarativeDomObject@@XZ @ 897 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomValueValueSource::object(void) const
+ ??0QMetaPropertyBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 898 NONAME ABSENT ; QMetaPropertyBuilder::QMetaPropertyBuilder(class QMetaObjectBuilder const *, int)
+ ?d_func@QDeclarativeEngineDebug@@ABEPBVQDeclarativeEngineDebugPrivate@@XZ @ 899 NONAME ABSENT ; class QDeclarativeEngineDebugPrivate const * QDeclarativeEngineDebug::d_func(void) const
+ ?d_func@QDeclarativeBinding@@AAEPAVQDeclarativeBindingPrivate@@XZ @ 900 NONAME ABSENT ; class QDeclarativeBindingPrivate * QDeclarativeBinding::d_func(void)
+ ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0H@Z @ 901 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *, int)
+ ?attachedPropertiesFuncId@QDeclarativeMetaType@@SAHPBUQMetaObject@@@Z @ 902 NONAME ABSENT ; int QDeclarativeMetaType::attachedPropertiesFuncId(struct QMetaObject const *)
?horizontalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 903 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::horizontalCenter(void) const
?isNull@QDeclarativeComponent@@QBE_NXZ @ 904 NONAME ; bool QDeclarativeComponent::isNull(void) const
- ?d_func@QDeclarativeRectangle@@ABEPBVQDeclarativeRectanglePrivate@@XZ @ 905 NONAME ; class QDeclarativeRectanglePrivate const * QDeclarativeRectangle::d_func(void) const
- ?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 906 NONAME ; void QDeclarativeAnchors::setRightMargin(float)
- ?className@QMetaObjectBuilder@@QBE?AVQByteArray@@XZ @ 907 NONAME ; class QByteArray QMetaObjectBuilder::className(void) const
+ ?d_func@QDeclarativeRectangle@@ABEPBVQDeclarativeRectanglePrivate@@XZ @ 905 NONAME ABSENT ; class QDeclarativeRectanglePrivate const * QDeclarativeRectangle::d_func(void) const
+ ?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 906 NONAME ABSENT ; void QDeclarativeAnchors::setRightMargin(float)
+ ?className@QMetaObjectBuilder@@QBE?AVQByteArray@@XZ @ 907 NONAME ABSENT ; class QByteArray QMetaObjectBuilder::className(void) const
??0QDeclarativeState@@QAE@PAVQObject@@@Z @ 908 NONAME ; QDeclarativeState::QDeclarativeState(class QObject *)
- ?contexts@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugContextReference@@@@XZ @ 909 NONAME ; class QList<class QDeclarativeDebugContextReference> QDeclarativeDebugContextReference::contexts(void) const
+ ?contexts@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugContextReference@@@@XZ @ 909 NONAME ABSENT ; class QList<class QDeclarativeDebugContextReference> QDeclarativeDebugContextReference::contexts(void) const
?keyReleaseEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 910 NONAME ; void QDeclarativeItem::keyReleaseEvent(class QKeyEvent *)
- ?qt_metacall@QDeclarativeAnchors@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 911 NONAME ; int QDeclarativeAnchors::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??0QDeclarativeAnchors@@QAE@PAVQGraphicsObject@@PAVQObject@@@Z @ 912 NONAME ; QDeclarativeAnchors::QDeclarativeAnchors(class QGraphicsObject *, class QObject *)
+ ?qt_metacall@QDeclarativeAnchors@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 911 NONAME ABSENT ; int QDeclarativeAnchors::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??0QDeclarativeAnchors@@QAE@PAVQGraphicsObject@@PAVQObject@@@Z @ 912 NONAME ABSENT ; QDeclarativeAnchors::QDeclarativeAnchors(class QGraphicsObject *, class QObject *)
??4QDeclarativeScriptString@@QAEAAV0@ABV0@@Z @ 913 NONAME ; class QDeclarativeScriptString & QDeclarativeScriptString::operator=(class QDeclarativeScriptString const &)
- ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 914 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty const &)
- ?hasNotifySignal@QMetaPropertyBuilder@@QBE_NXZ @ 915 NONAME ; bool QMetaPropertyBuilder::hasNotifySignal(void) const
- ??4QDeclarativeDomImport@@QAEAAV0@ABV0@@Z @ 916 NONAME ; class QDeclarativeDomImport & QDeclarativeDomImport::operator=(class QDeclarativeDomImport const &)
- ?resetFill@QDeclarativeAnchors@@QAEXXZ @ 917 NONAME ; void QDeclarativeAnchors::resetFill(void)
+ ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectProperty@QDeclarativeEngineDebugServer@@@Z @ 914 NONAME ABSENT ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectProperty const &)
+ ?hasNotifySignal@QMetaPropertyBuilder@@QBE_NXZ @ 915 NONAME ABSENT ; bool QMetaPropertyBuilder::hasNotifySignal(void) const
+ ??4QDeclarativeDomImport@@QAEAAV0@ABV0@@Z @ 916 NONAME ABSENT ; class QDeclarativeDomImport & QDeclarativeDomImport::operator=(class QDeclarativeDomImport const &)
+ ?resetFill@QDeclarativeAnchors@@QAEXXZ @ 917 NONAME ABSENT ; void QDeclarativeAnchors::resetFill(void)
??6QDeclarativeInfo@@QAEAAV0@_K@Z @ 918 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned long long)
?d_func@QDeclarativeComponent@@ABEPBVQDeclarativeComponentPrivate@@XZ @ 919 NONAME ; class QDeclarativeComponentPrivate const * QDeclarativeComponent::d_func(void) const
- ??0QDeclarativeBehavior@@QAE@PAVQObject@@@Z @ 920 NONAME ; QDeclarativeBehavior::QDeclarativeBehavior(class QObject *)
- ?length@QDeclarativeDomValue@@QBEHXZ @ 921 NONAME ; int QDeclarativeDomValue::length(void) const
- ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 922 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *, int)
- ??0QDeclarativeType@@AAE@HABURegisterInterface@QDeclarativePrivate@@@Z @ 923 NONAME ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterInterface const &)
+ ??0QDeclarativeBehavior@@QAE@PAVQObject@@@Z @ 920 NONAME ABSENT ; QDeclarativeBehavior::QDeclarativeBehavior(class QObject *)
+ ?length@QDeclarativeDomValue@@QBEHXZ @ 921 NONAME ABSENT ; int QDeclarativeDomValue::length(void) const
+ ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 922 NONAME ABSENT ; class QString QDeclarativeBinding::trUtf8(char const *, char const *, int)
+ ??0QDeclarativeType@@AAE@HABURegisterInterface@QDeclarativePrivate@@@Z @ 923 NONAME ABSENT ; QDeclarativeType::QDeclarativeType(int, struct QDeclarativePrivate::RegisterInterface const &)
?scopeObject@QDeclarativeScriptString@@QBEPAVQObject@@XZ @ 924 NONAME ; class QObject * QDeclarativeScriptString::scopeObject(void) const
?left@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 925 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::left(void) const
- ??1QDeclarativeDebuggerStatus@@UAE@XZ @ 926 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(void)
+ ??1QDeclarativeDebuggerStatus@@UAE@XZ @ 926 NONAME ABSENT ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(void)
??6QDeclarativeInfo@@QAEAAV0@ABVQLatin1String@@@Z @ 927 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QLatin1String const &)
?at@QDeclarativeListReference@@QBEPAVQObject@@H@Z @ 928 NONAME ; class QObject * QDeclarativeListReference::at(int) const
- ?metaObject@QDeclarativeDebugWatch@@UBEPBUQMetaObject@@XZ @ 929 NONAME ; struct QMetaObject const * QDeclarativeDebugWatch::metaObject(void) const
- ?qt_metacast@QListModelInterface@@UAEPAXPBD@Z @ 930 NONAME ; void * QListModelInterface::qt_metacast(char const *)
- ?deserialize@QMetaObjectBuilder@@QAEXAAVQDataStream@@ABV?$QMap@VQByteArray@@PB$$CBUQMetaObject@@@@@Z @ 931 NONAME ; void QMetaObjectBuilder::deserialize(class QDataStream &, class QMap<class QByteArray, struct QMetaObject const *> const &)
+ ?metaObject@QDeclarativeDebugWatch@@UBEPBUQMetaObject@@XZ @ 929 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugWatch::metaObject(void) const
+ ?qt_metacast@QListModelInterface@@UAEPAXPBD@Z @ 930 NONAME ABSENT ; void * QListModelInterface::qt_metacast(char const *)
+ ?deserialize@QMetaObjectBuilder@@QAEXAAVQDataStream@@ABV?$QMap@VQByteArray@@PB$$CBUQMetaObject@@@@@Z @ 931 NONAME ABSENT ; void QMetaObjectBuilder::deserialize(class QDataStream &, class QMap<class QByteArray, struct QMetaObject const *> const &)
?canClear@QDeclarativeListReference@@QBE_NXZ @ 932 NONAME ; bool QDeclarativeListReference::canClear(void) const
??4QDeclarativeCustomParserProperty@@QAEAAV0@ABV0@@Z @ 933 NONAME ; class QDeclarativeCustomParserProperty & QDeclarativeCustomParserProperty::operator=(class QDeclarativeCustomParserProperty const &)
- ?parameterNames@QMetaMethodBuilder@@QBE?AV?$QList@VQByteArray@@@@XZ @ 934 NONAME ; class QList<class QByteArray> QMetaMethodBuilder::parameterNames(void) const
- ?get@QDeclarativeListModel@@QBE?AVQScriptValue@@H@Z @ 935 NONAME ; class QScriptValue QDeclarativeListModel::get(int) const
- ?createSize@QDeclarativeType@@QBEHXZ @ 936 NONAME ; int QDeclarativeType::createSize(void) const
+ ?parameterNames@QMetaMethodBuilder@@QBE?AV?$QList@VQByteArray@@@@XZ @ 934 NONAME ABSENT ; class QList<class QByteArray> QMetaMethodBuilder::parameterNames(void) const
+ ?get@QDeclarativeListModel@@QBE?AVQScriptValue@@H@Z @ 935 NONAME ABSENT ; class QScriptValue QDeclarativeListModel::get(int) const
+ ?createSize@QDeclarativeType@@QBEHXZ @ 936 NONAME ABSENT ; int QDeclarativeType::createSize(void) const
?rootContext@QDeclarativeEngine@@QBEPAVQDeclarativeContext@@XZ @ 937 NONAME ; class QDeclarativeContext * QDeclarativeEngine::rootContext(void) const
- ?isValueSource@QDeclarativeDomValue@@QBE_NXZ @ 938 NONAME ; bool QDeclarativeDomValue::isValueSource(void) const
+ ?isValueSource@QDeclarativeDomValue@@QBE_NXZ @ 938 NONAME ABSENT ; bool QDeclarativeDomValue::isValueSource(void) const
?isWritable@QDeclarativeProperty@@QBE_NXZ @ 939 NONAME ; bool QDeclarativeProperty::isWritable(void) const
?setKeepMouseGrab@QDeclarativeItem@@QAEX_N@Z @ 940 NONAME ; void QDeclarativeItem::setKeepMouseGrab(bool)
- ??0QDeclarativeDebugContextReference@@QAE@XZ @ 941 NONAME ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(void)
- ?setParameterNames@QMetaMethodBuilder@@QAEXABV?$QList@VQByteArray@@@@@Z @ 942 NONAME ; void QMetaMethodBuilder::setParameterNames(class QList<class QByteArray> const &)
- ?getStaticMetaObject@QDeclarativeDebugRootContextQuery@@SAABUQMetaObject@@XZ @ 943 NONAME ; struct QMetaObject const & QDeclarativeDebugRootContextQuery::getStaticMetaObject(void)
- ?textChanged@QDeclarativeText@@IAEXABVQString@@@Z @ 944 NONAME ; void QDeclarativeText::textChanged(class QString const &)
+ ??0QDeclarativeDebugContextReference@@QAE@XZ @ 941 NONAME ABSENT ; QDeclarativeDebugContextReference::QDeclarativeDebugContextReference(void)
+ ?setParameterNames@QMetaMethodBuilder@@QAEXABV?$QList@VQByteArray@@@@@Z @ 942 NONAME ABSENT ; void QMetaMethodBuilder::setParameterNames(class QList<class QByteArray> const &)
+ ?getStaticMetaObject@QDeclarativeDebugRootContextQuery@@SAABUQMetaObject@@XZ @ 943 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugRootContextQuery::getStaticMetaObject(void)
+ ?textChanged@QDeclarativeText@@IAEXABVQString@@@Z @ 944 NONAME ABSENT ; void QDeclarativeText::textChanged(class QString const &)
?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 945 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *)
??0QDeclarativeCustomParserProperty@@QAE@ABV0@@Z @ 946 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(class QDeclarativeCustomParserProperty const &)
?getStaticMetaObject@QDeclarativeComponent@@SAABUQMetaObject@@XZ @ 947 NONAME ; struct QMetaObject const & QDeclarativeComponent::getStaticMetaObject(void)
?parentItem@QDeclarativeItem@@QBEPAV1@XZ @ 948 NONAME ; class QDeclarativeItem * QDeclarativeItem::parentItem(void) const
- ?value@QMetaEnumBuilder@@QBEHH@Z @ 949 NONAME ; int QMetaEnumBuilder::value(int) const
+ ?value@QMetaEnumBuilder@@QBEHH@Z @ 949 NONAME ABSENT ; int QMetaEnumBuilder::value(int) const
??_EQDeclarativeExpression@@UAE@I@Z @ 950 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(unsigned int)
- ?load@QDeclarativeDomDocument@@QAE_NPAVQDeclarativeEngine@@ABVQByteArray@@ABVQUrl@@@Z @ 951 NONAME ; bool QDeclarativeDomDocument::load(class QDeclarativeEngine *, class QByteArray const &, class QUrl const &)
+ ?load@QDeclarativeDomDocument@@QAE_NPAVQDeclarativeEngine@@ABVQByteArray@@ABVQUrl@@@Z @ 951 NONAME ABSENT ; bool QDeclarativeDomDocument::load(class QDeclarativeEngine *, class QByteArray const &, class QUrl const &)
?staticMetaObject@QDeclarativeStateGroup@@2UQMetaObject@@B @ 952 NONAME ; struct QMetaObject const QDeclarativeStateGroup::staticMetaObject
?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 953 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *)
- ?verticalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 954 NONAME ; void QDeclarativeAnchors::verticalCenterChanged(void)
- ?isScriptable@QMetaPropertyBuilder@@QBE_NXZ @ 955 NONAME ; bool QMetaPropertyBuilder::isScriptable(void) const
- ?typeCategory@QDeclarativeMetaType@@SA?AW4TypeCategory@1@H@Z @ 956 NONAME ; enum QDeclarativeMetaType::TypeCategory QDeclarativeMetaType::typeCategory(int)
- ?findSignalByName@QDeclarativePropertyPrivate@@SA?AVQMetaMethod@@PBUQMetaObject@@ABVQByteArray@@@Z @ 957 NONAME ; class QMetaMethod QDeclarativePropertyPrivate::findSignalByName(struct QMetaObject const *, class QByteArray const &)
- ?length@QDeclarativeDomDynamicProperty@@QBEHXZ @ 958 NONAME ; int QDeclarativeDomDynamicProperty::length(void) const
- ?property@QDeclarativeBinding@@QBE?AVQDeclarativeProperty@@XZ @ 959 NONAME ; class QDeclarativeProperty QDeclarativeBinding::property(void) const
- ??0QDeclarativeDomValueBinding@@QAE@XZ @ 960 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(void)
+ ?verticalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 954 NONAME ABSENT ; void QDeclarativeAnchors::verticalCenterChanged(void)
+ ?isScriptable@QMetaPropertyBuilder@@QBE_NXZ @ 955 NONAME ABSENT ; bool QMetaPropertyBuilder::isScriptable(void) const
+ ?typeCategory@QDeclarativeMetaType@@SA?AW4TypeCategory@1@H@Z @ 956 NONAME ABSENT ; enum QDeclarativeMetaType::TypeCategory QDeclarativeMetaType::typeCategory(int)
+ ?findSignalByName@QDeclarativePropertyPrivate@@SA?AVQMetaMethod@@PBUQMetaObject@@ABVQByteArray@@@Z @ 957 NONAME ABSENT ; class QMetaMethod QDeclarativePropertyPrivate::findSignalByName(struct QMetaObject const *, class QByteArray const &)
+ ?length@QDeclarativeDomDynamicProperty@@QBEHXZ @ 958 NONAME ABSENT ; int QDeclarativeDomDynamicProperty::length(void) const
+ ?property@QDeclarativeBinding@@QBE?AVQDeclarativeProperty@@XZ @ 959 NONAME ABSENT ; class QDeclarativeProperty QDeclarativeBinding::property(void) const
+ ??0QDeclarativeDomValueBinding@@QAE@XZ @ 960 NONAME ABSENT ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(void)
?addImportPath@QDeclarativeEngine@@QAEXABVQString@@@Z @ 961 NONAME ; void QDeclarativeEngine::addImportPath(class QString const &)
?engine@QDeclarativeContext@@QBEPAVQDeclarativeEngine@@XZ @ 962 NONAME ; class QDeclarativeEngine * QDeclarativeContext::engine(void) const
- ?length@QDeclarativeDomObject@@QBEHXZ @ 963 NONAME ; int QDeclarativeDomObject::length(void) const
- ?setBaselineOffset@QDeclarativeAnchors@@QAEXM@Z @ 964 NONAME ; void QDeclarativeAnchors::setBaselineOffset(float)
+ ?length@QDeclarativeDomObject@@QBEHXZ @ 963 NONAME ABSENT ; int QDeclarativeDomObject::length(void) const
+ ?setBaselineOffset@QDeclarativeAnchors@@QAEXM@Z @ 964 NONAME ABSENT ; void QDeclarativeAnchors::setBaselineOffset(float)
?append@QDeclarativeListReference@@QBE_NPAVQObject@@@Z @ 965 NONAME ; bool QDeclarativeListReference::append(class QObject *) const
- ?d_func@QDeclarativeEngineDebug@@AAEPAVQDeclarativeEngineDebugPrivate@@XZ @ 966 NONAME ; class QDeclarativeEngineDebugPrivate * QDeclarativeEngineDebug::d_func(void)
+ ?d_func@QDeclarativeEngineDebug@@AAEPAVQDeclarativeEngineDebugPrivate@@XZ @ 966 NONAME ABSENT ; class QDeclarativeEngineDebugPrivate * QDeclarativeEngineDebug::d_func(void)
??1QDeclarativeNetworkAccessManagerFactory@@UAE@XZ @ 967 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(void)
- ?textFormatChanged@QDeclarativeText@@IAEXW4TextFormat@1@@Z @ 968 NONAME ; void QDeclarativeText::textFormatChanged(enum QDeclarativeText::TextFormat)
+ ?textFormatChanged@QDeclarativeText@@IAEXW4TextFormat@1@@Z @ 968 NONAME ABSENT ; void QDeclarativeText::textFormatChanged(enum QDeclarativeText::TextFormat)
?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 969 NONAME ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *)
- ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 970 NONAME ; class QByteArray QDeclarativeType::qmlTypeName(void) const
+ ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 970 NONAME ABSENT ; class QByteArray QDeclarativeType::qmlTypeName(void) const
?tr@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 971 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *)
?isProperty@QDeclarativeProperty@@QBE_NXZ @ 972 NONAME ; bool QDeclarativeProperty::isProperty(void) const
?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 973 NONAME ; class QList<class QDeclarativeState *> QDeclarativeStateGroup::states(void) const
- ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 974 NONAME ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void)
- ?isValid@QDeclarativeDomObject@@QBE_NXZ @ 975 NONAME ; bool QDeclarativeDomObject::isValid(void) const
- ?staticMetaObject@QDeclarativeAnchors@@2UQMetaObject@@B @ 976 NONAME ; struct QMetaObject const QDeclarativeAnchors::staticMetaObject
- ??_EQDeclarativePen@@UAE@I@Z @ 977 NONAME ; QDeclarativePen::~QDeclarativePen(unsigned int)
- ??0QDeclarativeDomProperty@@QAE@ABV0@@Z @ 978 NONAME ; QDeclarativeDomProperty::QDeclarativeDomProperty(class QDeclarativeDomProperty const &)
+ ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 974 NONAME ABSENT ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void)
+ ?isValid@QDeclarativeDomObject@@QBE_NXZ @ 975 NONAME ABSENT ; bool QDeclarativeDomObject::isValid(void) const
+ ?staticMetaObject@QDeclarativeAnchors@@2UQMetaObject@@B @ 976 NONAME ABSENT ; struct QMetaObject const QDeclarativeAnchors::staticMetaObject
+ ??_EQDeclarativePen@@UAE@I@Z @ 977 NONAME ABSENT ; QDeclarativePen::~QDeclarativePen(unsigned int)
+ ??0QDeclarativeDomProperty@@QAE@ABV0@@Z @ 978 NONAME ABSENT ; QDeclarativeDomProperty::QDeclarativeDomProperty(class QDeclarativeDomProperty const &)
?_states@QDeclarativeItemPrivate@@QAEPAVQDeclarativeStateGroup@@XZ @ 979 NONAME ; class QDeclarativeStateGroup * QDeclarativeItemPrivate::_states(void)
- ?verticalAlignmentChanged@QDeclarativeText@@IAEXW4VAlignment@1@@Z @ 980 NONAME ; void QDeclarativeText::verticalAlignmentChanged(enum QDeclarativeText::VAlignment)
- ?typeId@QDeclarativeType@@QBEHXZ @ 981 NONAME ; int QDeclarativeType::typeId(void) const
- ?marginsChanged@QDeclarativeAnchors@@IAEXXZ @ 982 NONAME ; void QDeclarativeAnchors::marginsChanged(void)
- ?setValue@QDeclarativeOpenMetaObject@@QAEXHABVQVariant@@@Z @ 983 NONAME ; void QDeclarativeOpenMetaObject::setValue(int, class QVariant const &)
+ ?verticalAlignmentChanged@QDeclarativeText@@IAEXW4VAlignment@1@@Z @ 980 NONAME ABSENT ; void QDeclarativeText::verticalAlignmentChanged(enum QDeclarativeText::VAlignment)
+ ?typeId@QDeclarativeType@@QBEHXZ @ 981 NONAME ABSENT ; int QDeclarativeType::typeId(void) const
+ ?marginsChanged@QDeclarativeAnchors@@IAEXXZ @ 982 NONAME ABSENT ; void QDeclarativeAnchors::marginsChanged(void)
+ ?setValue@QDeclarativeOpenMetaObject@@QAEXHABVQVariant@@@Z @ 983 NONAME ABSENT ; void QDeclarativeOpenMetaObject::setValue(int, class QVariant const &)
?parentProperty@QDeclarativeItemPrivate@@SAXPAVQObject@@PAXPAVQDeclarativeNotifierEndpoint@@@Z @ 984 NONAME ; void QDeclarativeItemPrivate::parentProperty(class QObject *, void *, class QDeclarativeNotifierEndpoint *)
- ??4QDeclarativeDebugContextReference@@QAEAAV0@ABV0@@Z @ 985 NONAME ; class QDeclarativeDebugContextReference & QDeclarativeDebugContextReference::operator=(class QDeclarativeDebugContextReference const &)
- ?isModule@QDeclarativeMetaType@@SA_NABVQByteArray@@HH@Z @ 986 NONAME ; bool QDeclarativeMetaType::isModule(class QByteArray const &, int, int)
- ?parentFunctions@QDeclarativeMetaType@@SA?AV?$QList@P6A?AW4AutoParentResult@QDeclarativePrivate@@PAVQObject@@0@Z@@XZ @ 987 NONAME ; class QList<enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)> QDeclarativeMetaType::parentFunctions(void)
- ?metaObject@QDeclarativeDebugPropertyWatch@@UBEPBUQMetaObject@@XZ @ 988 NONAME ; struct QMetaObject const * QDeclarativeDebugPropertyWatch::metaObject(void) const
- ??0QDeclarativeRectangle@@QAE@PAVQDeclarativeItem@@@Z @ 989 NONAME ; QDeclarativeRectangle::QDeclarativeRectangle(class QDeclarativeItem *)
+ ??4QDeclarativeDebugContextReference@@QAEAAV0@ABV0@@Z @ 985 NONAME ABSENT ; class QDeclarativeDebugContextReference & QDeclarativeDebugContextReference::operator=(class QDeclarativeDebugContextReference const &)
+ ?isModule@QDeclarativeMetaType@@SA_NABVQByteArray@@HH@Z @ 986 NONAME ABSENT ; bool QDeclarativeMetaType::isModule(class QByteArray const &, int, int)
+ ?parentFunctions@QDeclarativeMetaType@@SA?AV?$QList@P6A?AW4AutoParentResult@QDeclarativePrivate@@PAVQObject@@0@Z@@XZ @ 987 NONAME ABSENT ; class QList<enum QDeclarativePrivate::AutoParentResult (*)(class QObject *, class QObject *)> QDeclarativeMetaType::parentFunctions(void)
+ ?metaObject@QDeclarativeDebugPropertyWatch@@UBEPBUQMetaObject@@XZ @ 988 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugPropertyWatch::metaObject(void) const
+ ??0QDeclarativeRectangle@@QAE@PAVQDeclarativeItem@@@Z @ 989 NONAME ABSENT ; QDeclarativeRectangle::QDeclarativeRectangle(class QDeclarativeItem *)
?setOutputWarningsToStandardError@QDeclarativeEngine@@QAEX_N@Z @ 990 NONAME ; void QDeclarativeEngine::setOutputWarningsToStandardError(bool)
- ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@0@Z @ 991 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &, class QByteArray const &)
- ?enumerator@QMetaObjectBuilder@@QBE?AVQMetaEnumBuilder@@H@Z @ 992 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::enumerator(int) const
- ?fromRelocatableData@QMetaObjectBuilder@@SAXPAUQMetaObject@@PBU2@ABVQByteArray@@@Z @ 993 NONAME ; void QMetaObjectBuilder::fromRelocatableData(struct QMetaObject *, struct QMetaObject const *, class QByteArray const &)
- ?gridRight@QDeclarativeGridScaledImage@@QBEHXZ @ 994 NONAME ; int QDeclarativeGridScaledImage::gridRight(void) const
- ?isAlias@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 995 NONAME ; bool QDeclarativeDomDynamicProperty::isAlias(void) const
+ ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@0@Z @ 991 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &, class QByteArray const &)
+ ?enumerator@QMetaObjectBuilder@@QBE?AVQMetaEnumBuilder@@H@Z @ 992 NONAME ABSENT ; class QMetaEnumBuilder QMetaObjectBuilder::enumerator(int) const
+ ?fromRelocatableData@QMetaObjectBuilder@@SAXPAUQMetaObject@@PBU2@ABVQByteArray@@@Z @ 993 NONAME ABSENT ; void QMetaObjectBuilder::fromRelocatableData(struct QMetaObject *, struct QMetaObject const *, class QByteArray const &)
+ ?gridRight@QDeclarativeGridScaledImage@@QBEHXZ @ 994 NONAME ABSENT ; int QDeclarativeGridScaledImage::gridRight(void) const
+ ?isAlias@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 995 NONAME ABSENT ; bool QDeclarativeDomDynamicProperty::isAlias(void) const
?d_func@QDeclarativeContext@@ABEPBVQDeclarativeContextPrivate@@XZ @ 996 NONAME ; class QDeclarativeContextPrivate const * QDeclarativeContext::d_func(void) const
- ?getStaticMetaObject@QDeclarativeDebugEnginesQuery@@SAABUQMetaObject@@XZ @ 997 NONAME ; struct QMetaObject const & QDeclarativeDebugEnginesQuery::getStaticMetaObject(void)
+ ?getStaticMetaObject@QDeclarativeDebugEnginesQuery@@SAABUQMetaObject@@XZ @ 997 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugEnginesQuery::getStaticMetaObject(void)
?tr@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 998 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *, int)
- ?staticMetaObject@QDeclarativeDebugPropertyWatch@@2UQMetaObject@@B @ 999 NONAME ; struct QMetaObject const QDeclarativeDebugPropertyWatch::staticMetaObject
+ ?staticMetaObject@QDeclarativeDebugPropertyWatch@@2UQMetaObject@@B @ 999 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugPropertyWatch::staticMetaObject
?setDescription@QDeclarativeError@@QAEXABVQString@@@Z @ 1000 NONAME ; void QDeclarativeError::setDescription(class QString const &)
??0QDeclarativeExpression@@AAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@@Z @ 1001 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &)
- ??1QDeclarativeOpenMetaObjectType@@UAE@XZ @ 1002 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(void)
+ ??1QDeclarativeOpenMetaObjectType@@UAE@XZ @ 1002 NONAME ABSENT ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(void)
?setReversible@QDeclarativeTransition@@QAEX_N@Z @ 1003 NONAME ; void QDeclarativeTransition::setReversible(bool)
- ?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1004 NONAME ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const
- ??0QDeclarativeDomList@@QAE@XZ @ 1005 NONAME ; QDeclarativeDomList::QDeclarativeDomList(void)
+ ?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1004 NONAME ABSENT ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const
+ ??0QDeclarativeDomList@@QAE@XZ @ 1005 NONAME ABSENT ; QDeclarativeDomList::QDeclarativeDomList(void)
?hasActiveFocus@QDeclarativeItem@@QBE_NXZ @ 1006 NONAME ; bool QDeclarativeItem::hasActiveFocus(void) const
- ?indexOfSignal@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1007 NONAME ; int QMetaObjectBuilder::indexOfSignal(class QByteArray const &)
+ ?indexOfSignal@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1007 NONAME ABSENT ; int QMetaObjectBuilder::indexOfSignal(class QByteArray const &)
?toState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 1008 NONAME ; class QString QDeclarativeTransition::toState(void) const
- ??0QDeclarativeDomDocument@@QAE@XZ @ 1009 NONAME ; QDeclarativeDomDocument::QDeclarativeDomDocument(void)
+ ??0QDeclarativeDomDocument@@QAE@XZ @ 1009 NONAME ABSENT ; QDeclarativeDomDocument::QDeclarativeDomDocument(void)
?setWhen@QDeclarativeState@@QAEXPAVQDeclarativeBinding@@@Z @ 1010 NONAME ; void QDeclarativeState::setWhen(class QDeclarativeBinding *)
?isWhenKnown@QDeclarativeState@@QBE_NXZ @ 1011 NONAME ; bool QDeclarativeState::isWhenKnown(void) const
- ?agent@QDeclarativeListModel@@QAEPAVQDeclarativeListModelWorkerAgent@@XZ @ 1012 NONAME ; class QDeclarativeListModelWorkerAgent * QDeclarativeListModel::agent(void)
+ ?agent@QDeclarativeListModel@@QAEPAVQDeclarativeListModelWorkerAgent@@XZ @ 1012 NONAME ABSENT ; class QDeclarativeListModelWorkerAgent * QDeclarativeListModel::agent(void)
?engine@QDeclarativeExpression@@QBEPAVQDeclarativeEngine@@XZ @ 1013 NONAME ; class QDeclarativeEngine * QDeclarativeExpression::engine(void) const
- ??_EQDeclarativeDebugWatch@@UAE@I@Z @ 1014 NONAME ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(unsigned int)
- ?isEmpty@QPacket@@QBE_NXZ @ 1015 NONAME ; bool QPacket::isEmpty(void) const
- ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@PBUQMetaObject@@@Z @ 1016 NONAME ; class QDeclarativeType * QDeclarativeMetaType::qmlType(struct QMetaObject const *)
- ?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 1017 NONAME ; void QDeclarativeAnchors::setFill(class QGraphicsObject *)
- ?setHAlign@QDeclarativeText@@QAEXW4HAlignment@1@@Z @ 1018 NONAME ; void QDeclarativeText::setHAlign(enum QDeclarativeText::HAlignment)
+ ??_EQDeclarativeDebugWatch@@UAE@I@Z @ 1014 NONAME ABSENT ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(unsigned int)
+ ?isEmpty@QPacket@@QBE_NXZ @ 1015 NONAME ABSENT ; bool QPacket::isEmpty(void) const
+ ?qmlType@QDeclarativeMetaType@@SAPAVQDeclarativeType@@PBUQMetaObject@@@Z @ 1016 NONAME ABSENT ; class QDeclarativeType * QDeclarativeMetaType::qmlType(struct QMetaObject const *)
+ ?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 1017 NONAME ABSENT ; void QDeclarativeAnchors::setFill(class QGraphicsObject *)
+ ?setHAlign@QDeclarativeText@@QAEXW4HAlignment@1@@Z @ 1018 NONAME ABSENT ; void QDeclarativeText::setHAlign(enum QDeclarativeText::HAlignment)
??0QDeclarativeScriptString@@QAE@ABV0@@Z @ 1019 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(class QDeclarativeScriptString const &)
?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1020 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *)
- ?metaObject@QDeclarativeDebugRootContextQuery@@UBEPBUQMetaObject@@XZ @ 1021 NONAME ; struct QMetaObject const * QDeclarativeDebugRootContextQuery::metaObject(void) const
- ?setSignalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@PAV2@@Z @ 1022 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::setSignalExpression(class QDeclarativeProperty const &, class QDeclarativeExpression *)
+ ?metaObject@QDeclarativeDebugRootContextQuery@@UBEPBUQMetaObject@@XZ @ 1021 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugRootContextQuery::metaObject(void) const
+ ?setSignalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@PAV2@@Z @ 1022 NONAME ABSENT ; class QDeclarativeExpression * QDeclarativePropertyPrivate::setSignalExpression(class QDeclarativeProperty const &, class QDeclarativeExpression *)
?reversibleChanged@QDeclarativeTransition@@IAEXXZ @ 1023 NONAME ; void QDeclarativeTransition::reversibleChanged(void)
- ??4QDeclarativeDomValueValueSource@@QAEAAV0@ABV0@@Z @ 1024 NONAME ; class QDeclarativeDomValueValueSource & QDeclarativeDomValueValueSource::operator=(class QDeclarativeDomValueValueSource const &)
- ?name@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 1025 NONAME ; class QString QDeclarativeDebugObjectReference::name(void) const
+ ??4QDeclarativeDomValueValueSource@@QAEAAV0@ABV0@@Z @ 1024 NONAME ABSENT ; class QDeclarativeDomValueValueSource & QDeclarativeDomValueValueSource::operator=(class QDeclarativeDomValueValueSource const &)
+ ?name@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 1025 NONAME ABSENT ; class QString QDeclarativeDebugObjectReference::name(void) const
?anchorLines@QDeclarativeItemPrivate@@QBEPAUAnchorLines@1@XZ @ 1026 NONAME ; struct QDeclarativeItemPrivate::AnchorLines * QDeclarativeItemPrivate::anchorLines(void) const
?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 1027 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &)
- ?staticMetaObject@QDeclarativeText@@2UQMetaObject@@B @ 1028 NONAME ; struct QMetaObject const QDeclarativeText::staticMetaObject
- ?color@QDeclarativeRectangle@@QBE?AVQColor@@XZ @ 1029 NONAME ; class QColor QDeclarativeRectangle::color(void) const
- ?isEnabled@QDeclarativeDebugClient@@QBE_NXZ @ 1030 NONAME ; bool QDeclarativeDebugClient::isEnabled(void) const
- ?send@QPacketProtocol@@QAEXABVQPacket@@@Z @ 1031 NONAME ; void QPacketProtocol::send(class QPacket const &)
+ ?staticMetaObject@QDeclarativeText@@2UQMetaObject@@B @ 1028 NONAME ABSENT ; struct QMetaObject const QDeclarativeText::staticMetaObject
+ ?color@QDeclarativeRectangle@@QBE?AVQColor@@XZ @ 1029 NONAME ABSENT ; class QColor QDeclarativeRectangle::color(void) const
+ ?isEnabled@QDeclarativeDebugClient@@QBE_NXZ @ 1030 NONAME ABSENT ; bool QDeclarativeDebugClient::isEnabled(void) const
+ ?send@QPacketProtocol@@QAEXABVQPacket@@@Z @ 1031 NONAME ABSENT ; void QPacketProtocol::send(class QPacket const &)
?width@QDeclarativePixmap@@QBEHXZ @ 1032 NONAME ; int QDeclarativePixmap::width(void) const
?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserNode@@ABVQString@@@Z @ 1033 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserNode const &, class QString const &)
- ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PBUQMetaObject@@@Z @ 1034 NONAME ; class QMetaProperty QDeclarativeMetaType::defaultProperty(struct QMetaObject const *)
+ ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PBUQMetaObject@@@Z @ 1034 NONAME ABSENT ; class QMetaProperty QDeclarativeMetaType::defaultProperty(struct QMetaObject const *)
?isComponentComplete@QDeclarativeItem@@IBE_NXZ @ 1035 NONAME ; bool QDeclarativeItem::isComponentComplete(void) const
- ?type@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 1036 NONAME ; class QByteArray QMetaPropertyBuilder::type(void) const
- ?setProperty@QDeclarativeListModel@@QAEXHABVQString@@ABVQVariant@@@Z @ 1037 NONAME ; void QDeclarativeListModel::setProperty(int, class QString const &, class QVariant const &)
- ?rootContext@QDeclarativeDebugRootContextQuery@@QBE?AVQDeclarativeDebugContextReference@@XZ @ 1038 NONAME ; class QDeclarativeDebugContextReference QDeclarativeDebugRootContextQuery::rootContext(void) const
+ ?type@QMetaPropertyBuilder@@QBE?AVQByteArray@@XZ @ 1036 NONAME ABSENT ; class QByteArray QMetaPropertyBuilder::type(void) const
+ ?setProperty@QDeclarativeListModel@@QAEXHABVQString@@ABVQVariant@@@Z @ 1037 NONAME ABSENT ; void QDeclarativeListModel::setProperty(int, class QString const &, class QVariant const &)
+ ?rootContext@QDeclarativeDebugRootContextQuery@@QBE?AVQDeclarativeDebugContextReference@@XZ @ 1038 NONAME ABSENT ; class QDeclarativeDebugContextReference QDeclarativeDebugRootContextQuery::rootContext(void) const
?contextForObject@QDeclarativeEngine@@SAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1039 NONAME ; class QDeclarativeContext * QDeclarativeEngine::contextForObject(class QObject const *)
- ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQMetaProperty@@@Z @ 1040 NONAME ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QMetaProperty const &)
- ?isQObject@QDeclarativeMetaType@@SA_NH@Z @ 1041 NONAME ; bool QDeclarativeMetaType::isQObject(int)
- ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 1042 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *)
- ?getStaticMetaObject@QDeclarativeValueType@@SAABUQMetaObject@@XZ @ 1043 NONAME ; struct QMetaObject const & QDeclarativeValueType::getStaticMetaObject(void)
+ ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQMetaProperty@@@Z @ 1040 NONAME ABSENT ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QMetaProperty const &)
+ ?isQObject@QDeclarativeMetaType@@SA_NH@Z @ 1041 NONAME ABSENT ; bool QDeclarativeMetaType::isQObject(int)
+ ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0@Z @ 1042 NONAME ABSENT ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *)
+ ?getStaticMetaObject@QDeclarativeValueType@@SAABUQMetaObject@@XZ @ 1043 NONAME ABSENT ; struct QMetaObject const & QDeclarativeValueType::getStaticMetaObject(void)
?valueChanged@QDeclarativePropertyMap@@IAEXABVQString@@ABVQVariant@@@Z @ 1044 NONAME ; void QDeclarativePropertyMap::valueChanged(class QString const &, class QVariant const &)
- ?staticMetaObject@QPacketProtocol@@2UQMetaObject@@B @ 1045 NONAME ; struct QMetaObject const QPacketProtocol::staticMetaObject
- ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 1046 NONAME ; class QString QDeclarativeListModel::tr(char const *, char const *, int)
+ ?staticMetaObject@QPacketProtocol@@2UQMetaObject@@B @ 1045 NONAME ABSENT ; struct QMetaObject const QPacketProtocol::staticMetaObject
+ ?tr@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 1046 NONAME ABSENT ; class QString QDeclarativeListModel::tr(char const *, char const *, int)
??0QDeclarativeScriptString@@QAE@XZ @ 1047 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(void)
- ?tr@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1048 NONAME ; class QString QListModelInterface::tr(char const *, char const *)
+ ?tr@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1048 NONAME ABSENT ; class QString QListModelInterface::tr(char const *, char const *)
?height@QDeclarativeItemPrivate@@UBEMXZ @ 1049 NONAME ; float QDeclarativeItemPrivate::height(void) const
- ?qt_metacast@QDeclarativeDebugObjectQuery@@UAEPAXPBD@Z @ 1050 NONAME ; void * QDeclarativeDebugObjectQuery::qt_metacast(char const *)
+ ?qt_metacast@QDeclarativeDebugObjectQuery@@UAEPAXPBD@Z @ 1050 NONAME ABSENT ; void * QDeclarativeDebugObjectQuery::qt_metacast(char const *)
??0QDeclarativeImageProvider@@QAE@W4ImageType@0@@Z @ 1051 NONAME ; QDeclarativeImageProvider::QDeclarativeImageProvider(enum QDeclarativeImageProvider::ImageType)
- ?type@QDeclarativeDomValue@@QBE?AW4Type@1@XZ @ 1052 NONAME ; enum QDeclarativeDomValue::Type QDeclarativeDomValue::type(void) const
+ ?type@QDeclarativeDomValue@@QBE?AW4Type@1@XZ @ 1052 NONAME ABSENT ; enum QDeclarativeDomValue::Type QDeclarativeDomValue::type(void) const
?setPixmap@QDeclarativePixmap@@QAEXABVQPixmap@@@Z @ 1053 NONAME ; void QDeclarativePixmap::setPixmap(class QPixmap const &)
- ?staticMetacallFunction@QMetaObjectBuilder@@QBEP6AHW4Call@QMetaObject@@HPAPAX@ZXZ @ 1054 NONAME ; int (*)(enum QMetaObject::Call, int, void * *) QMetaObjectBuilder::staticMetacallFunction(void) const
+ ?staticMetacallFunction@QMetaObjectBuilder@@QBEP6AHW4Call@QMetaObject@@HPAPAX@ZXZ @ 1054 NONAME ABSENT ; int (*)(enum QMetaObject::Call, int, void * *) QMetaObjectBuilder::staticMetacallFunction(void) const
?connectFinished@QDeclarativePixmap@@QAE_NPAVQObject@@H@Z @ 1055 NONAME ; bool QDeclarativePixmap::connectFinished(class QObject *, int)
- ?setStyle@QDeclarativeText@@QAEXW4TextStyle@1@@Z @ 1056 NONAME ; void QDeclarativeText::setStyle(enum QDeclarativeText::TextStyle)
+ ?setStyle@QDeclarativeText@@QAEXW4TextStyle@1@@Z @ 1056 NONAME ABSENT ; void QDeclarativeText::setStyle(enum QDeclarativeText::TextStyle)
?staticMetaObject@QDeclarativePropertyMap@@2UQMetaObject@@B @ 1057 NONAME ; struct QMetaObject const QDeclarativePropertyMap::staticMetaObject
- ??_EQDeclarativeDebugEnginesQuery@@UAE@I@Z @ 1058 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(unsigned int)
- ?enumeratorCount@QMetaObjectBuilder@@QBEHXZ @ 1059 NONAME ; int QMetaObjectBuilder::enumeratorCount(void) const
+ ??_EQDeclarativeDebugEnginesQuery@@UAE@I@Z @ 1058 NONAME ABSENT ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(unsigned int)
+ ?enumeratorCount@QMetaObjectBuilder@@QBEHXZ @ 1059 NONAME ABSENT ; int QMetaObjectBuilder::enumeratorCount(void) const
?isError@QDeclarativePixmap@@QBE_NXZ @ 1060 NONAME ; bool QDeclarativePixmap::isError(void) const
?setConsistentTime@QDeclarativeItemPrivate@@SAX_J@Z @ 1061 NONAME ; void QDeclarativeItemPrivate::setConsistentTime(long long)
?initializeEngine@QDeclarativeExtensionPlugin@@UAEXPAVQDeclarativeEngine@@PBD@Z @ 1062 NONAME ; void QDeclarativeExtensionPlugin::initializeEngine(class QDeclarativeEngine *, char const *)
- ?metaObject@QDeclarativeDebugQuery@@UBEPBUQMetaObject@@XZ @ 1063 NONAME ; struct QMetaObject const * QDeclarativeDebugQuery::metaObject(void) const
- ?rightMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1064 NONAME ; void QDeclarativeAnchors::rightMarginChanged(void)
+ ?metaObject@QDeclarativeDebugQuery@@UBEPBUQMetaObject@@XZ @ 1063 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugQuery::metaObject(void) const
+ ?rightMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1064 NONAME ABSENT ; void QDeclarativeAnchors::rightMarginChanged(void)
??_EQDeclarativePropertyValueInterceptor@@UAE@I@Z @ 1065 NONAME ; QDeclarativePropertyValueInterceptor::~QDeclarativePropertyValueInterceptor(unsigned int)
- ?linkActivated@QDeclarativeText@@IAEXABVQString@@@Z @ 1066 NONAME ; void QDeclarativeText::linkActivated(class QString const &)
- ?canConvert@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1067 NONAME ; bool QDeclarativePropertyPrivate::canConvert(struct QMetaObject const *, struct QMetaObject const *)
- ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 1068 NONAME ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *, int)
- ?toComponent@QDeclarativeDomObject@@QBE?AVQDeclarativeDomComponent@@XZ @ 1069 NONAME ; class QDeclarativeDomComponent QDeclarativeDomObject::toComponent(void) const
- ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 1070 NONAME ; class QString QDeclarativeValueType::tr(char const *, char const *)
- ?setLeft@QDeclarativeScaleGrid@@QAEXH@Z @ 1071 NONAME ; void QDeclarativeScaleGrid::setLeft(int)
- ??1QDeclarativeGridScaledImage@@QAE@XZ @ 1072 NONAME ; QDeclarativeGridScaledImage::~QDeclarativeGridScaledImage(void)
- ??0QDeclarativeGridScaledImage@@QAE@ABV0@@Z @ 1073 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QDeclarativeGridScaledImage const &)
+ ?linkActivated@QDeclarativeText@@IAEXABVQString@@@Z @ 1066 NONAME ABSENT ; void QDeclarativeText::linkActivated(class QString const &)
+ ?canConvert@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1067 NONAME ABSENT ; bool QDeclarativePropertyPrivate::canConvert(struct QMetaObject const *, struct QMetaObject const *)
+ ?trUtf8@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 1068 NONAME ABSENT ; class QString QDeclarativeAnchors::trUtf8(char const *, char const *, int)
+ ?toComponent@QDeclarativeDomObject@@QBE?AVQDeclarativeDomComponent@@XZ @ 1069 NONAME ABSENT ; class QDeclarativeDomComponent QDeclarativeDomObject::toComponent(void) const
+ ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0@Z @ 1070 NONAME ABSENT ; class QString QDeclarativeValueType::tr(char const *, char const *)
+ ?setLeft@QDeclarativeScaleGrid@@QAEXH@Z @ 1071 NONAME ABSENT ; void QDeclarativeScaleGrid::setLeft(int)
+ ??1QDeclarativeGridScaledImage@@QAE@XZ @ 1072 NONAME ABSENT ; QDeclarativeGridScaledImage::~QDeclarativeGridScaledImage(void)
+ ??0QDeclarativeGridScaledImage@@QAE@ABV0@@Z @ 1073 NONAME ABSENT ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(class QDeclarativeGridScaledImage const &)
?column@QDeclarativeError@@QBEHXZ @ 1074 NONAME ; int QDeclarativeError::column(void) const
?properties@QDeclarativeCustomParserNode@@QBE?AV?$QList@VQDeclarativeCustomParserProperty@@@@XZ @ 1075 NONAME ; class QList<class QDeclarativeCustomParserProperty> QDeclarativeCustomParserNode::properties(void) const
- ?qt_metacast@QDeclarativeScaleGrid@@UAEPAXPBD@Z @ 1076 NONAME ; void * QDeclarativeScaleGrid::qt_metacast(char const *)
+ ?qt_metacast@QDeclarativeScaleGrid@@UAEPAXPBD@Z @ 1076 NONAME ABSENT ; void * QDeclarativeScaleGrid::qt_metacast(char const *)
??0QDeclarativeListReference@@QAE@XZ @ 1077 NONAME ; QDeclarativeListReference::QDeclarativeListReference(void)
- ??1QDeclarativeDebugRootContextQuery@@UAE@XZ @ 1078 NONAME ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(void)
+ ??1QDeclarativeDebugRootContextQuery@@UAE@XZ @ 1078 NONAME ABSENT ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(void)
?name@QDeclarativeCustomParserNode@@QBE?AVQByteArray@@XZ @ 1079 NONAME ; class QByteArray QDeclarativeCustomParserNode::name(void) const
- ?object@QDeclarativeDomValueValueInterceptor@@QBE?AVQDeclarativeDomObject@@XZ @ 1080 NONAME ; class QDeclarativeDomObject QDeclarativeDomValueValueInterceptor::object(void) const
- ??1QDeclarativePen@@UAE@XZ @ 1081 NONAME ; QDeclarativePen::~QDeclarativePen(void)
+ ?object@QDeclarativeDomValueValueInterceptor@@QBE?AVQDeclarativeDomObject@@XZ @ 1080 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomValueValueInterceptor::object(void) const
+ ??1QDeclarativePen@@UAE@XZ @ 1081 NONAME ABSENT ; QDeclarativePen::~QDeclarativePen(void)
?data@QDeclarativeItemPrivate@@QAE?AV?$QDeclarativeListProperty@VQObject@@@@XZ @ 1082 NONAME ; class QDeclarativeListProperty<class QObject> QDeclarativeItemPrivate::data(void)
- ?qt_metacall@QDeclarativeBinding@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1083 NONAME ; int QDeclarativeBinding::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@QDeclarativeBinding@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1083 NONAME ABSENT ; int QDeclarativeBinding::qt_metacall(enum QMetaObject::Call, int, void * *)
??1QDeclarativeEngine@@UAE@XZ @ 1084 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(void)
- ?debugId@QDeclarativeDebugContextReference@@QBEHXZ @ 1085 NONAME ; int QDeclarativeDebugContextReference::debugId(void) const
- ?propertyNameParts@QDeclarativeDomProperty@@QBE?AV?$QList@VQByteArray@@@@XZ @ 1086 NONAME ; class QList<class QByteArray> QDeclarativeDomProperty::propertyNameParts(void) const
+ ?debugId@QDeclarativeDebugContextReference@@QBEHXZ @ 1085 NONAME ABSENT ; int QDeclarativeDebugContextReference::debugId(void) const
+ ?propertyNameParts@QDeclarativeDomProperty@@QBE?AV?$QList@VQByteArray@@@@XZ @ 1086 NONAME ABSENT ; class QList<class QByteArray> QDeclarativeDomProperty::propertyNameParts(void) const
?resetWidth@QDeclarativeItemPrivate@@UAEXXZ @ 1087 NONAME ; void QDeclarativeItemPrivate::resetWidth(void)
- ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1088 NONAME ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &)
+ ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1088 NONAME ABSENT ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &)
?bottom@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1089 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::bottom(void) const
- ?device@QPacketProtocol@@QAEPAVQIODevice@@XZ @ 1090 NONAME ; class QIODevice * QPacketProtocol::device(void)
+ ?device@QPacketProtocol@@QAEPAVQIODevice@@XZ @ 1090 NONAME ABSENT ; class QIODevice * QPacketProtocol::device(void)
?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1091 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *)
- ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@HPA_N@Z @ 1092 NONAME ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &, int, bool *)
+ ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@HPA_N@Z @ 1092 NONAME ABSENT ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &, int, bool *)
?metaObject@QDeclarativeComponent@@UBEPBUQMetaObject@@XZ @ 1093 NONAME ; struct QMetaObject const * QDeclarativeComponent::metaObject(void) const
?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABV?$QList@VQDeclarativeError@@@@@Z @ 1094 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QList<class QDeclarativeError> const &)
?assignedValues@QDeclarativeCustomParserProperty@@QBE?AV?$QList@VQVariant@@@@XZ @ 1095 NONAME ; class QList<class QVariant> QDeclarativeCustomParserProperty::assignedValues(void) const
- ?setValue@QDeclarativeOpenMetaObject@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1096 NONAME ; void QDeclarativeOpenMetaObject::setValue(class QByteArray const &, class QVariant const &)
- ?data@QDeclarativeListModel@@UBE?AVQVariant@@HH@Z @ 1097 NONAME ; class QVariant QDeclarativeListModel::data(int, int) const
- ?setElideMode@QDeclarativeText@@QAEXW4TextElideMode@1@@Z @ 1098 NONAME ; void QDeclarativeText::setElideMode(enum QDeclarativeText::TextElideMode)
+ ?setValue@QDeclarativeOpenMetaObject@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1096 NONAME ABSENT ; void QDeclarativeOpenMetaObject::setValue(class QByteArray const &, class QVariant const &)
+ ?data@QDeclarativeListModel@@UBE?AVQVariant@@HH@Z @ 1097 NONAME ABSENT ; class QVariant QDeclarativeListModel::data(int, int) const
+ ?setElideMode@QDeclarativeText@@QAEXW4TextElideMode@1@@Z @ 1098 NONAME ABSENT ; void QDeclarativeText::setElideMode(enum QDeclarativeText::TextElideMode)
?d_func@QDeclarativePropertyMap@@ABEPBVQDeclarativePropertyMapPrivate@@XZ @ 1099 NONAME ; class QDeclarativePropertyMapPrivate const * QDeclarativePropertyMap::d_func(void) const
?consistentTime@QDeclarativeItemPrivate@@2_JA @ 1100 NONAME ; long long QDeclarativeItemPrivate::consistentTime
?setWidth@QDeclarativeItem@@QAEXM@Z @ 1101 NONAME ; void QDeclarativeItem::setWidth(float)
- ?qt_metacall@QDeclarativeDebugObjectQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1102 NONAME ; int QDeclarativeDebugObjectQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@QDeclarativeDebugObjectQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1102 NONAME ABSENT ; int QDeclarativeDebugObjectQuery::qt_metacall(enum QMetaObject::Call, int, void * *)
?contextObject@QDeclarativeContext@@QBEPAVQObject@@XZ @ 1103 NONAME ; class QObject * QDeclarativeContext::contextObject(void) const
- ??_EQDeclarativeOpenMetaObjectType@@UAE@I@Z @ 1104 NONAME ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(unsigned int)
- ?isWritable@QMetaPropertyBuilder@@QBE_NXZ @ 1105 NONAME ; bool QMetaPropertyBuilder::isWritable(void) const
- ?sizeFFromString@QDeclarativeStringConverters@@YA?AVQSizeF@@ABVQString@@PA_N@Z @ 1106 NONAME ; class QSizeF QDeclarativeStringConverters::sizeFFromString(class QString const &, bool *)
+ ??_EQDeclarativeOpenMetaObjectType@@UAE@I@Z @ 1104 NONAME ABSENT ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(unsigned int)
+ ?isWritable@QMetaPropertyBuilder@@QBE_NXZ @ 1105 NONAME ABSENT ; bool QMetaPropertyBuilder::isWritable(void) const
+ ?sizeFFromString@QDeclarativeStringConverters@@YA?AVQSizeF@@ABVQString@@PA_N@Z @ 1106 NONAME ABSENT ; class QSizeF QDeclarativeStringConverters::sizeFFromString(class QString const &, bool *)
??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 1107 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &, class QDeclarativeEngine *)
- ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1108 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &)
- ??0QDeclarativeDebugFileReference@@QAE@XZ @ 1109 NONAME ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(void)
+ ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1108 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &)
+ ??0QDeclarativeDebugFileReference@@QAE@XZ @ 1109 NONAME ABSENT ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(void)
?mapFromItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 1110 NONAME ; class QScriptValue QDeclarativeItem::mapFromItem(class QScriptValue const &, float, float) const
?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1111 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int)
- ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1112 NONAME ; class QString QPacketProtocol::tr(char const *, char const *, int)
- ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1113 NONAME ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const
- ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1114 NONAME ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &)
- ?enabled@QDeclarativeBehavior@@QBE_NXZ @ 1115 NONAME ; bool QDeclarativeBehavior::enabled(void) const
- ?initProperty@QDeclarativePropertyPrivate@@QAEXPAVQObject@@ABVQString@@@Z @ 1116 NONAME ; void QDeclarativePropertyPrivate::initProperty(class QObject *, class QString const &)
- ?isEditable@QMetaPropertyBuilder@@QBE_NXZ @ 1117 NONAME ; bool QMetaPropertyBuilder::isEditable(void) const
- ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContextData@@1@Z @ 1118 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContextData *, class QObject *)
- ?expression@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 1119 NONAME ; class QVariant QDeclarativeDebugExpressionQuery::expression(void) const
- ??4QDeclarativeDomList@@QAEAAV0@ABV0@@Z @ 1120 NONAME ; class QDeclarativeDomList & QDeclarativeDomList::operator=(class QDeclarativeDomList const &)
+ ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1112 NONAME ABSENT ; class QString QPacketProtocol::tr(char const *, char const *, int)
+ ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1113 NONAME ABSENT ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const
+ ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1114 NONAME ABSENT ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &)
+ ?enabled@QDeclarativeBehavior@@QBE_NXZ @ 1115 NONAME ABSENT ; bool QDeclarativeBehavior::enabled(void) const
+ ?initProperty@QDeclarativePropertyPrivate@@QAEXPAVQObject@@ABVQString@@@Z @ 1116 NONAME ABSENT ; void QDeclarativePropertyPrivate::initProperty(class QObject *, class QString const &)
+ ?isEditable@QMetaPropertyBuilder@@QBE_NXZ @ 1117 NONAME ABSENT ; bool QMetaPropertyBuilder::isEditable(void) const
+ ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContextData@@1@Z @ 1118 NONAME ABSENT ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContextData *, class QObject *)
+ ?expression@QDeclarativeDebugExpressionQuery@@QBE?AVQVariant@@XZ @ 1119 NONAME ABSENT ; class QVariant QDeclarativeDebugExpressionQuery::expression(void) const
+ ??4QDeclarativeDomList@@QAEAAV0@ABV0@@Z @ 1120 NONAME ABSENT ; class QDeclarativeDomList & QDeclarativeDomList::operator=(class QDeclarativeDomList const &)
?qt_metacall@QDeclarativeComponent@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1121 NONAME ; int QDeclarativeComponent::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 1122 NONAME ; class QString QDeclarativeDebugService::tr(char const *, char const *, int)
+ ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 1122 NONAME ABSENT ; class QString QDeclarativeDebugService::tr(char const *, char const *, int)
?staticMetaObject@QDeclarativeEngine@@2UQMetaObject@@B @ 1123 NONAME ; struct QMetaObject const QDeclarativeEngine::staticMetaObject
?staticMetaObject@QDeclarativeStateOperation@@2UQMetaObject@@B @ 1124 NONAME ; struct QMetaObject const QDeclarativeStateOperation::staticMetaObject
?actions@QDeclarativeStateOperation@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1125 NONAME ; class QList<class QDeclarativeAction> QDeclarativeStateOperation::actions(void)
- ?objectClassName@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 1126 NONAME ; class QByteArray QDeclarativeDomObject::objectClassName(void) const
+ ?objectClassName@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 1126 NONAME ABSENT ; class QByteArray QDeclarativeDomObject::objectClassName(void) const
??8QDeclarativeProperty@@QBE_NABV0@@Z @ 1127 NONAME ; bool QDeclarativeProperty::operator==(class QDeclarativeProperty const &) const
- ??1QDeclarativeDomValue@@QAE@XZ @ 1128 NONAME ; QDeclarativeDomValue::~QDeclarativeDomValue(void)
+ ??1QDeclarativeDomValue@@QAE@XZ @ 1128 NONAME ABSENT ; QDeclarativeDomValue::~QDeclarativeDomValue(void)
??_EQDeclarativePropertyMap@@UAE@I@Z @ 1129 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(unsigned int)
- ?staticMetaObject@QDeclarativeDebugRootContextQuery@@2UQMetaObject@@B @ 1130 NONAME ; struct QMetaObject const QDeclarativeDebugRootContextQuery::staticMetaObject
- ?noCreationReason@QDeclarativeType@@QBE?AVQString@@XZ @ 1131 NONAME ; class QString QDeclarativeType::noCreationReason(void) const
- ?setUrl@QDeclarativeDebugFileReference@@QAEXABVQUrl@@@Z @ 1132 NONAME ; void QDeclarativeDebugFileReference::setUrl(class QUrl const &)
+ ?staticMetaObject@QDeclarativeDebugRootContextQuery@@2UQMetaObject@@B @ 1130 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugRootContextQuery::staticMetaObject
+ ?noCreationReason@QDeclarativeType@@QBE?AVQString@@XZ @ 1131 NONAME ABSENT ; class QString QDeclarativeType::noCreationReason(void) const
+ ?setUrl@QDeclarativeDebugFileReference@@QAEXABVQUrl@@@Z @ 1132 NONAME ABSENT ; void QDeclarativeDebugFileReference::setUrl(class QUrl const &)
??1QDeclarativeCustomParserProperty@@QAE@XZ @ 1133 NONAME ; QDeclarativeCustomParserProperty::~QDeclarativeCustomParserProperty(void)
- ??1QPacketProtocol@@UAE@XZ @ 1134 NONAME ; QPacketProtocol::~QPacketProtocol(void)
- ??1QDeclarativeAbstractBinding@@MAE@XZ @ 1135 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(void)
- ?indexOfEnumerator@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1136 NONAME ; int QMetaObjectBuilder::indexOfEnumerator(class QByteArray const &)
- ?qt_metacast@QDeclarativePen@@UAEPAXPBD@Z @ 1137 NONAME ; void * QDeclarativePen::qt_metacast(char const *)
- ?leftMargin@QDeclarativeAnchors@@QBEMXZ @ 1138 NONAME ; float QDeclarativeAnchors::leftMargin(void) const
+ ??1QPacketProtocol@@UAE@XZ @ 1134 NONAME ABSENT ; QPacketProtocol::~QPacketProtocol(void)
+ ??1QDeclarativeAbstractBinding@@MAE@XZ @ 1135 NONAME ABSENT ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(void)
+ ?indexOfEnumerator@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1136 NONAME ABSENT ; int QMetaObjectBuilder::indexOfEnumerator(class QByteArray const &)
+ ?qt_metacast@QDeclarativePen@@UAEPAXPBD@Z @ 1137 NONAME ABSENT ; void * QDeclarativePen::qt_metacast(char const *)
+ ?leftMargin@QDeclarativeAnchors@@QBEMXZ @ 1138 NONAME ABSENT ; float QDeclarativeAnchors::leftMargin(void) const
??1QDeclarativeComponent@@UAE@XZ @ 1139 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(void)
??1QDeclarativeItem@@UAE@XZ @ 1140 NONAME ; QDeclarativeItem::~QDeclarativeItem(void)
- ?setEnabled@QDeclarativeAbstractBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1141 NONAME ; void QDeclarativeAbstractBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?staticMetaObject@QListModelInterface@@2UQMetaObject@@B @ 1142 NONAME ; struct QMetaObject const QListModelInterface::staticMetaObject
+ ?setEnabled@QDeclarativeAbstractBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1141 NONAME ABSENT ; void QDeclarativeAbstractBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?staticMetaObject@QListModelInterface@@2UQMetaObject@@B @ 1142 NONAME ABSENT ; struct QMetaObject const QListModelInterface::staticMetaObject
?d_func@QDeclarativeTransition@@ABEPBVQDeclarativeTransitionPrivate@@XZ @ 1143 NONAME ; class QDeclarativeTransitionPrivate const * QDeclarativeTransition::d_func(void) const
?sourceFile@QDeclarativeExpression@@QBE?AVQString@@XZ @ 1144 NONAME ; class QString QDeclarativeExpression::sourceFile(void) const
- ??_EQDeclarativeAnchors@@UAE@I@Z @ 1145 NONAME ; QDeclarativeAnchors::~QDeclarativeAnchors(unsigned int)
- ?removeNotifySignal@QMetaPropertyBuilder@@QAEXXZ @ 1146 NONAME ; void QMetaPropertyBuilder::removeNotifySignal(void)
- ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 1147 NONAME ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *)
+ ??_EQDeclarativeAnchors@@UAE@I@Z @ 1145 NONAME ABSENT ; QDeclarativeAnchors::~QDeclarativeAnchors(unsigned int)
+ ?removeNotifySignal@QMetaPropertyBuilder@@QAEXXZ @ 1146 NONAME ABSENT ; void QMetaPropertyBuilder::removeNotifySignal(void)
+ ?trUtf8@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 1147 NONAME ABSENT ; class QString QDeclarativeDebugService::trUtf8(char const *, char const *)
?setImportPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 1148 NONAME ; void QDeclarativeEngine::setImportPathList(class QStringList const &)
- ?enabledChanged@QDeclarativeDebugService@@MAEX_N@Z @ 1149 NONAME ; void QDeclarativeDebugService::enabledChanged(bool)
- ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1150 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QObject *)
+ ?enabledChanged@QDeclarativeDebugService@@MAEX_N@Z @ 1149 NONAME ABSENT ; void QDeclarativeDebugService::enabledChanged(bool)
+ ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1150 NONAME ABSENT ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugObjectReference const &, class QObject *)
?asAST@Variant@QDeclarativeParser@@QBEPAVNode@AST@QDeclarativeJS@@XZ @ 1151 NONAME ; class QDeclarativeJS::AST::Node * QDeclarativeParser::Variant::asAST(void) const
- ?indexOfClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1152 NONAME ; int QMetaObjectBuilder::indexOfClassInfo(class QByteArray const &)
- ??0QDeclarativeDomImport@@QAE@ABV0@@Z @ 1153 NONAME ; QDeclarativeDomImport::QDeclarativeDomImport(class QDeclarativeDomImport const &)
- ?width@QDeclarativePen@@QBEHXZ @ 1154 NONAME ; int QDeclarativePen::width(void) const
+ ?indexOfClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1152 NONAME ABSENT ; int QMetaObjectBuilder::indexOfClassInfo(class QByteArray const &)
+ ??0QDeclarativeDomImport@@QAE@ABV0@@Z @ 1153 NONAME ABSENT ; QDeclarativeDomImport::QDeclarativeDomImport(class QDeclarativeDomImport const &)
+ ?width@QDeclarativePen@@QBEHXZ @ 1154 NONAME ABSENT ; int QDeclarativePen::width(void) const
?d_func@QDeclarativeStateGroup@@AAEPAVQDeclarativeStateGroupPrivate@@XZ @ 1155 NONAME ; class QDeclarativeStateGroupPrivate * QDeclarativeStateGroup::d_func(void)
??6QDeclarativeInfo@@QAEAAV0@P6AAAVQTextStream@@AAV1@@Z@Z @ 1156 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStream & (*)(class QTextStream &))
- ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 1157 NONAME ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *)
- ?type@QDeclarativeOpenMetaObject@@QBEPAVQDeclarativeOpenMetaObjectType@@XZ @ 1158 NONAME ; class QDeclarativeOpenMetaObjectType * QDeclarativeOpenMetaObject::type(void) const
+ ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 1157 NONAME ABSENT ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *)
+ ?type@QDeclarativeOpenMetaObject@@QBEPAVQDeclarativeOpenMetaObjectType@@XZ @ 1158 NONAME ABSENT ; class QDeclarativeOpenMetaObjectType * QDeclarativeOpenMetaObject::type(void) const
?tr@QDeclarativeExpression@@SA?AVQString@@PBD0@Z @ 1159 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *)
- ??0QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 1160 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(void)
- ??1QDeclarativeDebugPropertyWatch@@UAE@XZ @ 1161 NONAME ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(void)
+ ??0QDeclarativeDomValueValueInterceptor@@QAE@XZ @ 1160 NONAME ABSENT ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(void)
+ ??1QDeclarativeDebugPropertyWatch@@UAE@XZ @ 1161 NONAME ABSENT ; QDeclarativeDebugPropertyWatch::~QDeclarativeDebugPropertyWatch(void)
?evaluate@QDeclarativeExpression@@QAE?AVQVariant@@PA_N@Z @ 1162 NONAME ; class QVariant QDeclarativeExpression::evaluate(bool *)
- ?isDefaultProperty@QDeclarativeDomProperty@@QBE_NXZ @ 1163 NONAME ; bool QDeclarativeDomProperty::isDefaultProperty(void) const
- ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1164 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QVariant const &)
- ?metaObject@QDeclarativeRectangle@@UBEPBUQMetaObject@@XZ @ 1165 NONAME ; struct QMetaObject const * QDeclarativeRectangle::metaObject(void) const
- ?removeRelatedMetaObject@QMetaObjectBuilder@@QAEXH@Z @ 1166 NONAME ; void QMetaObjectBuilder::removeRelatedMetaObject(int)
+ ?isDefaultProperty@QDeclarativeDomProperty@@QBE_NXZ @ 1163 NONAME ABSENT ; bool QDeclarativeDomProperty::isDefaultProperty(void) const
+ ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1164 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QVariant const &)
+ ?metaObject@QDeclarativeRectangle@@UBEPBUQMetaObject@@XZ @ 1165 NONAME ABSENT ; struct QMetaObject const * QDeclarativeRectangle::metaObject(void) const
+ ?removeRelatedMetaObject@QMetaObjectBuilder@@QAEXH@Z @ 1166 NONAME ABSENT ; void QMetaObjectBuilder::removeRelatedMetaObject(int)
??0QDeclarativeError@@QAE@XZ @ 1167 NONAME ; QDeclarativeError::QDeclarativeError(void)
- ?hasValue@QDeclarativeOpenMetaObject@@QBE_NH@Z @ 1168 NONAME ; bool QDeclarativeOpenMetaObject::hasValue(int) const
+ ?hasValue@QDeclarativeOpenMetaObject@@QBE_NH@Z @ 1168 NONAME ABSENT ; bool QDeclarativeOpenMetaObject::hasValue(int) const
?object@QDeclarativeProperty@@QBEPAVQObject@@XZ @ 1169 NONAME ; class QObject * QDeclarativeProperty::object(void) const
?stateGroup@QDeclarativeState@@QBEPAVQDeclarativeStateGroup@@XZ @ 1170 NONAME ; class QDeclarativeStateGroup * QDeclarativeState::stateGroup(void) const
?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@H@Z @ 1171 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, int) const
?focusChanged@QDeclarativeItemPrivate@@UAEX_N@Z @ 1172 NONAME ; void QDeclarativeItemPrivate::focusChanged(bool)
- ?contextDebugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 1173 NONAME ; int QDeclarativeDebugObjectReference::contextDebugId(void) const
- ?url@QDeclarativeDebugFileReference@@QBE?AVQUrl@@XZ @ 1174 NONAME ; class QUrl QDeclarativeDebugFileReference::url(void) const
- ?paint@QDeclarativeRectangle@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1175 NONAME ; void QDeclarativeRectangle::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+ ?contextDebugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 1173 NONAME ABSENT ; int QDeclarativeDebugObjectReference::contextDebugId(void) const
+ ?url@QDeclarativeDebugFileReference@@QBE?AVQUrl@@XZ @ 1174 NONAME ABSENT ; class QUrl QDeclarativeDebugFileReference::url(void) const
+ ?paint@QDeclarativeRectangle@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1175 NONAME ABSENT ; void QDeclarativeRectangle::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
??6QDeclarativeState@@QAEAAV0@PAVQDeclarativeStateOperation@@@Z @ 1176 NONAME ; class QDeclarativeState & QDeclarativeState::operator<<(class QDeclarativeStateOperation *)
- ?destroy@QDeclarativeAbstractBinding@@UAEXXZ @ 1177 NONAME ; void QDeclarativeAbstractBinding::destroy(void)
- ?qt_metacast@QDeclarativeDebugService@@UAEPAXPBD@Z @ 1178 NONAME ; void * QDeclarativeDebugService::qt_metacast(char const *)
- ?qt_metacast@QDeclarativeValueType@@UAEPAXPBD@Z @ 1179 NONAME ; void * QDeclarativeValueType::qt_metacast(char const *)
+ ?destroy@QDeclarativeAbstractBinding@@UAEXXZ @ 1177 NONAME ABSENT ; void QDeclarativeAbstractBinding::destroy(void)
+ ?qt_metacast@QDeclarativeDebugService@@UAEPAXPBD@Z @ 1178 NONAME ABSENT ; void * QDeclarativeDebugService::qt_metacast(char const *)
+ ?qt_metacast@QDeclarativeValueType@@UAEPAXPBD@Z @ 1179 NONAME ABSENT ; void * QDeclarativeValueType::qt_metacast(char const *)
?childAt@QDeclarativeItem@@QBEPAV1@MM@Z @ 1180 NONAME ; class QDeclarativeItem * QDeclarativeItem::childAt(float, float) const
- ?paintedWidth@QDeclarativeText@@QBEMXZ @ 1181 NONAME ; float QDeclarativeText::paintedWidth(void) const
- ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1182 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *)
+ ?paintedWidth@QDeclarativeText@@QBEMXZ @ 1181 NONAME ABSENT ; float QDeclarativeText::paintedWidth(void) const
+ ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1182 NONAME ABSENT ; class QString QDeclarativeBinding::tr(char const *, char const *)
?clip@QDeclarativeItem@@QBE_NXZ @ 1183 NONAME ; bool QDeclarativeItem::clip(void) const
- ??0QDeclarativeValueTypeFactory@@QAE@XZ @ 1184 NONAME ; QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory(void)
+ ??0QDeclarativeValueTypeFactory@@QAE@XZ @ 1184 NONAME ABSENT ; QDeclarativeValueTypeFactory::QDeclarativeValueTypeFactory(void)
??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@PAVQObject@@@Z @ 1185 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QUrl const &, class QObject *)
- ?literal@QDeclarativeDomValueLiteral@@QBE?AVQString@@XZ @ 1186 NONAME ; class QString QDeclarativeDomValueLiteral::literal(void) const
- ??_EQDeclarativeEngineDebug@@UAE@I@Z @ 1187 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(unsigned int)
- ?bottom@QDeclarativeScaleGrid@@QBEHXZ @ 1188 NONAME ; int QDeclarativeScaleGrid::bottom(void) const
+ ?literal@QDeclarativeDomValueLiteral@@QBE?AVQString@@XZ @ 1186 NONAME ABSENT ; class QString QDeclarativeDomValueLiteral::literal(void) const
+ ??_EQDeclarativeEngineDebug@@UAE@I@Z @ 1187 NONAME ABSENT ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(unsigned int)
+ ?bottom@QDeclarativeScaleGrid@@QBEHXZ @ 1188 NONAME ABSENT ; int QDeclarativeScaleGrid::bottom(void) const
?d_func@QDeclarativePropertyMap@@AAEPAVQDeclarativePropertyMapPrivate@@XZ @ 1189 NONAME ; class QDeclarativePropertyMapPrivate * QDeclarativePropertyMap::d_func(void)
?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1190 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *)
?rect@QDeclarativePixmap@@QBE?AVQRect@@XZ @ 1191 NONAME ; class QRect QDeclarativePixmap::rect(void) const
??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1192 NONAME ; QDeclarativeTransition::QDeclarativeTransition(class QObject *)
- ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1193 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const
+ ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1193 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const
?setObjectOwnership@QDeclarativeEngine@@SAXPAVQObject@@W4ObjectOwnership@1@@Z @ 1194 NONAME ; void QDeclarativeEngine::setObjectOwnership(class QObject *, enum QDeclarativeEngine::ObjectOwnership)
?tr@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 1195 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *, int)
- ?metaCall@QDeclarativeOpenMetaObject@@MAEHW4Call@QMetaObject@@HPAPAX@Z @ 1196 NONAME ; int QDeclarativeOpenMetaObject::metaCall(enum QMetaObject::Call, int, void * *)
- ??_EQDeclarativeText@@UAE@I@Z @ 1197 NONAME ; QDeclarativeText::~QDeclarativeText(unsigned int)
- ?setLeftMargin@QDeclarativeAnchors@@QAEXM@Z @ 1198 NONAME ; void QDeclarativeAnchors::setLeftMargin(float)
+ ?metaCall@QDeclarativeOpenMetaObject@@MAEHW4Call@QMetaObject@@HPAPAX@Z @ 1196 NONAME ABSENT ; int QDeclarativeOpenMetaObject::metaCall(enum QMetaObject::Call, int, void * *)
+ ??_EQDeclarativeText@@UAE@I@Z @ 1197 NONAME ABSENT ; QDeclarativeText::~QDeclarativeText(unsigned int)
+ ?setLeftMargin@QDeclarativeAnchors@@QAEXM@Z @ 1198 NONAME ABSENT ; void QDeclarativeAnchors::setLeftMargin(float)
?metaObject@QDeclarativeStateGroup@@UBEPBUQMetaObject@@XZ @ 1199 NONAME ; struct QMetaObject const * QDeclarativeStateGroup::metaObject(void) const
- ?expression@QDeclarativeAbstractBinding@@UBE?AVQString@@XZ @ 1200 NONAME ; class QString QDeclarativeAbstractBinding::expression(void) const
+ ?expression@QDeclarativeAbstractBinding@@UBE?AVQString@@XZ @ 1200 NONAME ABSENT ; class QString QDeclarativeAbstractBinding::expression(void) const
??6QDeclarativeInfo@@QAEAAV0@N@Z @ 1201 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(double)
- ?setAnimation@QDeclarativeBehavior@@QAEXPAVQDeclarativeAbstractAnimation@@@Z @ 1202 NONAME ; void QDeclarativeBehavior::setAnimation(class QDeclarativeAbstractAnimation *)
- ?properties@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugPropertyReference@@@@XZ @ 1203 NONAME ; class QList<class QDeclarativeDebugPropertyReference> QDeclarativeDebugObjectReference::properties(void) const
+ ?setAnimation@QDeclarativeBehavior@@QAEXPAVQDeclarativeAbstractAnimation@@@Z @ 1202 NONAME ABSENT ; void QDeclarativeBehavior::setAnimation(class QDeclarativeAbstractAnimation *)
+ ?properties@QDeclarativeDebugObjectReference@@QBE?AV?$QList@VQDeclarativeDebugPropertyReference@@@@XZ @ 1203 NONAME ABSENT ; class QList<class QDeclarativeDebugPropertyReference> QDeclarativeDebugObjectReference::properties(void) const
?trUtf8@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1204 NONAME ; class QString QDeclarativePixmap::trUtf8(char const *, char const *)
- ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 1205 NONAME ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *)
+ ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0@Z @ 1205 NONAME ABSENT ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *)
?context@QDeclarativeExpression@@QBEPAVQDeclarativeContext@@XZ @ 1206 NONAME ; class QDeclarativeContext * QDeclarativeExpression::context(void) const
- ?qt_metacast@QDeclarativeBehavior@@UAEPAXPBD@Z @ 1207 NONAME ; void * QDeclarativeBehavior::qt_metacast(char const *)
- ?objectTypeMinorVersion@QDeclarativeDomObject@@QBEHXZ @ 1208 NONAME ; int QDeclarativeDomObject::objectTypeMinorVersion(void) const
+ ?qt_metacast@QDeclarativeBehavior@@UAEPAXPBD@Z @ 1207 NONAME ABSENT ; void * QDeclarativeBehavior::qt_metacast(char const *)
+ ?objectTypeMinorVersion@QDeclarativeDomObject@@QBEHXZ @ 1208 NONAME ABSENT ; int QDeclarativeDomObject::objectTypeMinorVersion(void) const
??0QDeclarativePropertyValueInterceptor@@QAE@XZ @ 1209 NONAME ; QDeclarativePropertyValueInterceptor::QDeclarativePropertyValueInterceptor(void)
?isValid@QDeclarativeError@@QBE_NXZ @ 1210 NONAME ; bool QDeclarativeError::isValid(void) const
- ??0QMetaMethodBuilder@@QAE@XZ @ 1211 NONAME ; QMetaMethodBuilder::QMetaMethodBuilder(void)
+ ??0QMetaMethodBuilder@@QAE@XZ @ 1211 NONAME ABSENT ; QMetaMethodBuilder::QMetaMethodBuilder(void)
?completed@QDeclarativeState@@IAEXXZ @ 1212 NONAME ; void QDeclarativeState::completed(void)
- ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1213 NONAME ; void QDeclarativeRectangle::radiusChanged(void)
+ ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1213 NONAME ABSENT ; void QDeclarativeRectangle::radiusChanged(void)
?getStaticMetaObject@QDeclarativeExpression@@SAABUQMetaObject@@XZ @ 1214 NONAME ; struct QMetaObject const & QDeclarativeExpression::getStaticMetaObject(void)
- ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1215 NONAME ; int QDeclarativeGridScaledImage::gridLeft(void) const
- ?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 1216 NONAME ; void QMetaPropertyBuilder::setWritable(bool)
+ ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1215 NONAME ABSENT ; int QDeclarativeGridScaledImage::gridLeft(void) const
+ ?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 1216 NONAME ABSENT ; void QMetaPropertyBuilder::setWritable(bool)
?qt_metacast@QDeclarativeStateGroup@@UAEPAXPBD@Z @ 1217 NONAME ; void * QDeclarativeStateGroup::qt_metacast(char const *)
- ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PAVQObject@@@Z @ 1218 NONAME ; class QMetaMethod QDeclarativeMetaType::defaultMethod(class QObject *)
- ?qt_metacast@QDeclarativeEngineDebug@@UAEPAXPBD@Z @ 1219 NONAME ; void * QDeclarativeEngineDebug::qt_metacast(char const *)
+ ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PAVQObject@@@Z @ 1218 NONAME ABSENT ; class QMetaMethod QDeclarativeMetaType::defaultMethod(class QObject *)
+ ?qt_metacast@QDeclarativeEngineDebug@@UAEPAXPBD@Z @ 1219 NONAME ABSENT ; void * QDeclarativeEngineDebug::qt_metacast(char const *)
?staticMetaObject@QDeclarativeExpression@@2UQMetaObject@@B @ 1220 NONAME ; struct QMetaObject const QDeclarativeExpression::staticMetaObject
?statusChanged@QDeclarativeComponent@@IAEXW4Status@1@@Z @ 1221 NONAME ; void QDeclarativeComponent::statusChanged(enum QDeclarativeComponent::Status)
- ?setTarget@QDeclarativeBinding@@QAEXABVQDeclarativeProperty@@@Z @ 1222 NONAME ; void QDeclarativeBinding::setTarget(class QDeclarativeProperty const &)
+ ?setTarget@QDeclarativeBinding@@QAEXABVQDeclarativeProperty@@@Z @ 1222 NONAME ABSENT ; void QDeclarativeBinding::setTarget(class QDeclarativeProperty const &)
?imageProvider@QDeclarativeEngine@@QBEPAVQDeclarativeImageProvider@@ABVQString@@@Z @ 1223 NONAME ; class QDeclarativeImageProvider * QDeclarativeEngine::imageProvider(class QString const &) const
- ?packetsAvailable@QPacketProtocol@@QBE_JXZ @ 1224 NONAME ; long long QPacketProtocol::packetsAvailable(void) const
- ?state@QDeclarativeDebugWatch@@QBE?AW4State@1@XZ @ 1225 NONAME ; enum QDeclarativeDebugWatch::State QDeclarativeDebugWatch::state(void) const
- ?attachedPropertiesFuncById@QDeclarativeMetaType@@SAP6APAVQObject@@PAV2@@ZH@Z @ 1226 NONAME ; class QObject * (*)(class QObject *) QDeclarativeMetaType::attachedPropertiesFuncById(int)
- ?resetBaseline@QDeclarativeAnchors@@QAEXXZ @ 1227 NONAME ; void QDeclarativeAnchors::resetBaseline(void)
- ?name@QDeclarativeDebugClient@@QBE?AVQString@@XZ @ 1228 NONAME ; class QString QDeclarativeDebugClient::name(void) const
- ?propertyValueInterceptorCast@QDeclarativeType@@QBEHXZ @ 1229 NONAME ; int QDeclarativeType::propertyValueInterceptorCast(void) const
+ ?packetsAvailable@QPacketProtocol@@QBE_JXZ @ 1224 NONAME ABSENT ; long long QPacketProtocol::packetsAvailable(void) const
+ ?state@QDeclarativeDebugWatch@@QBE?AW4State@1@XZ @ 1225 NONAME ABSENT ; enum QDeclarativeDebugWatch::State QDeclarativeDebugWatch::state(void) const
+ ?attachedPropertiesFuncById@QDeclarativeMetaType@@SAP6APAVQObject@@PAV2@@ZH@Z @ 1226 NONAME ABSENT ; class QObject * (*)(class QObject *) QDeclarativeMetaType::attachedPropertiesFuncById(int)
+ ?resetBaseline@QDeclarativeAnchors@@QAEXXZ @ 1227 NONAME ABSENT ; void QDeclarativeAnchors::resetBaseline(void)
+ ?name@QDeclarativeDebugClient@@QBE?AVQString@@XZ @ 1228 NONAME ABSENT ; class QString QDeclarativeDebugClient::name(void) const
+ ?propertyValueInterceptorCast@QDeclarativeType@@QBEHXZ @ 1229 NONAME ABSENT ; int QDeclarativeType::propertyValueInterceptorCast(void) const
?setData@QDeclarativeComponent@@QAEXABVQByteArray@@ABVQUrl@@@Z @ 1230 NONAME ; void QDeclarativeComponent::setData(class QByteArray const &, class QUrl const &)
- ??4QDeclarativeDomValue@@QAEAAV0@ABV0@@Z @ 1231 NONAME ; class QDeclarativeDomValue & QDeclarativeDomValue::operator=(class QDeclarativeDomValue const &)
- ?toString@QDeclarativeListModel@@UBE?AVQString@@H@Z @ 1232 NONAME ; class QString QDeclarativeListModel::toString(int) const
+ ??4QDeclarativeDomValue@@QAEAAV0@ABV0@@Z @ 1231 NONAME ABSENT ; class QDeclarativeDomValue & QDeclarativeDomValue::operator=(class QDeclarativeDomValue const &)
+ ?toString@QDeclarativeListModel@@UBE?AVQString@@H@Z @ 1232 NONAME ABSENT ; class QString QDeclarativeListModel::toString(int) const
?resetWidth@QDeclarativeItem@@QAEXXZ @ 1233 NONAME ; void QDeclarativeItem::resetWidth(void)
??0QDeclarativeProperty@@QAE@ABV0@@Z @ 1234 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QDeclarativeProperty const &)
- ?text@QDeclarativeText@@QBE?AVQString@@XZ @ 1235 NONAME ; class QString QDeclarativeText::text(void) const
- ??1QDeclarativeDebugObjectQuery@@UAE@XZ @ 1236 NONAME ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(void)
- ?count@QDeclarativeOpenMetaObject@@QBEHXZ @ 1237 NONAME ; int QDeclarativeOpenMetaObject::count(void) const
- ?isFlag@QMetaEnumBuilder@@QBE_NXZ @ 1238 NONAME ; bool QMetaEnumBuilder::isFlag(void) const
- ?bindingIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1239 NONAME ; int QDeclarativePropertyPrivate::bindingIndex(class QDeclarativeProperty const &)
- ??0QDeclarativeDomValueBinding@@QAE@ABV0@@Z @ 1240 NONAME ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(class QDeclarativeDomValueBinding const &)
- ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 1241 NONAME ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *)
- ?classInfoName@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 1242 NONAME ; class QByteArray QMetaObjectBuilder::classInfoName(int) const
- ?metaObject@QDeclarativeDebugObjectQuery@@UBEPBUQMetaObject@@XZ @ 1243 NONAME ; struct QMetaObject const * QDeclarativeDebugObjectQuery::metaObject(void) const
- ??4QDeclarativeDomDynamicProperty@@QAEAAV0@ABV0@@Z @ 1244 NONAME ; class QDeclarativeDomDynamicProperty & QDeclarativeDomDynamicProperty::operator=(class QDeclarativeDomDynamicProperty const &)
- ??_EQDeclarativeDebugEngineReference@@QAE@I@Z @ 1245 NONAME ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(unsigned int)
- ?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 1246 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const
+ ?text@QDeclarativeText@@QBE?AVQString@@XZ @ 1235 NONAME ABSENT ; class QString QDeclarativeText::text(void) const
+ ??1QDeclarativeDebugObjectQuery@@UAE@XZ @ 1236 NONAME ABSENT ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(void)
+ ?count@QDeclarativeOpenMetaObject@@QBEHXZ @ 1237 NONAME ABSENT ; int QDeclarativeOpenMetaObject::count(void) const
+ ?isFlag@QMetaEnumBuilder@@QBE_NXZ @ 1238 NONAME ABSENT ; bool QMetaEnumBuilder::isFlag(void) const
+ ?bindingIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1239 NONAME ABSENT ; int QDeclarativePropertyPrivate::bindingIndex(class QDeclarativeProperty const &)
+ ??0QDeclarativeDomValueBinding@@QAE@ABV0@@Z @ 1240 NONAME ABSENT ; QDeclarativeDomValueBinding::QDeclarativeDomValueBinding(class QDeclarativeDomValueBinding const &)
+ ?trUtf8@QDeclarativeRectangle@@SA?AVQString@@PBD0@Z @ 1241 NONAME ABSENT ; class QString QDeclarativeRectangle::trUtf8(char const *, char const *)
+ ?classInfoName@QMetaObjectBuilder@@QBE?AVQByteArray@@H@Z @ 1242 NONAME ABSENT ; class QByteArray QMetaObjectBuilder::classInfoName(int) const
+ ?metaObject@QDeclarativeDebugObjectQuery@@UBEPBUQMetaObject@@XZ @ 1243 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugObjectQuery::metaObject(void) const
+ ??4QDeclarativeDomDynamicProperty@@QAEAAV0@ABV0@@Z @ 1244 NONAME ABSENT ; class QDeclarativeDomDynamicProperty & QDeclarativeDomDynamicProperty::operator=(class QDeclarativeDomDynamicProperty const &)
+ ??_EQDeclarativeDebugEngineReference@@QAE@I@Z @ 1245 NONAME ABSENT ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(unsigned int)
+ ?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 1246 NONAME ABSENT ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const
?baseline@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1247 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::baseline(void) const
- ?clear@QDeclarativeListModel@@QAEXXZ @ 1248 NONAME ; void QDeclarativeListModel::clear(void)
- ??0QDeclarativeDebugObjectExpressionWatch@@QAE@PAVQObject@@@Z @ 1249 NONAME ; QDeclarativeDebugObjectExpressionWatch::QDeclarativeDebugObjectExpressionWatch(class QObject *)
- ??4QDeclarativeDomProperty@@QAEAAV0@ABV0@@Z @ 1250 NONAME ; class QDeclarativeDomProperty & QDeclarativeDomProperty::operator=(class QDeclarativeDomProperty const &)
+ ?clear@QDeclarativeListModel@@QAEXXZ @ 1248 NONAME ABSENT ; void QDeclarativeListModel::clear(void)
+ ??0QDeclarativeDebugObjectExpressionWatch@@QAE@PAVQObject@@@Z @ 1249 NONAME ABSENT ; QDeclarativeDebugObjectExpressionWatch::QDeclarativeDebugObjectExpressionWatch(class QObject *)
+ ??4QDeclarativeDomProperty@@QAEAAV0@ABV0@@Z @ 1250 NONAME ABSENT ; class QDeclarativeDomProperty & QDeclarativeDomProperty::operator=(class QDeclarativeDomProperty const &)
?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@@Z @ 1251 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &)
?trUtf8@QDeclarativeContext@@SA?AVQString@@PBD0@Z @ 1252 NONAME ; class QString QDeclarativeContext::trUtf8(char const *, char const *)
- ?borderChanged@QDeclarativeScaleGrid@@IAEXXZ @ 1253 NONAME ; void QDeclarativeScaleGrid::borderChanged(void)
- ??1QDeclarativeRectangle@@UAE@XZ @ 1254 NONAME ; QDeclarativeRectangle::~QDeclarativeRectangle(void)
+ ?borderChanged@QDeclarativeScaleGrid@@IAEXXZ @ 1253 NONAME ABSENT ; void QDeclarativeScaleGrid::borderChanged(void)
+ ??1QDeclarativeRectangle@@UAE@XZ @ 1254 NONAME ABSENT ; QDeclarativeRectangle::~QDeclarativeRectangle(void)
?count@QDeclarativePropertyMap@@QBEHXZ @ 1255 NONAME ; int QDeclarativePropertyMap::count(void) const
- ?setReturnType@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1256 NONAME ; void QMetaMethodBuilder::setReturnType(class QByteArray const &)
+ ?setReturnType@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1256 NONAME ABSENT ; void QMetaMethodBuilder::setReturnType(class QByteArray const &)
??0QDeclarativePropertyValueSource@@QAE@XZ @ 1257 NONAME ; QDeclarativePropertyValueSource::QDeclarativePropertyValueSource(void)
- ?tr@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 1258 NONAME ; class QString QDeclarativePen::tr(char const *, char const *, int)
- ?toLiteral@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueLiteral@@XZ @ 1259 NONAME ; class QDeclarativeDomValueLiteral QDeclarativeDomValue::toLiteral(void) const
- ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@_N@Z @ 1260 NONAME ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, bool)
+ ?tr@QDeclarativePen@@SA?AVQString@@PBD0H@Z @ 1258 NONAME ABSENT ; class QString QDeclarativePen::tr(char const *, char const *, int)
+ ?toLiteral@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueLiteral@@XZ @ 1259 NONAME ABSENT ; class QDeclarativeDomValueLiteral QDeclarativeDomValue::toLiteral(void) const
+ ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@_N@Z @ 1260 NONAME ABSENT ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, bool)
?url@QDeclarativeComponent@@QBE?AVQUrl@@XZ @ 1261 NONAME ; class QUrl QDeclarativeComponent::url(void) const
?componentComplete@QDeclarativeStateGroup@@UAEXXZ @ 1262 NONAME ; void QDeclarativeStateGroup::componentComplete(void)
- ?setMargins@QDeclarativeAnchors@@QAEXM@Z @ 1263 NONAME ; void QDeclarativeAnchors::setMargins(float)
+ ?setMargins@QDeclarativeAnchors@@QAEXM@Z @ 1263 NONAME ABSENT ; void QDeclarativeAnchors::setMargins(float)
?qt_metacall@QDeclarativeView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1264 NONAME ; int QDeclarativeView::qt_metacall(enum QMetaObject::Call, int, void * *)
?state@QDeclarativeStateGroup@@QBE?AVQString@@XZ @ 1265 NONAME ; class QString QDeclarativeStateGroup::state(void) const
- ??0QDeclarativeDomComponent@@QAE@ABV0@@Z @ 1266 NONAME ; QDeclarativeDomComponent::QDeclarativeDomComponent(class QDeclarativeDomComponent const &)
- ?queryAvailableEngines@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugEnginesQuery@@PAVQObject@@@Z @ 1267 NONAME ; class QDeclarativeDebugEnginesQuery * QDeclarativeEngineDebug::queryAvailableEngines(class QObject *)
+ ??0QDeclarativeDomComponent@@QAE@ABV0@@Z @ 1266 NONAME ABSENT ; QDeclarativeDomComponent::QDeclarativeDomComponent(class QDeclarativeDomComponent const &)
+ ?queryAvailableEngines@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugEnginesQuery@@PAVQObject@@@Z @ 1267 NONAME ABSENT ; class QDeclarativeDebugEnginesQuery * QDeclarativeEngineDebug::queryAvailableEngines(class QObject *)
??_EQDeclarativeItemPrivate@@UAE@I@Z @ 1268 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(unsigned int)
- ?expression@QDeclarativeBinding@@UBE?AVQString@@XZ @ 1269 NONAME ; class QString QDeclarativeBinding::expression(void) const
- ?position@QDeclarativeDomProperty@@QBEHXZ @ 1270 NONAME ; int QDeclarativeDomProperty::position(void) const
- ?registerValueTypes@QDeclarativeValueTypeFactory@@SAXXZ @ 1271 NONAME ; void QDeclarativeValueTypeFactory::registerValueTypes(void)
- ?dynamicProperties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomDynamicProperty@@@@XZ @ 1272 NONAME ; class QList<class QDeclarativeDomDynamicProperty> QDeclarativeDomObject::dynamicProperties(void) const
- ?attachedPropertiesFunction@QDeclarativeType@@QBEP6APAVQObject@@PAV2@@ZXZ @ 1273 NONAME ; class QObject * (*)(class QObject *) QDeclarativeType::attachedPropertiesFunction(void) const
+ ?expression@QDeclarativeBinding@@UBE?AVQString@@XZ @ 1269 NONAME ABSENT ; class QString QDeclarativeBinding::expression(void) const
+ ?position@QDeclarativeDomProperty@@QBEHXZ @ 1270 NONAME ABSENT ; int QDeclarativeDomProperty::position(void) const
+ ?registerValueTypes@QDeclarativeValueTypeFactory@@SAXXZ @ 1271 NONAME ABSENT ; void QDeclarativeValueTypeFactory::registerValueTypes(void)
+ ?dynamicProperties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomDynamicProperty@@@@XZ @ 1272 NONAME ABSENT ; class QList<class QDeclarativeDomDynamicProperty> QDeclarativeDomObject::dynamicProperties(void) const
+ ?attachedPropertiesFunction@QDeclarativeType@@QBEP6APAVQObject@@PAV2@@ZXZ @ 1273 NONAME ABSENT ; class QObject * (*)(class QObject *) QDeclarativeType::attachedPropertiesFunction(void) const
??1QDeclarativePropertyMap@@UAE@XZ @ 1274 NONAME ; QDeclarativePropertyMap::~QDeclarativePropertyMap(void)
??_EQDeclarativeExtensionInterface@@UAE@I@Z @ 1275 NONAME ; QDeclarativeExtensionInterface::~QDeclarativeExtensionInterface(unsigned int)
??0Variant@QDeclarativeParser@@QAE@NABVQString@@@Z @ 1276 NONAME ; QDeclarativeParser::Variant::Variant(double, class QString const &)
??6QDeclarativeInfo@@QAEAAV0@VQBool@@@Z @ 1277 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QBool)
- ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@PAVQObject@@HHPAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1278 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QObject *, int, int, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?qt_metacast@QDeclarativeDebugExpressionQuery@@UAEPAXPBD@Z @ 1279 NONAME ; void * QDeclarativeDebugExpressionQuery::qt_metacast(char const *)
+ ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@PAVQObject@@HHPAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1278 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QObject *, int, int, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?qt_metacast@QDeclarativeDebugExpressionQuery@@UAEPAXPBD@Z @ 1279 NONAME ABSENT ; void * QDeclarativeDebugExpressionQuery::qt_metacast(char const *)
?contextProperty@QDeclarativeContext@@QBE?AVQVariant@@ABVQString@@@Z @ 1280 NONAME ; class QVariant QDeclarativeContext::contextProperty(class QString const &) const
?verticalCenter@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1281 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::verticalCenter(void) const
- ?metaObject@QDeclarativeScaleGrid@@UBEPBUQMetaObject@@XZ @ 1282 NONAME ; struct QMetaObject const * QDeclarativeScaleGrid::metaObject(void) const
+ ?metaObject@QDeclarativeScaleGrid@@UBEPBUQMetaObject@@XZ @ 1282 NONAME ABSENT ; struct QMetaObject const * QDeclarativeScaleGrid::metaObject(void) const
?qmlContext@@YAPAVQDeclarativeContext@@PBVQObject@@@Z @ 1283 NONAME ; class QDeclarativeContext * qmlContext(class QObject const *)
- ?setMethodBody@QDeclarativeEngineDebug@@QAE_NHABVQString@@0@Z @ 1284 NONAME ; bool QDeclarativeEngineDebug::setMethodBody(int, class QString const &, class QString const &)
+ ?setMethodBody@QDeclarativeEngineDebug@@QAE_NHABVQString@@0@Z @ 1284 NONAME ABSENT ; bool QDeclarativeEngineDebug::setMethodBody(int, class QString const &, class QString const &)
?transform_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 1285 NONAME ; int QDeclarativeItemPrivate::transform_count(class QDeclarativeListProperty<class QGraphicsTransform> *)
- ?tr@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 1286 NONAME ; class QString QListModelInterface::tr(char const *, char const *, int)
- ??1QDeclarativeDebugFileReference@@QAE@XZ @ 1287 NONAME ; QDeclarativeDebugFileReference::~QDeclarativeDebugFileReference(void)
- ?style@QDeclarativeText@@QBE?AW4TextStyle@1@XZ @ 1288 NONAME ; enum QDeclarativeText::TextStyle QDeclarativeText::style(void) const
- ??0QDeclarativeAbstractBinding@@QAE@XZ @ 1289 NONAME ; QDeclarativeAbstractBinding::QDeclarativeAbstractBinding(void)
- ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1290 NONAME ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject
+ ?tr@QListModelInterface@@SA?AVQString@@PBD0H@Z @ 1286 NONAME ABSENT ; class QString QListModelInterface::tr(char const *, char const *, int)
+ ??1QDeclarativeDebugFileReference@@QAE@XZ @ 1287 NONAME ABSENT ; QDeclarativeDebugFileReference::~QDeclarativeDebugFileReference(void)
+ ?style@QDeclarativeText@@QBE?AW4TextStyle@1@XZ @ 1288 NONAME ABSENT ; enum QDeclarativeText::TextStyle QDeclarativeText::style(void) const
+ ??0QDeclarativeAbstractBinding@@QAE@XZ @ 1289 NONAME ABSENT ; QDeclarativeAbstractBinding::QDeclarativeAbstractBinding(void)
+ ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1290 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject
?tr@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1291 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *)
?isError@QDeclarativeComponent@@QBE_NXZ @ 1292 NONAME ; bool QDeclarativeComponent::isError(void) const
?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1293 NONAME ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1294 NONAME ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const
- ??1QDeclarativeDebugConnection@@UAE@XZ @ 1295 NONAME ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(void)
- ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 1296 NONAME ; class QVariant QDeclarativeOpenMetaObject::value(int) const
- ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 1297 NONAME ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *, int)
+ ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1294 NONAME ABSENT ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const
+ ??1QDeclarativeDebugConnection@@UAE@XZ @ 1295 NONAME ABSENT ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(void)
+ ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 1296 NONAME ABSENT ; class QVariant QDeclarativeOpenMetaObject::value(int) const
+ ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 1297 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *, int)
?setFromState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 1298 NONAME ; void QDeclarativeTransition::setFromState(class QString const &)
- ?metaObject@QDeclarativeDebugService@@UBEPBUQMetaObject@@XZ @ 1299 NONAME ; struct QMetaObject const * QDeclarativeDebugService::metaObject(void) const
- ?state@QDeclarativeDebugQuery@@QBE?AW4State@1@XZ @ 1300 NONAME ; enum QDeclarativeDebugQuery::State QDeclarativeDebugQuery::state(void) const
- ?setBottom@QDeclarativeScaleGrid@@QAEXH@Z @ 1301 NONAME ; void QDeclarativeScaleGrid::setBottom(int)
- ?topMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1302 NONAME ; void QDeclarativeAnchors::topMarginChanged(void)
+ ?metaObject@QDeclarativeDebugService@@UBEPBUQMetaObject@@XZ @ 1299 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugService::metaObject(void) const
+ ?state@QDeclarativeDebugQuery@@QBE?AW4State@1@XZ @ 1300 NONAME ABSENT ; enum QDeclarativeDebugQuery::State QDeclarativeDebugQuery::state(void) const
+ ?setBottom@QDeclarativeScaleGrid@@QAEXH@Z @ 1301 NONAME ABSENT ; void QDeclarativeScaleGrid::setBottom(int)
+ ?topMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 1302 NONAME ABSENT ; void QDeclarativeAnchors::topMarginChanged(void)
?itemChange@QDeclarativeItem@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 1303 NONAME ; class QVariant QDeclarativeItem::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &)
- ?position@QDeclarativeDomObject@@QBEHXZ @ 1304 NONAME ; int QDeclarativeDomObject::position(void) const
- ?update@QDeclarativeBinding@@UAEXV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1305 NONAME ; void QDeclarativeBinding::update(class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 1306 NONAME ; class QString QDeclarativeBehavior::tr(char const *, char const *)
- ?isDebuggingEnabled@QDeclarativeDebugService@@SA_NXZ @ 1307 NONAME ; bool QDeclarativeDebugService::isDebuggingEnabled(void)
- ?tr@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 1308 NONAME ; class QString QDeclarativeText::tr(char const *, char const *, int)
+ ?position@QDeclarativeDomObject@@QBEHXZ @ 1304 NONAME ABSENT ; int QDeclarativeDomObject::position(void) const
+ ?update@QDeclarativeBinding@@UAEXV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1305 NONAME ABSENT ; void QDeclarativeBinding::update(class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0@Z @ 1306 NONAME ABSENT ; class QString QDeclarativeBehavior::tr(char const *, char const *)
+ ?isDebuggingEnabled@QDeclarativeDebugService@@SA_NXZ @ 1307 NONAME ABSENT ; bool QDeclarativeDebugService::isDebuggingEnabled(void)
+ ?tr@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 1308 NONAME ABSENT ; class QString QDeclarativeText::tr(char const *, char const *, int)
?reset@QDeclarativeProperty@@QBE_NXZ @ 1309 NONAME ; bool QDeclarativeProperty::reset(void) const
- ?objectDebugId@QDeclarativeDebugWatch@@QBEHXZ @ 1310 NONAME ; int QDeclarativeDebugWatch::objectDebugId(void) const
+ ?objectDebugId@QDeclarativeDebugWatch@@QBEHXZ @ 1310 NONAME ABSENT ; int QDeclarativeDebugWatch::objectDebugId(void) const
?width@QDeclarativeItemPrivate@@UBEMXZ @ 1311 NONAME ; float QDeclarativeItemPrivate::width(void) const
- ?d_func@QMetaMethodBuilder@@ABEPAVQMetaMethodBuilderPrivate@@XZ @ 1312 NONAME ; class QMetaMethodBuilderPrivate * QMetaMethodBuilder::d_func(void) const
+ ?d_func@QMetaMethodBuilder@@ABEPAVQMetaMethodBuilderPrivate@@XZ @ 1312 NONAME ABSENT ; class QMetaMethodBuilderPrivate * QMetaMethodBuilder::d_func(void) const
?isScript@Variant@QDeclarativeParser@@QBE_NXZ @ 1313 NONAME ; bool QDeclarativeParser::Variant::isScript(void) const
?classBegin@QDeclarativeStateGroup@@UAEXXZ @ 1314 NONAME ; void QDeclarativeStateGroup::classBegin(void)
- ?qt_metacast@QDeclarativeRectangle@@UAEPAXPBD@Z @ 1315 NONAME ; void * QDeclarativeRectangle::qt_metacast(char const *)
+ ?qt_metacast@QDeclarativeRectangle@@UAEPAXPBD@Z @ 1315 NONAME ABSENT ; void * QDeclarativeRectangle::qt_metacast(char const *)
?qt_metacast@QDeclarativeExpression@@UAEPAXPBD@Z @ 1316 NONAME ; void * QDeclarativeExpression::qt_metacast(char const *)
- ?indexOfProperty@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1317 NONAME ; int QMetaObjectBuilder::indexOfProperty(class QByteArray const &)
- ?vAlign@QDeclarativeText@@QBE?AW4VAlignment@1@XZ @ 1318 NONAME ; enum QDeclarativeText::VAlignment QDeclarativeText::vAlign(void) const
- ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQByteArray@@@Z @ 1319 NONAME ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QByteArray const &)
+ ?indexOfProperty@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1317 NONAME ABSENT ; int QMetaObjectBuilder::indexOfProperty(class QByteArray const &)
+ ?vAlign@QDeclarativeText@@QBE?AW4VAlignment@1@XZ @ 1318 NONAME ABSENT ; enum QDeclarativeText::VAlignment QDeclarativeText::vAlign(void) const
+ ?addEnumerator@QMetaObjectBuilder@@QAE?AVQMetaEnumBuilder@@ABVQByteArray@@@Z @ 1319 NONAME ABSENT ; class QMetaEnumBuilder QMetaObjectBuilder::addEnumerator(class QByteArray const &)
??1QDeclarativeError@@QAE@XZ @ 1320 NONAME ; QDeclarativeError::~QDeclarativeError(void)
?property@QDeclarativeProperty@@QBE?AVQMetaProperty@@XZ @ 1321 NONAME ; class QMetaProperty QDeclarativeProperty::property(void) const
- ?tr@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 1322 NONAME ; class QString QDeclarativeText::tr(char const *, char const *)
+ ?tr@QDeclarativeText@@SA?AVQString@@PBD0@Z @ 1322 NONAME ABSENT ; class QString QDeclarativeText::tr(char const *, char const *)
?write@QDeclarativeProperty@@SA_NPAVQObject@@ABVQString@@ABVQVariant@@PAVQDeclarativeContext@@@Z @ 1323 NONAME ; bool QDeclarativeProperty::write(class QObject *, class QString const &, class QVariant const &, class QDeclarativeContext *)
- ??0QDeclarativeGridScaledImage@@QAE@XZ @ 1324 NONAME ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(void)
- ?setText@QDeclarativeText@@QAEXABVQString@@@Z @ 1325 NONAME ; void QDeclarativeText::setText(class QString const &)
- ?setBaseline@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1326 NONAME ; void QDeclarativeAnchors::setBaseline(class QDeclarativeAnchorLine const &)
- ?resetCenterIn@QDeclarativeAnchors@@QAEXXZ @ 1327 NONAME ; void QDeclarativeAnchors::resetCenterIn(void)
- ?pixmapUrl@QDeclarativeGridScaledImage@@QBE?AVQString@@XZ @ 1328 NONAME ; class QString QDeclarativeGridScaledImage::pixmapUrl(void) const
- ?name@QDeclarativeOpenMetaObject@@QBE?AVQByteArray@@H@Z @ 1329 NONAME ; class QByteArray QDeclarativeOpenMetaObject::name(int) const
- ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 1330 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *)
+ ??0QDeclarativeGridScaledImage@@QAE@XZ @ 1324 NONAME ABSENT ; QDeclarativeGridScaledImage::QDeclarativeGridScaledImage(void)
+ ?setText@QDeclarativeText@@QAEXABVQString@@@Z @ 1325 NONAME ABSENT ; void QDeclarativeText::setText(class QString const &)
+ ?setBaseline@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1326 NONAME ABSENT ; void QDeclarativeAnchors::setBaseline(class QDeclarativeAnchorLine const &)
+ ?resetCenterIn@QDeclarativeAnchors@@QAEXXZ @ 1327 NONAME ABSENT ; void QDeclarativeAnchors::resetCenterIn(void)
+ ?pixmapUrl@QDeclarativeGridScaledImage@@QBE?AVQString@@XZ @ 1328 NONAME ABSENT ; class QString QDeclarativeGridScaledImage::pixmapUrl(void) const
+ ?name@QDeclarativeOpenMetaObject@@QBE?AVQByteArray@@H@Z @ 1329 NONAME ABSENT ; class QByteArray QDeclarativeOpenMetaObject::name(int) const
+ ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0@Z @ 1330 NONAME ABSENT ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *)
?qt_metacall@QDeclarativeEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1331 NONAME ; int QDeclarativeEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?getStaticMetaObject@QDeclarativeAnchors@@SAABUQMetaObject@@XZ @ 1332 NONAME ; struct QMetaObject const & QDeclarativeAnchors::getStaticMetaObject(void)
+ ?getStaticMetaObject@QDeclarativeAnchors@@SAABUQMetaObject@@XZ @ 1332 NONAME ABSENT ; struct QMetaObject const & QDeclarativeAnchors::getStaticMetaObject(void)
??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@@Z @ 1333 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &)
?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 1334 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *)
- ?setStaticMetacallFunction@QMetaObjectBuilder@@QAEXP6AHW4Call@QMetaObject@@HPAPAX@Z@Z @ 1335 NONAME ; void QMetaObjectBuilder::setStaticMetacallFunction(int (*)(enum QMetaObject::Call, int, void * *))
- ?properties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomProperty@@@@XZ @ 1336 NONAME ; class QList<class QDeclarativeDomProperty> QDeclarativeDomObject::properties(void) const
+ ?setStaticMetacallFunction@QMetaObjectBuilder@@QAEXP6AHW4Call@QMetaObject@@HPAPAX@Z@Z @ 1335 NONAME ABSENT ; void QMetaObjectBuilder::setStaticMetacallFunction(int (*)(enum QMetaObject::Call, int, void * *))
+ ?properties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomProperty@@@@XZ @ 1336 NONAME ABSENT ; class QList<class QDeclarativeDomProperty> QDeclarativeDomObject::properties(void) const
??0QDeclarativeExpression@@QAE@PAVQDeclarativeContext@@PAVQObject@@ABVQString@@1@Z @ 1337 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContext *, class QObject *, class QString const &, class QObject *)
?tr@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 1338 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *, int)
- ?dateTimeFromString@QDeclarativeStringConverters@@YA?AVQDateTime@@ABVQString@@PA_N@Z @ 1339 NONAME ; class QDateTime QDeclarativeStringConverters::dateTimeFromString(class QString const &, bool *)
+ ?dateTimeFromString@QDeclarativeStringConverters@@YA?AVQDateTime@@ABVQString@@PA_N@Z @ 1339 NONAME ABSENT ; class QDateTime QDeclarativeStringConverters::dateTimeFromString(class QString const &, bool *)
?implicitWidth@QDeclarativeItem@@QBEMXZ @ 1340 NONAME ; float QDeclarativeItem::implicitWidth(void) const
?metaObject@QDeclarativeContext@@UBEPBUQMetaObject@@XZ @ 1341 NONAME ; struct QMetaObject const * QDeclarativeContext::metaObject(void) const
??0QDeclarativeContext@@AAE@PAVQDeclarativeContextData@@@Z @ 1342 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContextData *)
- ?maximumPacketSize@QPacketProtocol@@QBEHXZ @ 1343 NONAME ; int QPacketProtocol::maximumPacketSize(void) const
- ??_EQDeclarativeDebuggerStatus@@UAE@I@Z @ 1344 NONAME ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(unsigned int)
+ ?maximumPacketSize@QPacketProtocol@@QBEHXZ @ 1343 NONAME ABSENT ; int QPacketProtocol::maximumPacketSize(void) const
+ ??_EQDeclarativeDebuggerStatus@@UAE@I@Z @ 1344 NONAME ABSENT ; QDeclarativeDebuggerStatus::~QDeclarativeDebuggerStatus(unsigned int)
?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 1345 NONAME ; void QDeclarativeCustomParser::error(class QString const &)
- ?messageReceived@QDeclarativeDebugService@@MAEXABVQByteArray@@@Z @ 1346 NONAME ; void QDeclarativeDebugService::messageReceived(class QByteArray const &)
+ ?messageReceived@QDeclarativeDebugService@@MAEXABVQByteArray@@@Z @ 1346 NONAME ABSENT ; void QDeclarativeDebugService::messageReceived(class QByteArray const &)
??0QDeclarativeParserStatus@@QAE@XZ @ 1347 NONAME ; QDeclarativeParserStatus::QDeclarativeParserStatus(void)
?isNumber@Variant@QDeclarativeParser@@QBE_NXZ @ 1348 NONAME ; bool QDeclarativeParser::Variant::isNumber(void) const
- ?getStaticMetaObject@QDeclarativeEngineDebug@@SAABUQMetaObject@@XZ @ 1349 NONAME ; struct QMetaObject const & QDeclarativeEngineDebug::getStaticMetaObject(void)
+ ?getStaticMetaObject@QDeclarativeEngineDebug@@SAABUQMetaObject@@XZ @ 1349 NONAME ABSENT ; struct QMetaObject const & QDeclarativeEngineDebug::getStaticMetaObject(void)
??_EQDeclarativeEngine@@UAE@I@Z @ 1350 NONAME ; QDeclarativeEngine::~QDeclarativeEngine(unsigned int)
?isNull@QDeclarativePixmap@@QBE_NXZ @ 1351 NONAME ; bool QDeclarativePixmap::isNull(void) const
??1QDeclarativeCustomParserNode@@QAE@XZ @ 1352 NONAME ; QDeclarativeCustomParserNode::~QDeclarativeCustomParserNode(void)
- ??1QDeclarativeAction@@QAE@XZ @ 1353 NONAME ; QDeclarativeAction::~QDeclarativeAction(void)
- ?resourcesLoading@QDeclarativeText@@QBEHXZ @ 1354 NONAME ; int QDeclarativeText::resourcesLoading(void) const
+ ??1QDeclarativeAction@@QAE@XZ @ 1353 NONAME ABSENT ; QDeclarativeAction::~QDeclarativeAction(void)
+ ?resourcesLoading@QDeclarativeText@@QBEHXZ @ 1354 NONAME ABSENT ; int QDeclarativeText::resourcesLoading(void) const
?isBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1355 NONAME ; bool QDeclarativeParser::Variant::isBoolean(void) const
- ??0QDeclarativeAction@@QAE@XZ @ 1356 NONAME ; QDeclarativeAction::QDeclarativeAction(void)
- ?signalOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 1357 NONAME ; int QDeclarativeOpenMetaObjectType::signalOffset(void) const
- ?index@QMetaEnumBuilder@@QBEHXZ @ 1358 NONAME ; int QMetaEnumBuilder::index(void) const
- ?setResettable@QMetaPropertyBuilder@@QAEX_N@Z @ 1359 NONAME ; void QMetaPropertyBuilder::setResettable(bool)
+ ??0QDeclarativeAction@@QAE@XZ @ 1356 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(void)
+ ?signalOffset@QDeclarativeOpenMetaObjectType@@QBEHXZ @ 1357 NONAME ABSENT ; int QDeclarativeOpenMetaObjectType::signalOffset(void) const
+ ?index@QMetaEnumBuilder@@QBEHXZ @ 1358 NONAME ABSENT ; int QMetaEnumBuilder::index(void) const
+ ?setResettable@QMetaPropertyBuilder@@QAEX_N@Z @ 1359 NONAME ABSENT ; void QMetaPropertyBuilder::setResettable(bool)
??0QDeclarativeError@@QAE@ABV0@@Z @ 1360 NONAME ; QDeclarativeError::QDeclarativeError(class QDeclarativeError const &)
- ?classInfoCount@QMetaObjectBuilder@@QBEHXZ @ 1361 NONAME ; int QMetaObjectBuilder::classInfoCount(void) const
- ?isObject@QDeclarativeDomValue@@QBE_NXZ @ 1362 NONAME ; bool QDeclarativeDomValue::isObject(void) const
- ?left@QDeclarativeScaleGrid@@QBEHXZ @ 1363 NONAME ; int QDeclarativeScaleGrid::left(void) const
- ?qt_metacast@QDeclarativeDebugEnginesQuery@@UAEPAXPBD@Z @ 1364 NONAME ; void * QDeclarativeDebugEnginesQuery::qt_metacast(char const *)
+ ?classInfoCount@QMetaObjectBuilder@@QBEHXZ @ 1361 NONAME ABSENT ; int QMetaObjectBuilder::classInfoCount(void) const
+ ?isObject@QDeclarativeDomValue@@QBE_NXZ @ 1362 NONAME ABSENT ; bool QDeclarativeDomValue::isObject(void) const
+ ?left@QDeclarativeScaleGrid@@QBEHXZ @ 1363 NONAME ABSENT ; int QDeclarativeScaleGrid::left(void) const
+ ?qt_metacast@QDeclarativeDebugEnginesQuery@@UAEPAXPBD@Z @ 1364 NONAME ABSENT ; void * QDeclarativeDebugEnginesQuery::qt_metacast(char const *)
?d_func@QDeclarativeView@@AAEPAVQDeclarativeViewPrivate@@XZ @ 1365 NONAME ; class QDeclarativeViewPrivate * QDeclarativeView::d_func(void)
- ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugPropertyWatch@@ABVQDeclarativeDebugPropertyReference@@PAVQObject@@@Z @ 1366 NONAME ; class QDeclarativeDebugPropertyWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugPropertyReference const &, class QObject *)
+ ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugPropertyWatch@@ABVQDeclarativeDebugPropertyReference@@PAVQObject@@@Z @ 1366 NONAME ABSENT ; class QDeclarativeDebugPropertyWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugPropertyReference const &, class QObject *)
?stateChanged@QDeclarativeStateGroup@@IAEXABVQString@@@Z @ 1367 NONAME ; void QDeclarativeStateGroup::stateChanged(class QString const &)
- ??0QDeclarativeDomValueValueSource@@QAE@XZ @ 1368 NONAME ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(void)
- ?customStringConverter@QDeclarativeMetaType@@SAP6A?AVQVariant@@ABVQString@@@ZH@Z @ 1369 NONAME ; class QVariant (*)(class QString const &) QDeclarativeMetaType::customStringConverter(int)
- ?baselineOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 1370 NONAME ; void QDeclarativeAnchors::baselineOffsetChanged(void)
+ ??0QDeclarativeDomValueValueSource@@QAE@XZ @ 1368 NONAME ABSENT ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(void)
+ ?customStringConverter@QDeclarativeMetaType@@SAP6A?AVQVariant@@ABVQString@@@ZH@Z @ 1369 NONAME ABSENT ; class QVariant (*)(class QString const &) QDeclarativeMetaType::customStringConverter(int)
+ ?baselineOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 1370 NONAME ABSENT ; void QDeclarativeAnchors::baselineOffsetChanged(void)
?tr@QDeclarativeView@@SA?AVQString@@PBD0H@Z @ 1371 NONAME ; class QString QDeclarativeView::tr(char const *, char const *, int)
- ??4QDeclarativeDebugFileReference@@QAEAAV0@ABV0@@Z @ 1372 NONAME ; class QDeclarativeDebugFileReference & QDeclarativeDebugFileReference::operator=(class QDeclarativeDebugFileReference const &)
+ ??4QDeclarativeDebugFileReference@@QAEAAV0@ABV0@@Z @ 1372 NONAME ABSENT ; class QDeclarativeDebugFileReference & QDeclarativeDebugFileReference::operator=(class QDeclarativeDebugFileReference const &)
?eventFilter@QDeclarativeView@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 1373 NONAME ; bool QDeclarativeView::eventFilter(class QObject *, class QEvent *)
??1QDeclarativeView@@UAE@XZ @ 1374 NONAME ; QDeclarativeView::~QDeclarativeView(void)
- ?verticalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1375 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::verticalCenter(void) const
- ?setIsFlag@QMetaEnumBuilder@@QAEX_N@Z @ 1376 NONAME ; void QMetaEnumBuilder::setIsFlag(bool)
- ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 1377 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *, int)
- ?majorVersion@QDeclarativeType@@QBEHXZ @ 1378 NONAME ; int QDeclarativeType::majorVersion(void) const
- ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 1379 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *)
+ ?verticalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1375 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::verticalCenter(void) const
+ ?setIsFlag@QMetaEnumBuilder@@QAEX_N@Z @ 1376 NONAME ABSENT ; void QMetaEnumBuilder::setIsFlag(bool)
+ ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0H@Z @ 1377 NONAME ABSENT ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *, int)
+ ?majorVersion@QDeclarativeType@@QBEHXZ @ 1378 NONAME ABSENT ; int QDeclarativeType::majorVersion(void) const
+ ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0@Z @ 1379 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *)
?baseUrl@QDeclarativeEngine@@QBE?AVQUrl@@XZ @ 1380 NONAME ; class QUrl QDeclarativeEngine::baseUrl(void) const
??6QDeclarativeInfo@@QAEAAV0@PBX@Z @ 1381 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(void const *)
- ?setTop@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1382 NONAME ; void QDeclarativeAnchors::setTop(class QDeclarativeAnchorLine const &)
- ?setEnabled@QDeclarativeBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1383 NONAME ; void QDeclarativeBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?setTop@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1382 NONAME ABSENT ; void QDeclarativeAnchors::setTop(class QDeclarativeAnchorLine const &)
+ ?setEnabled@QDeclarativeBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1383 NONAME ABSENT ; void QDeclarativeBinding::setEnabled(bool, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
??_EQDeclarativeNetworkAccessManagerFactory@@UAE@I@Z @ 1384 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(unsigned int)
- ?qmlTypes@QDeclarativeMetaType@@SA?AV?$QList@PAVQDeclarativeType@@@@XZ @ 1385 NONAME ; class QList<class QDeclarativeType *> QDeclarativeMetaType::qmlTypes(void)
- ?valueTypeCoreIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1386 NONAME ; int QDeclarativePropertyPrivate::valueTypeCoreIndex(class QDeclarativeProperty const &)
- ?writeEnumProperty@QDeclarativePropertyPrivate@@SA_NABVQMetaProperty@@HPAVQObject@@ABVQVariant@@H@Z @ 1387 NONAME ; bool QDeclarativePropertyPrivate::writeEnumProperty(class QMetaProperty const &, int, class QObject *, class QVariant const &, int)
- ?setEnabled@QDeclarativeDebugClient@@QAEX_N@Z @ 1388 NONAME ; void QDeclarativeDebugClient::setEnabled(bool)
- ??1QMetaObjectBuilder@@UAE@XZ @ 1389 NONAME ; QMetaObjectBuilder::~QMetaObjectBuilder(void)
+ ?qmlTypes@QDeclarativeMetaType@@SA?AV?$QList@PAVQDeclarativeType@@@@XZ @ 1385 NONAME ABSENT ; class QList<class QDeclarativeType *> QDeclarativeMetaType::qmlTypes(void)
+ ?valueTypeCoreIndex@QDeclarativePropertyPrivate@@SAHABVQDeclarativeProperty@@@Z @ 1386 NONAME ABSENT ; int QDeclarativePropertyPrivate::valueTypeCoreIndex(class QDeclarativeProperty const &)
+ ?writeEnumProperty@QDeclarativePropertyPrivate@@SA_NABVQMetaProperty@@HPAVQObject@@ABVQVariant@@H@Z @ 1387 NONAME ABSENT ; bool QDeclarativePropertyPrivate::writeEnumProperty(class QMetaProperty const &, int, class QObject *, class QVariant const &, int)
+ ?setEnabled@QDeclarativeDebugClient@@QAEX_N@Z @ 1388 NONAME ABSENT ; void QDeclarativeDebugClient::setEnabled(bool)
+ ??1QMetaObjectBuilder@@UAE@XZ @ 1389 NONAME ABSENT ; QMetaObjectBuilder::~QMetaObjectBuilder(void)
?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 1390 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *)
- ?clear@QPacket@@QAEXXZ @ 1391 NONAME ; void QPacket::clear(void)
- ?getStaticMetaObject@QDeclarativeDebugClient@@SAABUQMetaObject@@XZ @ 1392 NONAME ; struct QMetaObject const & QDeclarativeDebugClient::getStaticMetaObject(void)
- ??0QDeclarativeDomList@@QAE@ABV0@@Z @ 1393 NONAME ; QDeclarativeDomList::QDeclarativeDomList(class QDeclarativeDomList const &)
- ?gridTop@QDeclarativeGridScaledImage@@QBEHXZ @ 1394 NONAME ; int QDeclarativeGridScaledImage::gridTop(void) const
+ ?clear@QPacket@@QAEXXZ @ 1391 NONAME ABSENT ; void QPacket::clear(void)
+ ?getStaticMetaObject@QDeclarativeDebugClient@@SAABUQMetaObject@@XZ @ 1392 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugClient::getStaticMetaObject(void)
+ ??0QDeclarativeDomList@@QAE@ABV0@@Z @ 1393 NONAME ABSENT ; QDeclarativeDomList::QDeclarativeDomList(class QDeclarativeDomList const &)
+ ?gridTop@QDeclarativeGridScaledImage@@QBEHXZ @ 1394 NONAME ABSENT ; int QDeclarativeGridScaledImage::gridTop(void) const
?setUrl@QDeclarativeError@@QAEXABVQUrl@@@Z @ 1395 NONAME ; void QDeclarativeError::setUrl(class QUrl const &)
- ?setMaximumPacketSize@QPacketProtocol@@QAEHH@Z @ 1396 NONAME ; int QPacketProtocol::setMaximumPacketSize(int)
- ??_EQDeclarativeAction@@QAE@I@Z @ 1397 NONAME ; QDeclarativeAction::~QDeclarativeAction(unsigned int)
- ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 1398 NONAME ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *)
+ ?setMaximumPacketSize@QPacketProtocol@@QAEHH@Z @ 1396 NONAME ABSENT ; int QPacketProtocol::setMaximumPacketSize(int)
+ ??_EQDeclarativeAction@@QAE@I@Z @ 1397 NONAME ABSENT ; QDeclarativeAction::~QDeclarativeAction(unsigned int)
+ ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 1398 NONAME ABSENT ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *)
?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@@Z @ 1399 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &)
?widthValid@QDeclarativeItem@@IBE_NXZ @ 1400 NONAME ; bool QDeclarativeItem::widthValid(void) const
?staticMetaObject@QDeclarativeState@@2UQMetaObject@@B @ 1401 NONAME ; struct QMetaObject const QDeclarativeState::staticMetaObject
- ?setAccess@QMetaMethodBuilder@@QAEXW4Access@QMetaMethod@@@Z @ 1402 NONAME ; void QMetaMethodBuilder::setAccess(enum QMetaMethod::Access)
- ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@ABVQVariant@@@Z @ 1403 NONAME ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QDeclarativeContext *, class QVariant const &)
- ?staticMetaObject@QDeclarativeDebugClient@@2UQMetaObject@@B @ 1404 NONAME ; struct QMetaObject const QDeclarativeDebugClient::staticMetaObject
- ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 1405 NONAME ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *)
+ ?setAccess@QMetaMethodBuilder@@QAEXW4Access@QMetaMethod@@@Z @ 1402 NONAME ABSENT ; void QMetaMethodBuilder::setAccess(enum QMetaMethod::Access)
+ ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@ABVQVariant@@@Z @ 1403 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QDeclarativeContext *, class QVariant const &)
+ ?staticMetaObject@QDeclarativeDebugClient@@2UQMetaObject@@B @ 1404 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugClient::staticMetaObject
+ ?trUtf8@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0@Z @ 1405 NONAME ABSENT ; class QString QDeclarativeDebugEnginesQuery::trUtf8(char const *, char const *)
?d_func@QDeclarativeExpression@@ABEPBVQDeclarativeExpressionPrivate@@XZ @ 1406 NONAME ; class QDeclarativeExpressionPrivate const * QDeclarativeExpression::d_func(void) const
- ??1QDeclarativeValueType@@UAE@XZ @ 1407 NONAME ; QDeclarativeValueType::~QDeclarativeValueType(void)
+ ??1QDeclarativeValueType@@UAE@XZ @ 1407 NONAME ABSENT ; QDeclarativeValueType::~QDeclarativeValueType(void)
?setBaseUrl@QDeclarativeContext@@QAEXABVQUrl@@@Z @ 1408 NONAME ; void QDeclarativeContext::setBaseUrl(class QUrl const &)
- ??_EQDeclarativeAbstractBinding@@UAE@I@Z @ 1409 NONAME ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(unsigned int)
- ?queryExpressionResult@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@PAVQObject@@@Z @ 1410 NONAME ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::queryExpressionResult(int, class QString const &, class QObject *)
- ?indexOfMethod@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1411 NONAME ; int QMetaObjectBuilder::indexOfMethod(class QByteArray const &)
- ?setCached@QDeclarativeOpenMetaObject@@QAEX_N@Z @ 1412 NONAME ; void QDeclarativeOpenMetaObject::setCached(bool)
- ?length@QDeclarativeDomList@@QBEHXZ @ 1413 NONAME ; int QDeclarativeDomList::length(void) const
- ?horizontalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 1414 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::horizontalTileRule(void) const
+ ??_EQDeclarativeAbstractBinding@@UAE@I@Z @ 1409 NONAME ABSENT ; QDeclarativeAbstractBinding::~QDeclarativeAbstractBinding(unsigned int)
+ ?queryExpressionResult@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugExpressionQuery@@HABVQString@@PAVQObject@@@Z @ 1410 NONAME ABSENT ; class QDeclarativeDebugExpressionQuery * QDeclarativeEngineDebug::queryExpressionResult(int, class QString const &, class QObject *)
+ ?indexOfMethod@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1411 NONAME ABSENT ; int QMetaObjectBuilder::indexOfMethod(class QByteArray const &)
+ ?setCached@QDeclarativeOpenMetaObject@@QAEX_N@Z @ 1412 NONAME ABSENT ; void QDeclarativeOpenMetaObject::setCached(bool)
+ ?length@QDeclarativeDomList@@QBEHXZ @ 1413 NONAME ABSENT ; int QDeclarativeDomList::length(void) const
+ ?horizontalTileRule@QDeclarativeGridScaledImage@@QBE?AW4TileMode@QDeclarativeBorderImage@@XZ @ 1414 NONAME ABSENT ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::horizontalTileRule(void) const
??0QDeclarativeCustomParserProperty@@QAE@XZ @ 1415 NONAME ; QDeclarativeCustomParserProperty::QDeclarativeCustomParserProperty(void)
- ??1QDeclarativeEngineDebug@@UAE@XZ @ 1416 NONAME ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(void)
- ?qt_metacall@QDeclarativeEngineDebug@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1417 NONAME ; int QDeclarativeEngineDebug::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??1QDeclarativeEngineDebug@@UAE@XZ @ 1416 NONAME ABSENT ; QDeclarativeEngineDebug::~QDeclarativeEngineDebug(void)
+ ?qt_metacall@QDeclarativeEngineDebug@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1417 NONAME ABSENT ; int QDeclarativeEngineDebug::qt_metacall(enum QMetaObject::Call, int, void * *)
?q_func@QDeclarativeItemPrivate@@ABEPBVQDeclarativeItem@@XZ @ 1418 NONAME ; class QDeclarativeItem const * QDeclarativeItemPrivate::q_func(void) const
- ?customParser@QDeclarativeType@@QBEPAVQDeclarativeCustomParser@@XZ @ 1419 NONAME ; class QDeclarativeCustomParser * QDeclarativeType::customParser(void) const
+ ?customParser@QDeclarativeType@@QBEPAVQDeclarativeCustomParser@@XZ @ 1419 NONAME ABSENT ; class QDeclarativeCustomParser * QDeclarativeType::customParser(void) const
?setSourceLocation@QDeclarativeExpression@@QAEXABVQString@@H@Z @ 1420 NONAME ; void QDeclarativeExpression::setSourceLocation(class QString const &, int)
- ?equal@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1421 NONAME ; bool QDeclarativePropertyPrivate::equal(struct QMetaObject const *, struct QMetaObject const *)
+ ?equal@QDeclarativePropertyPrivate@@SA_NPBUQMetaObject@@0@Z @ 1421 NONAME ABSENT ; bool QDeclarativePropertyPrivate::equal(struct QMetaObject const *, struct QMetaObject const *)
??_EQDeclarativeExtensionPlugin@@UAE@I@Z @ 1422 NONAME ; QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin(unsigned int)
- ?write@QDeclarativePropertyPrivate@@SA_NPAVQObject@@ABUData@QDeclarativePropertyCache@@ABVQVariant@@PAVQDeclarativeContextData@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1423 NONAME ; bool QDeclarativePropertyPrivate::write(class QObject *, struct QDeclarativePropertyCache::Data const &, class QVariant const &, class QDeclarativeContextData *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?debugId@QDeclarativeDebugEngineReference@@QBEHXZ @ 1424 NONAME ; int QDeclarativeDebugEngineReference::debugId(void) const
- ?metaObject@QDeclarativeDebugEnginesQuery@@UBEPBUQMetaObject@@XZ @ 1425 NONAME ; struct QMetaObject const * QDeclarativeDebugEnginesQuery::metaObject(void) const
- ??_EQDeclarativeScaleGrid@@UAE@I@Z @ 1426 NONAME ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(unsigned int)
- ??1QDeclarativeDebugPropertyReference@@QAE@XZ @ 1427 NONAME ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(void)
- ?componentComplete@QDeclarativeAnchors@@QAEXXZ @ 1428 NONAME ; void QDeclarativeAnchors::componentComplete(void)
- ??1QDeclarativeDomObject@@QAE@XZ @ 1429 NONAME ; QDeclarativeDomObject::~QDeclarativeDomObject(void)
- ?expression@QDeclarativeDebugObjectExpressionWatch@@QBE?AVQString@@XZ @ 1430 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::expression(void) const
- ?metaObject@QListModelInterface@@UBEPBUQMetaObject@@XZ @ 1431 NONAME ; struct QMetaObject const * QListModelInterface::metaObject(void) const
- ?key@QMetaEnumBuilder@@QBE?AVQByteArray@@H@Z @ 1432 NONAME ; class QByteArray QMetaEnumBuilder::key(int) const
- ?d_func@QMetaEnumBuilder@@ABEPAVQMetaEnumBuilderPrivate@@XZ @ 1433 NONAME ; class QMetaEnumBuilderPrivate * QMetaEnumBuilder::d_func(void) const
+ ?write@QDeclarativePropertyPrivate@@SA_NPAVQObject@@ABUData@QDeclarativePropertyCache@@ABVQVariant@@PAVQDeclarativeContextData@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1423 NONAME ABSENT ; bool QDeclarativePropertyPrivate::write(class QObject *, struct QDeclarativePropertyCache::Data const &, class QVariant const &, class QDeclarativeContextData *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?debugId@QDeclarativeDebugEngineReference@@QBEHXZ @ 1424 NONAME ABSENT ; int QDeclarativeDebugEngineReference::debugId(void) const
+ ?metaObject@QDeclarativeDebugEnginesQuery@@UBEPBUQMetaObject@@XZ @ 1425 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugEnginesQuery::metaObject(void) const
+ ??_EQDeclarativeScaleGrid@@UAE@I@Z @ 1426 NONAME ABSENT ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(unsigned int)
+ ??1QDeclarativeDebugPropertyReference@@QAE@XZ @ 1427 NONAME ABSENT ; QDeclarativeDebugPropertyReference::~QDeclarativeDebugPropertyReference(void)
+ ?componentComplete@QDeclarativeAnchors@@QAEXXZ @ 1428 NONAME ABSENT ; void QDeclarativeAnchors::componentComplete(void)
+ ??1QDeclarativeDomObject@@QAE@XZ @ 1429 NONAME ABSENT ; QDeclarativeDomObject::~QDeclarativeDomObject(void)
+ ?expression@QDeclarativeDebugObjectExpressionWatch@@QBE?AVQString@@XZ @ 1430 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::expression(void) const
+ ?metaObject@QListModelInterface@@UBEPBUQMetaObject@@XZ @ 1431 NONAME ABSENT ; struct QMetaObject const * QListModelInterface::metaObject(void) const
+ ?key@QMetaEnumBuilder@@QBE?AVQByteArray@@H@Z @ 1432 NONAME ABSENT ; class QByteArray QMetaEnumBuilder::key(int) const
+ ?d_func@QMetaEnumBuilder@@ABEPAVQMetaEnumBuilderPrivate@@XZ @ 1433 NONAME ABSENT ; class QMetaEnumBuilderPrivate * QMetaEnumBuilder::d_func(void) const
??6QDeclarativeInfo@@QAEAAV0@PBD@Z @ 1434 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char const *)
?d_func@QDeclarativeState@@AAEPAVQDeclarativeStatePrivate@@XZ @ 1435 NONAME ; class QDeclarativeStatePrivate * QDeclarativeState::d_func(void)
- ??0QDeclarativeDebugEnginesQuery@@AAE@PAVQObject@@@Z @ 1436 NONAME ; QDeclarativeDebugEnginesQuery::QDeclarativeDebugEnginesQuery(class QObject *)
- ?bottomChanged@QDeclarativeAnchors@@IAEXXZ @ 1437 NONAME ; void QDeclarativeAnchors::bottomChanged(void)
- ?qListTypeId@QDeclarativeType@@QBEHXZ @ 1438 NONAME ; int QDeclarativeType::qListTypeId(void) const
- ?setSelectedState@QDeclarativeDebuggerStatus@@UAEX_N@Z @ 1439 NONAME ; void QDeclarativeDebuggerStatus::setSelectedState(bool)
- ?staticMetaObject@QDeclarativeEngineDebug@@2UQMetaObject@@B @ 1440 NONAME ; struct QMetaObject const QDeclarativeEngineDebug::staticMetaObject
+ ??0QDeclarativeDebugEnginesQuery@@AAE@PAVQObject@@@Z @ 1436 NONAME ABSENT ; QDeclarativeDebugEnginesQuery::QDeclarativeDebugEnginesQuery(class QObject *)
+ ?bottomChanged@QDeclarativeAnchors@@IAEXXZ @ 1437 NONAME ABSENT ; void QDeclarativeAnchors::bottomChanged(void)
+ ?qListTypeId@QDeclarativeType@@QBEHXZ @ 1438 NONAME ABSENT ; int QDeclarativeType::qListTypeId(void) const
+ ?setSelectedState@QDeclarativeDebuggerStatus@@UAEX_N@Z @ 1439 NONAME ABSENT ; void QDeclarativeDebuggerStatus::setSelectedState(bool)
+ ?staticMetaObject@QDeclarativeEngineDebug@@2UQMetaObject@@B @ 1440 NONAME ABSENT ; struct QMetaObject const QDeclarativeEngineDebug::staticMetaObject
?setExtends@QDeclarativeState@@QAEXABVQString@@@Z @ 1441 NONAME ; void QDeclarativeState::setExtends(class QString const &)
??4QDeclarativeError@@QAEAAV0@ABV0@@Z @ 1442 NONAME ; class QDeclarativeError & QDeclarativeError::operator=(class QDeclarativeError const &)
- ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 1443 NONAME ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *, int)
+ ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 1443 NONAME ABSENT ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *, int)
?d_func@QDeclarativeTransition@@AAEPAVQDeclarativeTransitionPrivate@@XZ @ 1444 NONAME ; class QDeclarativeTransitionPrivate * QDeclarativeTransition::d_func(void)
- ?propertyWritten@QDeclarativeOpenMetaObject@@MAEXH@Z @ 1445 NONAME ; void QDeclarativeOpenMetaObject::propertyWritten(int)
- ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1446 NONAME ; class QString QListModelInterface::trUtf8(char const *, char const *)
- ?setColumnNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 1447 NONAME ; void QDeclarativeDebugFileReference::setColumnNumber(int)
- ?drawRect@QDeclarativeRectangle@@AAEXAAVQPainter@@@Z @ 1448 NONAME ; void QDeclarativeRectangle::drawRect(class QPainter &)
+ ?propertyWritten@QDeclarativeOpenMetaObject@@MAEXH@Z @ 1445 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyWritten(int)
+ ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1446 NONAME ABSENT ; class QString QListModelInterface::trUtf8(char const *, char const *)
+ ?setColumnNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 1447 NONAME ABSENT ; void QDeclarativeDebugFileReference::setColumnNumber(int)
+ ?drawRect@QDeclarativeRectangle@@AAEXAAVQPainter@@@Z @ 1448 NONAME ABSENT ; void QDeclarativeRectangle::drawRect(class QPainter &)
?read@QDeclarativeProperty@@QBE?AVQVariant@@XZ @ 1449 NONAME ; class QVariant QDeclarativeProperty::read(void) const
?isEmpty@QDeclarativePropertyMap@@QBE_NXZ @ 1450 NONAME ; bool QDeclarativePropertyMap::isEmpty(void) const
- ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 1451 NONAME ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData const &)
- ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 1452 NONAME ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *, int)
- ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1453 NONAME ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *)
+ ??6@YAAAVQDataStream@@AAV0@ABUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 1451 NONAME ABSENT ; class QDataStream & operator<<(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData const &)
+ ?trUtf8@QDeclarativeDebugObjectQuery@@SA?AVQString@@PBD0H@Z @ 1452 NONAME ABSENT ; class QString QDeclarativeDebugObjectQuery::trUtf8(char const *, char const *, int)
+ ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1453 NONAME ABSENT ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *)
?tr@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 1454 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *)
??6QDeclarativeInfo@@QAEAAV0@G@Z @ 1455 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned short)
??0QDeclarativeStateOperation@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 1456 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObjectPrivate &, class QObject *)
?notifyOnValueChanged@QDeclarativeExpression@@QBE_NXZ @ 1457 NONAME ; bool QDeclarativeExpression::notifyOnValueChanged(void) const
?keyPressPreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 1458 NONAME ; void QDeclarativeItem::keyPressPreHandler(class QKeyEvent *)
?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 1459 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *, int)
- ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugFileReference@@PAVQObject@@@Z @ 1460 NONAME ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugFileReference const &, class QObject *)
- ?paintedHeight@QDeclarativeText@@QBEMXZ @ 1461 NONAME ; float QDeclarativeText::paintedHeight(void) const
+ ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugFileReference@@PAVQObject@@@Z @ 1460 NONAME ABSENT ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugFileReference const &, class QObject *)
+ ?paintedHeight@QDeclarativeText@@QBEMXZ @ 1461 NONAME ABSENT ; float QDeclarativeText::paintedHeight(void) const
?tr@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1462 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *)
?transform@QDeclarativeItem@@QAE?AV?$QDeclarativeListProperty@VQGraphicsTransform@@@@XZ @ 1463 NONAME ; class QDeclarativeListProperty<class QGraphicsTransform> QDeclarativeItem::transform(void)
- ?leftChanged@QDeclarativeAnchors@@IAEXXZ @ 1464 NONAME ; void QDeclarativeAnchors::leftChanged(void)
- ?topChanged@QDeclarativeAnchors@@IAEXXZ @ 1465 NONAME ; void QDeclarativeAnchors::topChanged(void)
- ??0QMetaObjectBuilder@@QAE@XZ @ 1466 NONAME ; QMetaObjectBuilder::QMetaObjectBuilder(void)
+ ?leftChanged@QDeclarativeAnchors@@IAEXXZ @ 1464 NONAME ABSENT ; void QDeclarativeAnchors::leftChanged(void)
+ ?topChanged@QDeclarativeAnchors@@IAEXXZ @ 1465 NONAME ABSENT ; void QDeclarativeAnchors::topChanged(void)
+ ??0QMetaObjectBuilder@@QAE@XZ @ 1466 NONAME ABSENT ; QMetaObjectBuilder::QMetaObjectBuilder(void)
?asBoolean@Variant@QDeclarativeParser@@QBE_NXZ @ 1467 NONAME ; bool QDeclarativeParser::Variant::asBoolean(void) const
- ?removeEnumerator@QMetaObjectBuilder@@QAEXH@Z @ 1468 NONAME ; void QMetaObjectBuilder::removeEnumerator(int)
- ?url@QDeclarativeDomObject@@QBE?AVQUrl@@XZ @ 1469 NONAME ; class QUrl QDeclarativeDomObject::url(void) const
- ?getStaticMetaObject@QDeclarativeScaleGrid@@SAABUQMetaObject@@XZ @ 1470 NONAME ; struct QMetaObject const & QDeclarativeScaleGrid::getStaticMetaObject(void)
- ?signalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@@Z @ 1471 NONAME ; class QDeclarativeExpression * QDeclarativePropertyPrivate::signalExpression(class QDeclarativeProperty const &)
+ ?removeEnumerator@QMetaObjectBuilder@@QAEXH@Z @ 1468 NONAME ABSENT ; void QMetaObjectBuilder::removeEnumerator(int)
+ ?url@QDeclarativeDomObject@@QBE?AVQUrl@@XZ @ 1469 NONAME ABSENT ; class QUrl QDeclarativeDomObject::url(void) const
+ ?getStaticMetaObject@QDeclarativeScaleGrid@@SAABUQMetaObject@@XZ @ 1470 NONAME ABSENT ; struct QMetaObject const & QDeclarativeScaleGrid::getStaticMetaObject(void)
+ ?signalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@@Z @ 1471 NONAME ABSENT ; class QDeclarativeExpression * QDeclarativePropertyPrivate::signalExpression(class QDeclarativeProperty const &)
?networkAccessManagerFactory@QDeclarativeEngine@@QBEPAVQDeclarativeNetworkAccessManagerFactory@@XZ @ 1472 NONAME ; class QDeclarativeNetworkAccessManagerFactory * QDeclarativeEngine::networkAccessManagerFactory(void) const
?isStringList@Variant@QDeclarativeParser@@QBE_NXZ @ 1473 NONAME ; bool QDeclarativeParser::Variant::isStringList(void) const
- ?packetWritten@QPacketProtocol@@IAEXXZ @ 1474 NONAME ; void QPacketProtocol::packetWritten(void)
- ?getStaticMetaObject@QDeclarativeDebugObjectQuery@@SAABUQMetaObject@@XZ @ 1475 NONAME ; struct QMetaObject const & QDeclarativeDebugObjectQuery::getStaticMetaObject(void)
+ ?packetWritten@QPacketProtocol@@IAEXXZ @ 1474 NONAME ABSENT ; void QPacketProtocol::packetWritten(void)
+ ?getStaticMetaObject@QDeclarativeDebugObjectQuery@@SAABUQMetaObject@@XZ @ 1475 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugObjectQuery::getStaticMetaObject(void)
?isSignalProperty@QDeclarativeProperty@@QBE_NXZ @ 1476 NONAME ; bool QDeclarativeProperty::isSignalProperty(void) const
- ?d_func@QDeclarativeDebugService@@AAEPAVQDeclarativeDebugServicePrivate@@XZ @ 1477 NONAME ; class QDeclarativeDebugServicePrivate * QDeclarativeDebugService::d_func(void)
- ?qmlTypeNames@QDeclarativeMetaType@@SA?AV?$QList@VQByteArray@@@@XZ @ 1478 NONAME ; class QList<class QByteArray> QDeclarativeMetaType::qmlTypeNames(void)
+ ?d_func@QDeclarativeDebugService@@AAEPAVQDeclarativeDebugServicePrivate@@XZ @ 1477 NONAME ABSENT ; class QDeclarativeDebugServicePrivate * QDeclarativeDebugService::d_func(void)
+ ?qmlTypeNames@QDeclarativeMetaType@@SA?AV?$QList@VQByteArray@@@@XZ @ 1478 NONAME ABSENT ; class QList<class QByteArray> QDeclarativeMetaType::qmlTypeNames(void)
?componentComplete@QDeclarativeItem@@MAEXXZ @ 1479 NONAME ; void QDeclarativeItem::componentComplete(void)
?creationContext@QDeclarativeComponent@@QBEPAVQDeclarativeContext@@XZ @ 1480 NONAME ; class QDeclarativeContext * QDeclarativeComponent::creationContext(void) const
- ?enabledChanged@QDeclarativeBehavior@@IAEXXZ @ 1481 NONAME ; void QDeclarativeBehavior::enabledChanged(void)
+ ?enabledChanged@QDeclarativeBehavior@@IAEXXZ @ 1481 NONAME ABSENT ; void QDeclarativeBehavior::enabledChanged(void)
?staticMetaObject@QDeclarativeTransition@@2UQMetaObject@@B @ 1482 NONAME ; struct QMetaObject const QDeclarativeTransition::staticMetaObject
??0QDeclarativeInfo@@AAE@PAVQDeclarativeInfoPrivate@@@Z @ 1483 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfoPrivate *)
- ?name@QDeclarativeDebugContextReference@@QBE?AVQString@@XZ @ 1484 NONAME ; class QString QDeclarativeDebugContextReference::name(void) const
- ?propertyIndex@QDeclarativeBinding@@UAEHXZ @ 1485 NONAME ; int QDeclarativeBinding::propertyIndex(void)
- ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 1486 NONAME ; class QString QDeclarativeDebugWatch::tr(char const *, char const *, int)
+ ?name@QDeclarativeDebugContextReference@@QBE?AVQString@@XZ @ 1484 NONAME ABSENT ; class QString QDeclarativeDebugContextReference::name(void) const
+ ?propertyIndex@QDeclarativeBinding@@UAEHXZ @ 1485 NONAME ABSENT ; int QDeclarativeBinding::propertyIndex(void)
+ ?tr@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 1486 NONAME ABSENT ; class QString QDeclarativeDebugWatch::tr(char const *, char const *, int)
?qt_metacast@QDeclarativePropertyMap@@UAEPAXPBD@Z @ 1487 NONAME ; void * QDeclarativePropertyMap::qt_metacast(char const *)
- ?classBegin@QDeclarativeAnchors@@QAEXXZ @ 1488 NONAME ; void QDeclarativeAnchors::classBegin(void)
- ?color@QDeclarativeText@@QBE?AVQColor@@XZ @ 1489 NONAME ; class QColor QDeclarativeText::color(void) const
- ?metaObject@QPacketProtocol@@UBEPBUQMetaObject@@XZ @ 1490 NONAME ; struct QMetaObject const * QPacketProtocol::metaObject(void) const
- ??4QDeclarativeGridScaledImage@@QAEAAV0@ABV0@@Z @ 1491 NONAME ; class QDeclarativeGridScaledImage & QDeclarativeGridScaledImage::operator=(class QDeclarativeGridScaledImage const &)
- ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 1492 NONAME ; class QString QDeclarativeScaleGrid::tr(char const *, char const *)
+ ?classBegin@QDeclarativeAnchors@@QAEXXZ @ 1488 NONAME ABSENT ; void QDeclarativeAnchors::classBegin(void)
+ ?color@QDeclarativeText@@QBE?AVQColor@@XZ @ 1489 NONAME ABSENT ; class QColor QDeclarativeText::color(void) const
+ ?metaObject@QPacketProtocol@@UBEPBUQMetaObject@@XZ @ 1490 NONAME ABSENT ; struct QMetaObject const * QPacketProtocol::metaObject(void) const
+ ??4QDeclarativeGridScaledImage@@QAEAAV0@ABV0@@Z @ 1491 NONAME ABSENT ; class QDeclarativeGridScaledImage & QDeclarativeGridScaledImage::operator=(class QDeclarativeGridScaledImage const &)
+ ?tr@QDeclarativeScaleGrid@@SA?AVQString@@PBD0@Z @ 1492 NONAME ABSENT ; class QString QDeclarativeScaleGrid::tr(char const *, char const *)
??1QDeclarativeScriptString@@QAE@XZ @ 1493 NONAME ; QDeclarativeScriptString::~QDeclarativeScriptString(void)
??1QDeclarativePropertyValueSource@@UAE@XZ @ 1494 NONAME ; QDeclarativePropertyValueSource::~QDeclarativePropertyValueSource(void)
- ?position@QDeclarativeDomList@@QBEHXZ @ 1495 NONAME ; int QDeclarativeDomList::position(void) const
- ?toQObject@QDeclarativeMetaType@@SAPAVQObject@@ABVQVariant@@PA_N@Z @ 1496 NONAME ; class QObject * QDeclarativeMetaType::toQObject(class QVariant const &, bool *)
+ ?position@QDeclarativeDomList@@QBEHXZ @ 1495 NONAME ABSENT ; int QDeclarativeDomList::position(void) const
+ ?toQObject@QDeclarativeMetaType@@SAPAVQObject@@ABVQVariant@@PA_N@Z @ 1496 NONAME ABSENT ; class QObject * QDeclarativeMetaType::toQObject(class QVariant const &, bool *)
??_EQDeclarativeItem@@UAE@I@Z @ 1497 NONAME ; QDeclarativeItem::~QDeclarativeItem(unsigned int)
?getStaticMetaObject@QDeclarativeContext@@SAABUQMetaObject@@XZ @ 1498 NONAME ; struct QMetaObject const & QDeclarativeContext::getStaticMetaObject(void)
- ?metaObject@QDeclarativeListModel@@UBEPBUQMetaObject@@XZ @ 1499 NONAME ; struct QMetaObject const * QDeclarativeListModel::metaObject(void) const
+ ?metaObject@QDeclarativeListModel@@UBEPBUQMetaObject@@XZ @ 1499 NONAME ABSENT ; struct QMetaObject const * QDeclarativeListModel::metaObject(void) const
?transformChanged@QDeclarativeItemPrivate@@UAEXXZ @ 1500 NONAME ; void QDeclarativeItemPrivate::transformChanged(void)
- ?remove@QDeclarativeListModel@@QAEXH@Z @ 1501 NONAME ; void QDeclarativeListModel::remove(int)
+ ?remove@QDeclarativeListModel@@QAEXH@Z @ 1501 NONAME ABSENT ; void QDeclarativeListModel::remove(int)
?setResizeMode@QDeclarativeView@@QAEXW4ResizeMode@1@@Z @ 1502 NONAME ; void QDeclarativeView::setResizeMode(enum QDeclarativeView::ResizeMode)
- ?left@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1503 NONAME ; class QDeclarativeAnchorLine QDeclarativeAnchors::left(void) const
- ?flags@QMetaObjectBuilder@@QBE?AV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@XZ @ 1504 NONAME ; class QFlags<enum QMetaObjectBuilder::MetaObjectFlag> QMetaObjectBuilder::flags(void) const
+ ?left@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1503 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::left(void) const
+ ?flags@QMetaObjectBuilder@@QBE?AV?$QFlags@W4MetaObjectFlag@QMetaObjectBuilder@@@@XZ @ 1504 NONAME ABSENT ; class QFlags<enum QMetaObjectBuilder::MetaObjectFlag> QMetaObjectBuilder::flags(void) const
??0QDeclarativeItem@@IAE@AAVQDeclarativeItemPrivate@@PAV0@@Z @ 1505 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItemPrivate &, class QDeclarativeItem *)
??0QDeclarativeContext@@QAE@PAV0@PAVQObject@@@Z @ 1506 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContext *, class QObject *)
- ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 1507 NONAME ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *)
- ??1QDeclarativeDebugEnginesQuery@@UAE@XZ @ 1508 NONAME ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(void)
+ ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 1507 NONAME ABSENT ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *)
+ ??1QDeclarativeDebugEnginesQuery@@UAE@XZ @ 1508 NONAME ABSENT ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(void)
?getStaticMetaObject@QDeclarativeTransition@@SAABUQMetaObject@@XZ @ 1509 NONAME ; struct QMetaObject const & QDeclarativeTransition::getStaticMetaObject(void)
- ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 1510 NONAME ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 1510 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *, int)
?metaObject@QDeclarativePropertyMap@@UBEPBUQMetaObject@@XZ @ 1511 NONAME ; struct QMetaObject const * QDeclarativePropertyMap::metaObject(void) const
- ?componentRoot@QDeclarativeDomComponent@@QBE?AVQDeclarativeDomObject@@XZ @ 1512 NONAME ; class QDeclarativeDomObject QDeclarativeDomComponent::componentRoot(void) const
- ?metaObject@QDeclarativeDebugConnection@@UBEPBUQMetaObject@@XZ @ 1513 NONAME ; struct QMetaObject const * QDeclarativeDebugConnection::metaObject(void) const
- ?setTag@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1514 NONAME ; void QMetaMethodBuilder::setTag(class QByteArray const &)
- ?objects@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 1515 NONAME ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugContextReference::objects(void) const
+ ?componentRoot@QDeclarativeDomComponent@@QBE?AVQDeclarativeDomObject@@XZ @ 1512 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomComponent::componentRoot(void) const
+ ?metaObject@QDeclarativeDebugConnection@@UBEPBUQMetaObject@@XZ @ 1513 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugConnection::metaObject(void) const
+ ?setTag@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1514 NONAME ABSENT ; void QMetaMethodBuilder::setTag(class QByteArray const &)
+ ?objects@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 1515 NONAME ABSENT ; class QList<class QDeclarativeDebugObjectReference> QDeclarativeDebugContextReference::objects(void) const
??4Variant@QDeclarativeParser@@QAEAAV01@ABV01@@Z @ 1516 NONAME ; class QDeclarativeParser::Variant & QDeclarativeParser::Variant::operator=(class QDeclarativeParser::Variant const &)
?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1517 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *)
?setScopeObject@QDeclarativeScriptString@@QAEXPAVQObject@@@Z @ 1518 NONAME ; void QDeclarativeScriptString::setScopeObject(class QObject *)
- ??1QDeclarativeBinding@@MAE@XZ @ 1519 NONAME ; QDeclarativeBinding::~QDeclarativeBinding(void)
+ ??1QDeclarativeBinding@@MAE@XZ @ 1519 NONAME ABSENT ; QDeclarativeBinding::~QDeclarativeBinding(void)
?importPlugin@QDeclarativeEngine@@QAE_NABVQString@@0PAV2@@Z @ 1520 NONAME ; bool QDeclarativeEngine::importPlugin(class QString const &, class QString const &, class QString *)
- ?setBottomMargin@QDeclarativeAnchors@@QAEXM@Z @ 1521 NONAME ; void QDeclarativeAnchors::setBottomMargin(float)
+ ?setBottomMargin@QDeclarativeAnchors@@QAEXM@Z @ 1521 NONAME ABSENT ; void QDeclarativeAnchors::setBottomMargin(float)
?geometryChanged@QDeclarativeItem@@MAEXABVQRectF@@0@Z @ 1522 NONAME ; void QDeclarativeItem::geometryChanged(class QRectF const &, class QRectF const &)
- ?toValueSource@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueSource@@XZ @ 1523 NONAME ; class QDeclarativeDomValueValueSource QDeclarativeDomValue::toValueSource(void) const
- ?hAlign@QDeclarativeText@@QBE?AW4HAlignment@1@XZ @ 1524 NONAME ; enum QDeclarativeText::HAlignment QDeclarativeText::hAlign(void) const
+ ?toValueSource@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueSource@@XZ @ 1523 NONAME ABSENT ; class QDeclarativeDomValueValueSource QDeclarativeDomValue::toValueSource(void) const
+ ?hAlign@QDeclarativeText@@QBE?AW4HAlignment@1@XZ @ 1524 NONAME ABSENT ; enum QDeclarativeText::HAlignment QDeclarativeText::hAlign(void) const
?when@QDeclarativeState@@QBEPAVQDeclarativeBinding@@XZ @ 1525 NONAME ; class QDeclarativeBinding * QDeclarativeState::when(void) const
?setRootObject@QDeclarativeView@@MAEXPAVQObject@@@Z @ 1526 NONAME ; void QDeclarativeView::setRootObject(class QObject *)
- ?resetBottom@QDeclarativeAnchors@@QAEXXZ @ 1527 NONAME ; void QDeclarativeAnchors::resetBottom(void)
+ ?resetBottom@QDeclarativeAnchors@@QAEXXZ @ 1527 NONAME ABSENT ; void QDeclarativeAnchors::resetBottom(void)
?qt_metacall@QDeclarativePropertyMap@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1528 NONAME ; int QDeclarativePropertyMap::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??0QDeclarativeDebugEngineReference@@QAE@ABV0@@Z @ 1529 NONAME ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(class QDeclarativeDebugEngineReference const &)
- ?objectDebugId@QDeclarativeDebugPropertyReference@@QBEHXZ @ 1530 NONAME ; int QDeclarativeDebugPropertyReference::objectDebugId(void) const
- ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 1531 NONAME ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *)
- ??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 1532 NONAME ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const
+ ??0QDeclarativeDebugEngineReference@@QAE@ABV0@@Z @ 1529 NONAME ABSENT ; QDeclarativeDebugEngineReference::QDeclarativeDebugEngineReference(class QDeclarativeDebugEngineReference const &)
+ ?objectDebugId@QDeclarativeDebugPropertyReference@@QBEHXZ @ 1530 NONAME ABSENT ; int QDeclarativeDebugPropertyReference::objectDebugId(void) const
+ ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 1531 NONAME ABSENT ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *)
+ ??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 1532 NONAME ABSENT ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const
?siblingOrderChange@QDeclarativeItemPrivate@@UAEXXZ @ 1533 NONAME ; void QDeclarativeItemPrivate::siblingOrderChange(void)
??1QDeclarativeState@@UAE@XZ @ 1534 NONAME ; QDeclarativeState::~QDeclarativeState(void)
- ?paint@QDeclarativeText@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1535 NONAME ; void QDeclarativeText::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+ ?paint@QDeclarativeText@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1535 NONAME ABSENT ; void QDeclarativeText::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
??1QDeclarativeStateGroup@@UAE@XZ @ 1536 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(void)
- ?setEditable@QMetaPropertyBuilder@@QAEX_N@Z @ 1537 NONAME ; void QMetaPropertyBuilder::setEditable(bool)
- ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@PAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1538 NONAME ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QDeclarativeProperty const &, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
- ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1539 NONAME ; class QString QDeclarativeBinding::trUtf8(char const *, char const *)
+ ?setEditable@QMetaPropertyBuilder@@QAEX_N@Z @ 1537 NONAME ABSENT ; void QMetaPropertyBuilder::setEditable(bool)
+ ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@PAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1538 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QDeclarativeProperty const &, class QDeclarativeAbstractBinding *, class QFlags<enum QDeclarativePropertyPrivate::WriteFlag>)
+ ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1539 NONAME ABSENT ; class QString QDeclarativeBinding::trUtf8(char const *, char const *)
?requestSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1540 NONAME ; class QSize const & QDeclarativePixmap::requestSize(void) const
?progress@QDeclarativeComponent@@QBEMXZ @ 1541 NONAME ; float QDeclarativeComponent::progress(void) const
?d_func@QDeclarativeState@@ABEPBVQDeclarativeStatePrivate@@XZ @ 1542 NONAME ; class QDeclarativeStatePrivate const * QDeclarativeState::d_func(void) const
- ??0QListModelInterface@@QAE@PAVQObject@@@Z @ 1543 NONAME ; QListModelInterface::QListModelInterface(class QObject *)
- ?pointFFromString@QDeclarativeStringConverters@@YA?AVQPointF@@ABVQString@@PA_N@Z @ 1544 NONAME ; class QPointF QDeclarativeStringConverters::pointFFromString(class QString const &, bool *)
- ?propertyCreated@QDeclarativeOpenMetaObject@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 1545 NONAME ; void QDeclarativeOpenMetaObject::propertyCreated(int, class QMetaPropertyBuilder &)
+ ??0QListModelInterface@@QAE@PAVQObject@@@Z @ 1543 NONAME ABSENT ; QListModelInterface::QListModelInterface(class QObject *)
+ ?pointFFromString@QDeclarativeStringConverters@@YA?AVQPointF@@ABVQString@@PA_N@Z @ 1544 NONAME ABSENT ; class QPointF QDeclarativeStringConverters::pointFFromString(class QString const &, bool *)
+ ?propertyCreated@QDeclarativeOpenMetaObject@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 1545 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyCreated(int, class QMetaPropertyBuilder &)
?d_func@QDeclarativeView@@ABEPBVQDeclarativeViewPrivate@@XZ @ 1546 NONAME ; class QDeclarativeViewPrivate const * QDeclarativeView::d_func(void) const
?rootObject@QDeclarativeView@@QBEPAVQGraphicsObject@@XZ @ 1547 NONAME ; class QGraphicsObject * QDeclarativeView::rootObject(void) const
- ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 1548 NONAME ; class QString QDeclarativeBinding::tr(char const *, char const *, int)
- ?queryObjectRecursive@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1549 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObjectRecursive(class QDeclarativeDebugObjectReference const &, class QObject *)
+ ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 1548 NONAME ABSENT ; class QString QDeclarativeBinding::tr(char const *, char const *, int)
+ ?queryObjectRecursive@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1549 NONAME ABSENT ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObjectRecursive(class QDeclarativeDebugObjectReference const &, class QObject *)
?prepare@QDeclarativeTransition@@QAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@PAVQDeclarativeTransitionManager@@@Z @ 1550 NONAME ; void QDeclarativeTransition::prepare(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, class QDeclarativeTransitionManager *)
??6QDeclarativeInfo@@QAEAAV0@ABVQUrl@@@Z @ 1551 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QUrl const &)
?scopeObject@QDeclarativeExpression@@QBEPAVQObject@@XZ @ 1552 NONAME ; class QObject * QDeclarativeExpression::scopeObject(void) const
?isValid@QDeclarativeContext@@QBE_NXZ @ 1553 NONAME ; bool QDeclarativeContext::isValid(void) const
- ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 1554 NONAME ; class QString QDeclarativeValueType::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 1554 NONAME ABSENT ; class QString QDeclarativeValueType::trUtf8(char const *, char const *, int)
?qmlAttachedPropertiesObjectById@@YAPAVQObject@@HPBV1@_N@Z @ 1555 NONAME ; class QObject * qmlAttachedPropertiesObjectById(int, class QObject const *, bool)
- ?constructorCount@QMetaObjectBuilder@@QBEHXZ @ 1556 NONAME ; int QMetaObjectBuilder::constructorCount(void) const
- ??0QDeclarativeDomValueValueInterceptor@@QAE@ABV0@@Z @ 1557 NONAME ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(class QDeclarativeDomValueValueInterceptor const &)
- ?object@QDeclarativeDebugObjectQuery@@QBE?AVQDeclarativeDebugObjectReference@@XZ @ 1558 NONAME ; class QDeclarativeDebugObjectReference QDeclarativeDebugObjectQuery::object(void) const
- ??0QMetaPropertyBuilder@@QAE@XZ @ 1559 NONAME ; QMetaPropertyBuilder::QMetaPropertyBuilder(void)
- ?toMetaObject@QMetaObjectBuilder@@QBEPAUQMetaObject@@XZ @ 1560 NONAME ; struct QMetaObject * QMetaObjectBuilder::toMetaObject(void) const
+ ?constructorCount@QMetaObjectBuilder@@QBEHXZ @ 1556 NONAME ABSENT ; int QMetaObjectBuilder::constructorCount(void) const
+ ??0QDeclarativeDomValueValueInterceptor@@QAE@ABV0@@Z @ 1557 NONAME ABSENT ; QDeclarativeDomValueValueInterceptor::QDeclarativeDomValueValueInterceptor(class QDeclarativeDomValueValueInterceptor const &)
+ ?object@QDeclarativeDebugObjectQuery@@QBE?AVQDeclarativeDebugObjectReference@@XZ @ 1558 NONAME ABSENT ; class QDeclarativeDebugObjectReference QDeclarativeDebugObjectQuery::object(void) const
+ ??0QMetaPropertyBuilder@@QAE@XZ @ 1559 NONAME ABSENT ; QMetaPropertyBuilder::QMetaPropertyBuilder(void)
+ ?toMetaObject@QMetaObjectBuilder@@QBEPAUQMetaObject@@XZ @ 1560 NONAME ABSENT ; struct QMetaObject * QMetaObjectBuilder::toMetaObject(void) const
?d_func@QDeclarativeEngine@@AAEPAVQDeclarativeEnginePrivate@@XZ @ 1561 NONAME ; class QDeclarativeEnginePrivate * QDeclarativeEngine::d_func(void)
- ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1562 NONAME ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject
- ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1563 NONAME ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &)
+ ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1562 NONAME ABSENT ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject
+ ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1563 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &)
?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1564 NONAME ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void)
?childrenRectChanged@QDeclarativeItem@@IAEXABVQRectF@@@Z @ 1565 NONAME ; void QDeclarativeItem::childrenRectChanged(class QRectF const &)
?isDesignable@QDeclarativeProperty@@QBE_NXZ @ 1566 NONAME ; bool QDeclarativeProperty::isDesignable(void) const
- ?propertyTypeCategory@QDeclarativePropertyPrivate@@QBE?AW4PropertyTypeCategory@QDeclarativeProperty@@XZ @ 1567 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativePropertyPrivate::propertyTypeCategory(void) const
+ ?propertyTypeCategory@QDeclarativePropertyPrivate@@QBE?AW4PropertyTypeCategory@QDeclarativeProperty@@XZ @ 1567 NONAME ABSENT ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativePropertyPrivate::propertyTypeCategory(void) const
?setSize@QDeclarativeItem@@QAEXABVQSizeF@@@Z @ 1568 NONAME ; void QDeclarativeItem::setSize(class QSizeF const &)
- ?generateRoundedRect@QDeclarativeRectangle@@AAEXXZ @ 1569 NONAME ; void QDeclarativeRectangle::generateRoundedRect(void)
+ ?generateRoundedRect@QDeclarativeRectangle@@AAEXXZ @ 1569 NONAME ABSENT ; void QDeclarativeRectangle::generateRoundedRect(void)
??0QDeclarativePixmap@@QAE@PAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@@Z @ 1570 NONAME ; QDeclarativePixmap::QDeclarativePixmap(class QDeclarativeEngine *, class QUrl const &, class QSize const &)
- ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 1571 NONAME ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *)
+ ?tr@QDeclarativeDebugPropertyWatch@@SA?AVQString@@PBD0@Z @ 1571 NONAME ABSENT ; class QString QDeclarativeDebugPropertyWatch::tr(char const *, char const *)
?propertyTypeCategory@QDeclarativeProperty@@QBE?AW4PropertyTypeCategory@1@XZ @ 1572 NONAME ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativeProperty::propertyTypeCategory(void) const
- ??0QPacketAutoSend@@AAE@PAVQPacketProtocol@@@Z @ 1573 NONAME ; QPacketAutoSend::QPacketAutoSend(class QPacketProtocol *)
- ?keyCount@QMetaEnumBuilder@@QBEHXZ @ 1574 NONAME ; int QMetaEnumBuilder::keyCount(void) const
- ??1QDeclarativeDomProperty@@QAE@XZ @ 1575 NONAME ; QDeclarativeDomProperty::~QDeclarativeDomProperty(void)
+ ??0QPacketAutoSend@@AAE@PAVQPacketProtocol@@@Z @ 1573 NONAME ABSENT ; QPacketAutoSend::QPacketAutoSend(class QPacketProtocol *)
+ ?keyCount@QMetaEnumBuilder@@QBEHXZ @ 1574 NONAME ABSENT ; int QMetaEnumBuilder::keyCount(void) const
+ ??1QDeclarativeDomProperty@@QAE@XZ @ 1575 NONAME ABSENT ; QDeclarativeDomProperty::~QDeclarativeDomProperty(void)
?url@QDeclarativePixmap@@QBEABVQUrl@@XZ @ 1576 NONAME ; class QUrl const & QDeclarativePixmap::url(void) const
- ?sendMessage@QDeclarativeDebugService@@QAEXABVQByteArray@@@Z @ 1577 NONAME ; void QDeclarativeDebugService::sendMessage(class QByteArray const &)
+ ?sendMessage@QDeclarativeDebugService@@QAEXABVQByteArray@@@Z @ 1577 NONAME ABSENT ; void QDeclarativeDebugService::sendMessage(class QByteArray const &)
?context@QDeclarativeScriptString@@QBEPAVQDeclarativeContext@@XZ @ 1578 NONAME ; class QDeclarativeContext * QDeclarativeScriptString::context(void) const
- ?queryObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1579 NONAME ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObject(class QDeclarativeDebugObjectReference const &, class QObject *)
+ ?queryObject@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1579 NONAME ABSENT ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObject(class QDeclarativeDebugObjectReference const &, class QObject *)
?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0H@Z @ 1580 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *, int)
?setNotifyOnValueChanged@QDeclarativeExpression@@QAEX_N@Z @ 1581 NONAME ; void QDeclarativeExpression::setNotifyOnValueChanged(bool)
??0QDeclarativeExpression@@IAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@AAVQDeclarativeExpressionPrivate@@@Z @ 1582 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &, class QDeclarativeExpressionPrivate &)
- ?fillChanged@QDeclarativeAnchors@@IAEXXZ @ 1583 NONAME ; void QDeclarativeAnchors::fillChanged(void)
+ ?fillChanged@QDeclarativeAnchors@@IAEXXZ @ 1583 NONAME ABSENT ; void QDeclarativeAnchors::fillChanged(void)
?resources_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 1584 NONAME ; void QDeclarativeItemPrivate::resources_append(class QDeclarativeListProperty<class QObject> *, class QObject *)
??0QDeclarativeComponent@@IAE@AAVQDeclarativeComponentPrivate@@PAVQObject@@@Z @ 1585 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeComponentPrivate &, class QObject *)
?height@QDeclarativeItem@@QBEMXZ @ 1586 NONAME ; float QDeclarativeItem::height(void) const
- ?minorVersion@QDeclarativeType@@QBEHXZ @ 1587 NONAME ; int QDeclarativeType::minorVersion(void) const
- ?qt_metacall@QDeclarativeText@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1588 NONAME ; int QDeclarativeText::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?isConnected@QDeclarativeDebugConnection@@QBE_NXZ @ 1589 NONAME ; bool QDeclarativeDebugConnection::isConnected(void) const
+ ?minorVersion@QDeclarativeType@@QBEHXZ @ 1587 NONAME ABSENT ; int QDeclarativeType::minorVersion(void) const
+ ?qt_metacall@QDeclarativeText@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1588 NONAME ABSENT ; int QDeclarativeText::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?isConnected@QDeclarativeDebugConnection@@QBE_NXZ @ 1589 NONAME ABSENT ; bool QDeclarativeDebugConnection::isConnected(void) const
??6QDeclarativeInfo@@QAEAAV0@I@Z @ 1590 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned int)
?setNetworkAccessManagerFactory@QDeclarativeEngine@@QAEXPAVQDeclarativeNetworkAccessManagerFactory@@@Z @ 1591 NONAME ; void QDeclarativeEngine::setNetworkAccessManagerFactory(class QDeclarativeNetworkAccessManagerFactory *)
- ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1592 NONAME ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int)
+ ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1592 NONAME ABSENT ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int)
??AQDeclarativePropertyMap@@QAEAAVQVariant@@ABVQString@@@Z @ 1593 NONAME ; class QVariant & QDeclarativePropertyMap::operator[](class QString const &)
??0Variant@QDeclarativeParser@@QAE@_N@Z @ 1594 NONAME ; QDeclarativeParser::Variant::Variant(bool)
?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 1595 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *, int)
??0QDeclarativeStateGroup@@QAE@PAVQObject@@@Z @ 1596 NONAME ; QDeclarativeStateGroup::QDeclarativeStateGroup(class QObject *)
?count@QDeclarativeListReference@@QBEHXZ @ 1597 NONAME ; int QDeclarativeListReference::count(void) const
?location@QDeclarativeCustomParserProperty@@QBE?AULocation@QDeclarativeParser@@XZ @ 1598 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserProperty::location(void) const
- ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1599 NONAME ; struct QMetaObject const * QDeclarativePen::metaObject(void) const
+ ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1599 NONAME ABSENT ; struct QMetaObject const * QDeclarativePen::metaObject(void) const
?url@QDeclarativeError@@QBE?AVQUrl@@XZ @ 1600 NONAME ; class QUrl QDeclarativeError::url(void) const
- ?isBinding@QDeclarativeDomValue@@QBE_NXZ @ 1601 NONAME ; bool QDeclarativeDomValue::isBinding(void) const
+ ?isBinding@QDeclarativeDomValue@@QBE_NXZ @ 1601 NONAME ABSENT ; bool QDeclarativeDomValue::isBinding(void) const
?name@QDeclarativeProperty@@QBE?AVQString@@XZ @ 1602 NONAME ; class QString QDeclarativeProperty::name(void) const
?asString@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 1603 NONAME ; class QString QDeclarativeParser::Variant::asString(void) const
?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0@Z @ 1604 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *)
- ?sendMessage@QDeclarativeDebugClient@@QAEXABVQByteArray@@@Z @ 1605 NONAME ; void QDeclarativeDebugClient::sendMessage(class QByteArray const &)
+ ?sendMessage@QDeclarativeDebugClient@@QAEXABVQByteArray@@@Z @ 1605 NONAME ABSENT ; void QDeclarativeDebugClient::sendMessage(class QByteArray const &)
?canAppend@QDeclarativeListReference@@QBE_NXZ @ 1606 NONAME ; bool QDeclarativeListReference::canAppend(void) const
??_EQDeclarativeComponent@@UAE@I@Z @ 1607 NONAME ; QDeclarativeComponent::~QDeclarativeComponent(unsigned int)
?get@QDeclarativeItemPrivate@@SAPAV1@PAVQDeclarativeItem@@@Z @ 1608 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItemPrivate::get(class QDeclarativeItem *)
?staticMetaObject@QDeclarativeView@@2UQMetaObject@@B @ 1609 NONAME ; struct QMetaObject const QDeclarativeView::staticMetaObject
- ?objectToString@QDeclarativeDebugService@@SA?AVQString@@PAVQObject@@@Z @ 1610 NONAME ; class QString QDeclarativeDebugService::objectToString(class QObject *)
- ?defaultValue@QDeclarativeDomDynamicProperty@@QBE?AVQDeclarativeDomProperty@@XZ @ 1611 NONAME ; class QDeclarativeDomProperty QDeclarativeDomDynamicProperty::defaultValue(void) const
- ?relatedMetaObject@QMetaObjectBuilder@@QBEPBUQMetaObject@@H@Z @ 1612 NONAME ; struct QMetaObject const * QMetaObjectBuilder::relatedMetaObject(int) const
- ?addKey@QMetaEnumBuilder@@QAEHABVQByteArray@@H@Z @ 1613 NONAME ; int QMetaEnumBuilder::addKey(class QByteArray const &, int)
+ ?objectToString@QDeclarativeDebugService@@SA?AVQString@@PAVQObject@@@Z @ 1610 NONAME ABSENT ; class QString QDeclarativeDebugService::objectToString(class QObject *)
+ ?defaultValue@QDeclarativeDomDynamicProperty@@QBE?AVQDeclarativeDomProperty@@XZ @ 1611 NONAME ABSENT ; class QDeclarativeDomProperty QDeclarativeDomDynamicProperty::defaultValue(void) const
+ ?relatedMetaObject@QMetaObjectBuilder@@QBEPBUQMetaObject@@H@Z @ 1612 NONAME ABSENT ; struct QMetaObject const * QMetaObjectBuilder::relatedMetaObject(int) const
+ ?addKey@QMetaEnumBuilder@@QAEHABVQByteArray@@H@Z @ 1613 NONAME ABSENT ; int QMetaEnumBuilder::addKey(class QByteArray const &, int)
?setPosHelper@QDeclarativeItemPrivate@@UAEXABVQPointF@@@Z @ 1614 NONAME ; void QDeclarativeItemPrivate::setPosHelper(class QPointF const &)
- ?attributes@QMetaMethodBuilder@@QBEHXZ @ 1615 NONAME ; int QMetaMethodBuilder::attributes(void) const
- ?lineNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 1616 NONAME ; int QDeclarativeDebugFileReference::lineNumber(void) const
- ?setTop@QDeclarativeScaleGrid@@QAEXH@Z @ 1617 NONAME ; void QDeclarativeScaleGrid::setTop(int)
+ ?attributes@QMetaMethodBuilder@@QBEHXZ @ 1615 NONAME ABSENT ; int QMetaMethodBuilder::attributes(void) const
+ ?lineNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 1616 NONAME ABSENT ; int QDeclarativeDebugFileReference::lineNumber(void) const
+ ?setTop@QDeclarativeScaleGrid@@QAEXH@Z @ 1617 NONAME ABSENT ; void QDeclarativeScaleGrid::setTop(int)
?metaObject@QDeclarativeItem@@UBEPBUQMetaObject@@XZ @ 1618 NONAME ; struct QMetaObject const * QDeclarativeItem::metaObject(void) const
- ?clear@QDeclarativeAbstractBinding@@IAEXXZ @ 1619 NONAME ; void QDeclarativeAbstractBinding::clear(void)
+ ?clear@QDeclarativeAbstractBinding@@IAEXXZ @ 1619 NONAME ABSENT ; void QDeclarativeAbstractBinding::clear(void)
?start@QDeclarativeItemPrivate@@SAXAAVQElapsedTimer@@@Z @ 1620 NONAME ; void QDeclarativeItemPrivate::start(class QElapsedTimer &)
?load@QDeclarativePixmap@@QAEXPAVQDeclarativeEngine@@ABVQUrl@@ABVQSize@@_N@Z @ 1621 NONAME ; void QDeclarativePixmap::load(class QDeclarativeEngine *, class QUrl const &, class QSize const &, bool)
- ?stringToRule@QDeclarativeGridScaledImage@@CA?AW4TileMode@QDeclarativeBorderImage@@ABVQString@@@Z @ 1622 NONAME ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::stringToRule(class QString const &)
- ?setHorizontalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1623 NONAME ; void QDeclarativeAnchors::setHorizontalCenter(class QDeclarativeAnchorLine const &)
+ ?stringToRule@QDeclarativeGridScaledImage@@CA?AW4TileMode@QDeclarativeBorderImage@@ABVQString@@@Z @ 1622 NONAME ABSENT ; enum QDeclarativeBorderImage::TileMode QDeclarativeGridScaledImage::stringToRule(class QString const &)
+ ?setHorizontalCenter@QDeclarativeAnchors@@QAEXABVQDeclarativeAnchorLine@@@Z @ 1623 NONAME ABSENT ; void QDeclarativeAnchors::setHorizontalCenter(class QDeclarativeAnchorLine const &)
?setFocus@QDeclarativeItem@@QAEX_N@Z @ 1624 NONAME ; void QDeclarativeItem::setFocus(bool)
?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@PBD@Z @ 1625 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, char const *) const
??4QDeclarativeProperty@@QAEAAV0@ABV0@@Z @ 1626 NONAME ; class QDeclarativeProperty & QDeclarativeProperty::operator=(class QDeclarativeProperty const &)
- ?messageReceived@QDeclarativeDebugClient@@MAEXABVQByteArray@@@Z @ 1627 NONAME ; void QDeclarativeDebugClient::messageReceived(class QByteArray const &)
+ ?messageReceived@QDeclarativeDebugClient@@MAEXABVQByteArray@@@Z @ 1627 NONAME ABSENT ; void QDeclarativeDebugClient::messageReceived(class QByteArray const &)
?setImplicitWidth@QDeclarativeItem@@IAEXM@Z @ 1628 NONAME ; void QDeclarativeItem::setImplicitWidth(float)
- ?isInterface@QDeclarativeType@@QBE_NXZ @ 1629 NONAME ; bool QDeclarativeType::isInterface(void) const
+ ?isInterface@QDeclarativeType@@QBE_NXZ @ 1629 NONAME ABSENT ; bool QDeclarativeType::isInterface(void) const
??0QDeclarativeContext@@AAE@PAVQDeclarativeEngine@@_N@Z @ 1630 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeEngine *, bool)
- ?initialValue@QDeclarativeOpenMetaObject@@UAE?AVQVariant@@H@Z @ 1631 NONAME ; class QVariant QDeclarativeOpenMetaObject::initialValue(int)
+ ?initialValue@QDeclarativeOpenMetaObject@@UAE?AVQVariant@@H@Z @ 1631 NONAME ABSENT ; class QVariant QDeclarativeOpenMetaObject::initialValue(int)
?tr@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1632 NONAME ; class QString QDeclarativeView::tr(char const *, char const *)
- ?qt_metacall@QPacketProtocol@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1633 NONAME ; int QPacketProtocol::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacall@QPacketProtocol@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1633 NONAME ABSENT ; int QPacketProtocol::qt_metacall(enum QMetaObject::Call, int, void * *)
??0QDeclarativeItem@@QAE@PAV0@@Z @ 1634 NONAME ; QDeclarativeItem::QDeclarativeItem(class QDeclarativeItem *)
- ?hasDebuggingClient@QDeclarativeDebugService@@SA_NXZ @ 1635 NONAME ; bool QDeclarativeDebugService::hasDebuggingClient(void)
+ ?hasDebuggingClient@QDeclarativeDebugService@@SA_NXZ @ 1635 NONAME ABSENT ; bool QDeclarativeDebugService::hasDebuggingClient(void)
?staticMetaObject@QDeclarativeContext@@2UQMetaObject@@B @ 1636 NONAME ; struct QMetaObject const QDeclarativeContext::staticMetaObject
?setContextForObject@QDeclarativeEngine@@SAXPAVQObject@@PAVQDeclarativeContext@@@Z @ 1637 NONAME ; void QDeclarativeEngine::setContextForObject(class QObject *, class QDeclarativeContext *)
?baselineOffsetChanged@QDeclarativeItem@@IAEXM@Z @ 1638 NONAME ; void QDeclarativeItem::baselineOffsetChanged(float)
??6QDeclarativeInfo@@QAEAAV0@VQChar@@@Z @ 1639 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QChar)
- ?newObjects@QDeclarativeEngineDebug@@IAEXXZ @ 1640 NONAME ; void QDeclarativeEngineDebug::newObjects(void)
- ?qt_metacast@QDeclarativePropertyChanges@@UAEPAXPBD@Z @ 1641 NONAME ; void * QDeclarativePropertyChanges::qt_metacast(char const *)
- ?actions@QDeclarativePropertyChanges@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1642 NONAME ; class QList<class QDeclarativeAction> QDeclarativePropertyChanges::actions(void)
- ??1QDeclarativePropertyChanges@@UAE@XZ @ 1643 NONAME ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(void)
- ??_EQDeclarativePropertyChanges@@UAE@I@Z @ 1644 NONAME ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(unsigned int)
- ?setObject@QDeclarativePropertyChanges@@QAEXPAVQObject@@@Z @ 1645 NONAME ; void QDeclarativePropertyChanges::setObject(class QObject *)
- ?staticMetaObject@QDeclarativePropertyChanges@@2UQMetaObject@@B @ 1646 NONAME ; struct QMetaObject const QDeclarativePropertyChanges::staticMetaObject
+ ?newObjects@QDeclarativeEngineDebug@@IAEXXZ @ 1640 NONAME ABSENT ; void QDeclarativeEngineDebug::newObjects(void)
+ ?qt_metacast@QDeclarativePropertyChanges@@UAEPAXPBD@Z @ 1641 NONAME ABSENT ; void * QDeclarativePropertyChanges::qt_metacast(char const *)
+ ?actions@QDeclarativePropertyChanges@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1642 NONAME ABSENT ; class QList<class QDeclarativeAction> QDeclarativePropertyChanges::actions(void)
+ ??1QDeclarativePropertyChanges@@UAE@XZ @ 1643 NONAME ABSENT ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(void)
+ ??_EQDeclarativePropertyChanges@@UAE@I@Z @ 1644 NONAME ABSENT ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(unsigned int)
+ ?setObject@QDeclarativePropertyChanges@@QAEXPAVQObject@@@Z @ 1645 NONAME ABSENT ; void QDeclarativePropertyChanges::setObject(class QObject *)
+ ?staticMetaObject@QDeclarativePropertyChanges@@2UQMetaObject@@B @ 1646 NONAME ABSENT ; struct QMetaObject const QDeclarativePropertyChanges::staticMetaObject
?removeEntryFromRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@@Z @ 1647 NONAME ; bool QDeclarativeState::removeEntryFromRevertList(class QObject *, class QByteArray const &)
- ?restoreEntryValues@QDeclarativePropertyChanges@@QBE_NXZ @ 1648 NONAME ; bool QDeclarativePropertyChanges::restoreEntryValues(void) const
- ?setRestoreEntryValues@QDeclarativePropertyChanges@@QAEX_N@Z @ 1649 NONAME ; void QDeclarativePropertyChanges::setRestoreEntryValues(bool)
- ?changeValue@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1650 NONAME ; void QDeclarativePropertyChanges::changeValue(class QByteArray const &, class QVariant const &)
- ?metaObject@QDeclarativePropertyChanges@@UBEPBUQMetaObject@@XZ @ 1651 NONAME ; struct QMetaObject const * QDeclarativePropertyChanges::metaObject(void) const
+ ?restoreEntryValues@QDeclarativePropertyChanges@@QBE_NXZ @ 1648 NONAME ABSENT ; bool QDeclarativePropertyChanges::restoreEntryValues(void) const
+ ?setRestoreEntryValues@QDeclarativePropertyChanges@@QAEX_N@Z @ 1649 NONAME ABSENT ; void QDeclarativePropertyChanges::setRestoreEntryValues(bool)
+ ?changeValue@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1650 NONAME ABSENT ; void QDeclarativePropertyChanges::changeValue(class QByteArray const &, class QVariant const &)
+ ?metaObject@QDeclarativePropertyChanges@@UBEPBUQMetaObject@@XZ @ 1651 NONAME ABSENT ; struct QMetaObject const * QDeclarativePropertyChanges::metaObject(void) const
?data_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1652 NONAME ; void QDeclarativeItemPrivate::data_clear(class QDeclarativeListProperty<class QObject> *)
?containsPropertyInRevertList@QDeclarativeState@@QBE_NPAVQObject@@ABVQByteArray@@@Z @ 1653 NONAME ; bool QDeclarativeState::containsPropertyInRevertList(class QObject *, class QByteArray const &) const
- ?containsValue@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1654 NONAME ; bool QDeclarativePropertyChanges::containsValue(class QByteArray const &) const
+ ?containsValue@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1654 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsValue(class QByteArray const &) const
?bindingInRevertList@QDeclarativeState@@QBEPAVQDeclarativeAbstractBinding@@PAVQObject@@ABVQByteArray@@@Z @ 1655 NONAME ; class QDeclarativeAbstractBinding * QDeclarativeState::bindingInRevertList(class QObject *, class QByteArray const &) const
- ?d_func@QDeclarativePropertyChanges@@ABEPBVQDeclarativePropertyChangesPrivate@@XZ @ 1656 NONAME ; class QDeclarativePropertyChangesPrivate const * QDeclarativePropertyChanges::d_func(void) const
- ?containsProperty@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1657 NONAME ; bool QDeclarativePropertyChanges::containsProperty(class QByteArray const &) const
- ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1658 NONAME ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *, int)
- ?property@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1659 NONAME ; class QVariant QDeclarativePropertyChanges::property(class QByteArray const &) const
- ?containsExpression@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1660 NONAME ; bool QDeclarativePropertyChanges::containsExpression(class QByteArray const &) const
+ ?d_func@QDeclarativePropertyChanges@@ABEPBVQDeclarativePropertyChangesPrivate@@XZ @ 1656 NONAME ABSENT ; class QDeclarativePropertyChangesPrivate const * QDeclarativePropertyChanges::d_func(void) const
+ ?containsProperty@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1657 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsProperty(class QByteArray const &) const
+ ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1658 NONAME ABSENT ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *, int)
+ ?property@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1659 NONAME ABSENT ; class QVariant QDeclarativePropertyChanges::property(class QByteArray const &) const
+ ?containsExpression@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1660 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsExpression(class QByteArray const &) const
?d_func@QDeclarativeStateOperation@@ABEPBVQDeclarativeStateOperationPrivate@@XZ @ 1661 NONAME ; class QDeclarativeStateOperationPrivate const * QDeclarativeStateOperation::d_func(void) const
- ?d_func@QDeclarativePropertyChanges@@AAEPAVQDeclarativePropertyChangesPrivate@@XZ @ 1662 NONAME ; class QDeclarativePropertyChangesPrivate * QDeclarativePropertyChanges::d_func(void)
+ ?d_func@QDeclarativePropertyChanges@@AAEPAVQDeclarativePropertyChangesPrivate@@XZ @ 1662 NONAME ABSENT ; class QDeclarativePropertyChangesPrivate * QDeclarativePropertyChanges::d_func(void)
?state@QDeclarativeStateOperation@@QBEPAVQDeclarativeState@@XZ @ 1663 NONAME ; class QDeclarativeState * QDeclarativeStateOperation::state(void) const
- ?value@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1664 NONAME ; class QVariant QDeclarativePropertyChanges::value(class QByteArray const &) const
- ?qt_metacall@QDeclarativePropertyChanges@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1665 NONAME ; int QDeclarativePropertyChanges::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1666 NONAME ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *)
- ?attachToState@QDeclarativePropertyChanges@@QAEXXZ @ 1667 NONAME ; void QDeclarativePropertyChanges::attachToState(void)
- ?changeExpression@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQString@@@Z @ 1668 NONAME ; void QDeclarativePropertyChanges::changeExpression(class QByteArray const &, class QString const &)
+ ?value@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1664 NONAME ABSENT ; class QVariant QDeclarativePropertyChanges::value(class QByteArray const &) const
+ ?qt_metacall@QDeclarativePropertyChanges@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1665 NONAME ABSENT ; int QDeclarativePropertyChanges::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1666 NONAME ABSENT ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *)
+ ?attachToState@QDeclarativePropertyChanges@@QAEXXZ @ 1667 NONAME ABSENT ; void QDeclarativePropertyChanges::attachToState(void)
+ ?changeExpression@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQString@@@Z @ 1668 NONAME ABSENT ; void QDeclarativePropertyChanges::changeExpression(class QByteArray const &, class QString const &)
?addEntryToRevertList@QDeclarativeState@@QAEXABVQDeclarativeAction@@@Z @ 1669 NONAME ; void QDeclarativeState::addEntryToRevertList(class QDeclarativeAction const &)
- ??0QDeclarativePropertyChanges@@QAE@XZ @ 1670 NONAME ; QDeclarativePropertyChanges::QDeclarativePropertyChanges(void)
+ ??0QDeclarativePropertyChanges@@QAE@XZ @ 1670 NONAME ABSENT ; QDeclarativePropertyChanges::QDeclarativePropertyChanges(void)
?resources_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1671 NONAME ; void QDeclarativeItemPrivate::resources_clear(class QDeclarativeListProperty<class QObject> *)
- ?isExplicit@QDeclarativePropertyChanges@@QBE_NXZ @ 1672 NONAME ; bool QDeclarativePropertyChanges::isExplicit(void) const
+ ?isExplicit@QDeclarativePropertyChanges@@QBE_NXZ @ 1672 NONAME ABSENT ; bool QDeclarativePropertyChanges::isExplicit(void) const
?setState@QDeclarativeStateOperation@@QAEXPAVQDeclarativeState@@@Z @ 1673 NONAME ; void QDeclarativeStateOperation::setState(class QDeclarativeState *)
- ?detachFromState@QDeclarativePropertyChanges@@QAEXXZ @ 1674 NONAME ; void QDeclarativePropertyChanges::detachFromState(void)
- ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1675 NONAME ; class QString QDeclarativePropertyChanges::tr(char const *, char const *, int)
+ ?detachFromState@QDeclarativePropertyChanges@@QAEXXZ @ 1674 NONAME ABSENT ; void QDeclarativePropertyChanges::detachFromState(void)
+ ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1675 NONAME ABSENT ; class QString QDeclarativePropertyChanges::tr(char const *, char const *, int)
?addEntriesToRevertList@QDeclarativeState@@QAEXABV?$QList@VQDeclarativeAction@@@@@Z @ 1676 NONAME ; void QDeclarativeState::addEntriesToRevertList(class QList<class QDeclarativeAction> const &)
- ?expression@QDeclarativePropertyChanges@@QBE?AVQString@@ABVQByteArray@@@Z @ 1677 NONAME ; class QString QDeclarativePropertyChanges::expression(class QByteArray const &) const
- ?object@QDeclarativePropertyChanges@@QBEPAVQObject@@XZ @ 1678 NONAME ; class QObject * QDeclarativePropertyChanges::object(void) const
+ ?expression@QDeclarativePropertyChanges@@QBE?AVQString@@ABVQByteArray@@@Z @ 1677 NONAME ABSENT ; class QString QDeclarativePropertyChanges::expression(class QByteArray const &) const
+ ?object@QDeclarativePropertyChanges@@QBEPAVQObject@@XZ @ 1678 NONAME ABSENT ; class QObject * QDeclarativePropertyChanges::object(void) const
?valueInRevertList@QDeclarativeState@@QBE?AVQVariant@@PAVQObject@@ABVQByteArray@@@Z @ 1679 NONAME ; class QVariant QDeclarativeState::valueInRevertList(class QObject *, class QByteArray const &) const
?removeAllEntriesFromRevertList@QDeclarativeState@@QAEXPAVQObject@@@Z @ 1680 NONAME ; void QDeclarativeState::removeAllEntriesFromRevertList(class QObject *)
?d_func@QDeclarativeStateOperation@@AAEPAVQDeclarativeStateOperationPrivate@@XZ @ 1681 NONAME ; class QDeclarativeStateOperationPrivate * QDeclarativeStateOperation::d_func(void)
?changeValueInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@ABVQVariant@@@Z @ 1682 NONAME ; bool QDeclarativeState::changeValueInRevertList(class QObject *, class QByteArray const &, class QVariant const &)
- ?setIsExplicit@QDeclarativePropertyChanges@@QAEX_N@Z @ 1683 NONAME ; void QDeclarativePropertyChanges::setIsExplicit(bool)
+ ?setIsExplicit@QDeclarativePropertyChanges@@QAEX_N@Z @ 1683 NONAME ABSENT ; void QDeclarativePropertyChanges::setIsExplicit(bool)
?isStateActive@QDeclarativeState@@QBE_NXZ @ 1684 NONAME ; bool QDeclarativeState::isStateActive(void) const
?data_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1685 NONAME ; int QDeclarativeItemPrivate::data_count(class QDeclarativeListProperty<class QObject> *)
- ?removeProperty@QDeclarativePropertyChanges@@QAEXABVQByteArray@@@Z @ 1686 NONAME ; void QDeclarativePropertyChanges::removeProperty(class QByteArray const &)
+ ?removeProperty@QDeclarativePropertyChanges@@QAEXABVQByteArray@@@Z @ 1686 NONAME ABSENT ; void QDeclarativePropertyChanges::removeProperty(class QByteArray const &)
?data_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 1687 NONAME ; class QObject * QDeclarativeItemPrivate::data_at(class QDeclarativeListProperty<class QObject> *, int)
- ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1688 NONAME ; class QString QDeclarativePropertyChanges::tr(char const *, char const *)
+ ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1688 NONAME ABSENT ; class QString QDeclarativePropertyChanges::tr(char const *, char const *)
?changeBindingInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@PAVQDeclarativeAbstractBinding@@@Z @ 1689 NONAME ; bool QDeclarativeState::changeBindingInRevertList(class QObject *, class QByteArray const &, class QDeclarativeAbstractBinding *)
- ?getStaticMetaObject@QDeclarativePropertyChanges@@SAABUQMetaObject@@XZ @ 1690 NONAME ; struct QMetaObject const & QDeclarativePropertyChanges::getStaticMetaObject(void)
+ ?getStaticMetaObject@QDeclarativePropertyChanges@@SAABUQMetaObject@@XZ @ 1690 NONAME ABSENT ; struct QMetaObject const & QDeclarativePropertyChanges::getStaticMetaObject(void)
?weakPointer@QDeclarativeAbstractBinding@@QAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1691 NONAME ABSENT ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::weakPointer(void)
- ?getStaticMetaObject@QDeclarativeScriptAction@@SAABUQMetaObject@@XZ @ 1692 NONAME ; struct QMetaObject const & QDeclarativeScriptAction::getStaticMetaObject(void)
- ?qt_metacall@QDeclarativeScriptAction@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1693 NONAME ; int QDeclarativeScriptAction::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??1QDeclarativeScriptAction@@UAE@XZ @ 1694 NONAME ; QDeclarativeScriptAction::~QDeclarativeScriptAction(void)
- ?stateChangeScriptName@QDeclarativeScriptAction@@QBE?AVQString@@XZ @ 1695 NONAME ; class QString QDeclarativeScriptAction::stateChangeScriptName(void) const
- ?script@QDeclarativeScriptAction@@QBE?AVQDeclarativeScriptString@@XZ @ 1696 NONAME ; class QDeclarativeScriptString QDeclarativeScriptAction::script(void) const
- ?qt_metacast@QDeclarativeScriptAction@@UAEPAXPBD@Z @ 1697 NONAME ; void * QDeclarativeScriptAction::qt_metacast(char const *)
- ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1698 NONAME ; class QString QDeclarativeScriptAction::tr(char const *, char const *)
- ?setStateChangeScriptName@QDeclarativeScriptAction@@QAEXABVQString@@@Z @ 1699 NONAME ; void QDeclarativeScriptAction::setStateChangeScriptName(class QString const &)
- ??_EQDeclarativeScriptAction@@UAE@I@Z @ 1700 NONAME ; QDeclarativeScriptAction::~QDeclarativeScriptAction(unsigned int)
- ?d_func@QDeclarativeScriptAction@@ABEPBVQDeclarativeScriptActionPrivate@@XZ @ 1701 NONAME ; class QDeclarativeScriptActionPrivate const * QDeclarativeScriptAction::d_func(void) const
- ?weakPointer@QDeclarativeAbstractBinding@@AAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1702 NONAME ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::weakPointer(void)
- ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1703 NONAME ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *, int)
- ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1704 NONAME ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *)
- ?qtAnimation@QDeclarativeScriptAction@@MAEPAVQAbstractAnimation@@XZ @ 1705 NONAME ; class QAbstractAnimation * QDeclarativeScriptAction::qtAnimation(void)
- ??0QDeclarativeScriptAction@@QAE@PAVQObject@@@Z @ 1706 NONAME ; QDeclarativeScriptAction::QDeclarativeScriptAction(class QObject *)
- ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1707 NONAME ; class QString QDeclarativeScriptAction::tr(char const *, char const *, int)
- ?d_func@QDeclarativeScriptAction@@AAEPAVQDeclarativeScriptActionPrivate@@XZ @ 1708 NONAME ; class QDeclarativeScriptActionPrivate * QDeclarativeScriptAction::d_func(void)
- ?transition@QDeclarativeScriptAction@@MAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@W4TransitionDirection@QDeclarativeAbstractAnimation@@@Z @ 1709 NONAME ; void QDeclarativeScriptAction::transition(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, enum QDeclarativeAbstractAnimation::TransitionDirection)
- ?staticMetaObject@QDeclarativeScriptAction@@2UQMetaObject@@B @ 1710 NONAME ; struct QMetaObject const QDeclarativeScriptAction::staticMetaObject
- ?setScript@QDeclarativeScriptAction@@QAEXABVQDeclarativeScriptString@@@Z @ 1711 NONAME ; void QDeclarativeScriptAction::setScript(class QDeclarativeScriptString const &)
- ?metaObject@QDeclarativeScriptAction@@UBEPBUQMetaObject@@XZ @ 1712 NONAME ; struct QMetaObject const * QDeclarativeScriptAction::metaObject(void) const
- ?getPointer@QDeclarativeAbstractBinding@@SA?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@PAV1@@Z @ 1713 NONAME ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::getPointer(class QDeclarativeAbstractBinding *)
- ??0QDeclarativeListModel@@AAE@PBV0@PAVQDeclarativeListModelWorkerAgent@@@Z @ 1714 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QDeclarativeListModel const *, class QDeclarativeListModelWorkerAgent *)
- ?inWorkerThread@QDeclarativeListModel@@ABE_NXZ @ 1715 NONAME ; bool QDeclarativeListModel::inWorkerThread(void) const
- ?canMove@QDeclarativeListModel@@ABE_NHHH@Z @ 1716 NONAME ; bool QDeclarativeListModel::canMove(int, int, int) const
+ ?getStaticMetaObject@QDeclarativeScriptAction@@SAABUQMetaObject@@XZ @ 1692 NONAME ABSENT ; struct QMetaObject const & QDeclarativeScriptAction::getStaticMetaObject(void)
+ ?qt_metacall@QDeclarativeScriptAction@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1693 NONAME ABSENT ; int QDeclarativeScriptAction::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??1QDeclarativeScriptAction@@UAE@XZ @ 1694 NONAME ABSENT ; QDeclarativeScriptAction::~QDeclarativeScriptAction(void)
+ ?stateChangeScriptName@QDeclarativeScriptAction@@QBE?AVQString@@XZ @ 1695 NONAME ABSENT ; class QString QDeclarativeScriptAction::stateChangeScriptName(void) const
+ ?script@QDeclarativeScriptAction@@QBE?AVQDeclarativeScriptString@@XZ @ 1696 NONAME ABSENT ; class QDeclarativeScriptString QDeclarativeScriptAction::script(void) const
+ ?qt_metacast@QDeclarativeScriptAction@@UAEPAXPBD@Z @ 1697 NONAME ABSENT ; void * QDeclarativeScriptAction::qt_metacast(char const *)
+ ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1698 NONAME ABSENT ; class QString QDeclarativeScriptAction::tr(char const *, char const *)
+ ?setStateChangeScriptName@QDeclarativeScriptAction@@QAEXABVQString@@@Z @ 1699 NONAME ABSENT ; void QDeclarativeScriptAction::setStateChangeScriptName(class QString const &)
+ ??_EQDeclarativeScriptAction@@UAE@I@Z @ 1700 NONAME ABSENT ; QDeclarativeScriptAction::~QDeclarativeScriptAction(unsigned int)
+ ?d_func@QDeclarativeScriptAction@@ABEPBVQDeclarativeScriptActionPrivate@@XZ @ 1701 NONAME ABSENT ; class QDeclarativeScriptActionPrivate const * QDeclarativeScriptAction::d_func(void) const
+ ?weakPointer@QDeclarativeAbstractBinding@@AAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1702 NONAME ABSENT ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::weakPointer(void)
+ ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1703 NONAME ABSENT ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeScriptAction@@SA?AVQString@@PBD0@Z @ 1704 NONAME ABSENT ; class QString QDeclarativeScriptAction::trUtf8(char const *, char const *)
+ ?qtAnimation@QDeclarativeScriptAction@@MAEPAVQAbstractAnimation@@XZ @ 1705 NONAME ABSENT ; class QAbstractAnimation * QDeclarativeScriptAction::qtAnimation(void)
+ ??0QDeclarativeScriptAction@@QAE@PAVQObject@@@Z @ 1706 NONAME ABSENT ; QDeclarativeScriptAction::QDeclarativeScriptAction(class QObject *)
+ ?tr@QDeclarativeScriptAction@@SA?AVQString@@PBD0H@Z @ 1707 NONAME ABSENT ; class QString QDeclarativeScriptAction::tr(char const *, char const *, int)
+ ?d_func@QDeclarativeScriptAction@@AAEPAVQDeclarativeScriptActionPrivate@@XZ @ 1708 NONAME ABSENT ; class QDeclarativeScriptActionPrivate * QDeclarativeScriptAction::d_func(void)
+ ?transition@QDeclarativeScriptAction@@MAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@W4TransitionDirection@QDeclarativeAbstractAnimation@@@Z @ 1709 NONAME ABSENT ; void QDeclarativeScriptAction::transition(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, enum QDeclarativeAbstractAnimation::TransitionDirection)
+ ?staticMetaObject@QDeclarativeScriptAction@@2UQMetaObject@@B @ 1710 NONAME ABSENT ; struct QMetaObject const QDeclarativeScriptAction::staticMetaObject
+ ?setScript@QDeclarativeScriptAction@@QAEXABVQDeclarativeScriptString@@@Z @ 1711 NONAME ABSENT ; void QDeclarativeScriptAction::setScript(class QDeclarativeScriptString const &)
+ ?metaObject@QDeclarativeScriptAction@@UBEPBUQMetaObject@@XZ @ 1712 NONAME ABSENT ; struct QMetaObject const * QDeclarativeScriptAction::metaObject(void) const
+ ?getPointer@QDeclarativeAbstractBinding@@SA?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@PAV1@@Z @ 1713 NONAME ABSENT ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::getPointer(class QDeclarativeAbstractBinding *)
+ ??0QDeclarativeListModel@@AAE@PBV0@PAVQDeclarativeListModelWorkerAgent@@@Z @ 1714 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(class QDeclarativeListModel const *, class QDeclarativeListModelWorkerAgent *)
+ ?inWorkerThread@QDeclarativeListModel@@ABE_NXZ @ 1715 NONAME ABSENT ; bool QDeclarativeListModel::inWorkerThread(void) const
+ ?canMove@QDeclarativeListModel@@ABE_NHHH@Z @ 1716 NONAME ABSENT ; bool QDeclarativeListModel::canMove(int, int, int) const
+ ?getScriptEngine@QDeclarativeDebugHelper@@SAPAVQScriptEngine@@PAVQDeclarativeEngine@@@Z @ 1717 NONAME ABSENT ; class QScriptEngine * QDeclarativeDebugHelper::getScriptEngine(class QDeclarativeEngine *)
+ ?setAnimationSlowDownFactor@QDeclarativeDebugHelper@@SAXM@Z @ 1718 NONAME ABSENT ; void QDeclarativeDebugHelper::setAnimationSlowDownFactor(float)
+ ?add@QDeclarativeBasePositioner@@QBEPAVQDeclarativeTransition@@XZ @ 1719 NONAME ABSENT ; class QDeclarativeTransition * QDeclarativeBasePositioner::add(void) const
+ ?setLoops@QDeclarativeAbstractAnimation@@QAEXH@Z @ 1720 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setLoops(int)
+ ?trUtf8@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0@Z @ 1721 NONAME ABSENT ; class QString QDeclarativeAbstractAnimation::trUtf8(char const *, char const *)
+ ?tr@QDeclarativeBasePositioner@@SA?AVQString@@PBD0@Z @ 1722 NONAME ABSENT ; class QString QDeclarativeBasePositioner::tr(char const *, char const *)
+ ?staticMetaObject@QDeclarativeAbstractAnimation@@2UQMetaObject@@B @ 1723 NONAME ABSENT ; struct QMetaObject const QDeclarativeAbstractAnimation::staticMetaObject
+ ?setMove@QDeclarativeBasePositioner@@QAEXPAVQDeclarativeTransition@@@Z @ 1724 NONAME ABSENT ; void QDeclarativeBasePositioner::setMove(class QDeclarativeTransition *)
+ ?setRunning@QDeclarativeTimer@@QAEX_N@Z @ 1725 NONAME ABSENT ; void QDeclarativeTimer::setRunning(bool)
+ ?tr@QDeclarativeTimer@@SA?AVQString@@PBD0@Z @ 1726 NONAME ABSENT ; class QString QDeclarativeTimer::tr(char const *, char const *)
+ ?qt_metacall@QDeclarativeTimer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1727 NONAME ABSENT ; int QDeclarativeTimer::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setPaused@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1728 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setPaused(bool)
+ ?d_func@QDeclarativeBasePositioner@@ABEPBVQDeclarativeBasePositionerPrivate@@XZ @ 1729 NONAME ABSENT ; class QDeclarativeBasePositionerPrivate const * QDeclarativeBasePositioner::d_func(void) const
+ ?setRepeating@QDeclarativeTimer@@QAEX_N@Z @ 1730 NONAME ABSENT ; void QDeclarativeTimer::setRepeating(bool)
+ ?interval@QDeclarativeTimer@@QBEHXZ @ 1731 NONAME ABSENT ; int QDeclarativeTimer::interval(void) const
+ ?start@QDeclarativeTimer@@QAEXXZ @ 1732 NONAME ABSENT ; void QDeclarativeTimer::start(void)
+ ?transition@QDeclarativeAbstractAnimation@@UAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@W4TransitionDirection@1@@Z @ 1733 NONAME ABSENT ; void QDeclarativeAbstractAnimation::transition(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, enum QDeclarativeAbstractAnimation::TransitionDirection)
+ ?componentComplete@QDeclarativeAbstractAnimation@@UAEXXZ @ 1734 NONAME ABSENT ; void QDeclarativeAbstractAnimation::componentComplete(void)
+ ?statusChanged@QDeclarativeDebugService@@MAEXW4Status@1@@Z @ 1735 NONAME ABSENT ; void QDeclarativeDebugService::statusChanged(enum QDeclarativeDebugService::Status)
+ ?runningChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1736 NONAME ABSENT ; void QDeclarativeAbstractAnimation::runningChanged(bool)
+ ?trUtf8@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0H@Z @ 1737 NONAME ABSENT ; class QString QDeclarativeAbstractAnimation::trUtf8(char const *, char const *, int)
+ ??_EQDeclarativeBasePositioner@@UAE@I@Z @ 1738 NONAME ABSENT ; QDeclarativeBasePositioner::~QDeclarativeBasePositioner(unsigned int)
+ ?metaObject@QDeclarativeTimer@@UBEPBUQMetaObject@@XZ @ 1739 NONAME ABSENT ; struct QMetaObject const * QDeclarativeTimer::metaObject(void) const
+ ?setGroup@QDeclarativeAbstractAnimation@@QAEXPAVQDeclarativeAnimationGroup@@@Z @ 1740 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setGroup(class QDeclarativeAnimationGroup *)
+ ?isRepeating@QDeclarativeTimer@@QBE_NXZ @ 1741 NONAME ABSENT ; bool QDeclarativeTimer::isRepeating(void) const
+ ?setTriggeredOnStart@QDeclarativeTimer@@QAEX_N@Z @ 1742 NONAME ABSENT ; void QDeclarativeTimer::setTriggeredOnStart(bool)
+ ?currentTime@QDeclarativeAbstractAnimation@@QAEHXZ @ 1743 NONAME ABSENT ; int QDeclarativeAbstractAnimation::currentTime(void)
+ ?status@QDeclarativeEngineDebug@@QBE?AW4Status@1@XZ @ 1744 NONAME ABSENT ; enum QDeclarativeEngineDebug::Status QDeclarativeEngineDebug::status(void) const
+ ??1QDeclarativeAbstractAnimation@@UAE@XZ @ 1745 NONAME ABSENT ; QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation(void)
+ ?triggered@QDeclarativeTimer@@IAEXXZ @ 1746 NONAME ABSENT ; void QDeclarativeTimer::triggered(void)
+ ?getStaticMetaObject@QDeclarativeBasePositioner@@SAABUQMetaObject@@XZ @ 1747 NONAME ABSENT ; struct QMetaObject const & QDeclarativeBasePositioner::getStaticMetaObject(void)
+ ?finished@QDeclarativeTimer@@AAEXXZ @ 1748 NONAME ABSENT ; void QDeclarativeTimer::finished(void)
+ ?pausedChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1749 NONAME ABSENT ; void QDeclarativeAbstractAnimation::pausedChanged(bool)
+ ?complete@QDeclarativeAbstractAnimation@@QAEXXZ @ 1750 NONAME ABSENT ; void QDeclarativeAbstractAnimation::complete(void)
+ ?setRunning@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1751 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setRunning(bool)
+ ?trUtf8@QDeclarativeBasePositioner@@SA?AVQString@@PBD0H@Z @ 1752 NONAME ABSENT ; class QString QDeclarativeBasePositioner::trUtf8(char const *, char const *, int)
+ ?trUtf8@QDeclarativeBasePositioner@@SA?AVQString@@PBD0@Z @ 1753 NONAME ABSENT ; class QString QDeclarativeBasePositioner::trUtf8(char const *, char const *)
+ ?completed@QDeclarativeAbstractAnimation@@IAEXXZ @ 1754 NONAME ABSENT ; void QDeclarativeAbstractAnimation::completed(void)
+ ?trUtf8@QDeclarativeTimer@@SA?AVQString@@PBD0@Z @ 1755 NONAME ABSENT ; class QString QDeclarativeTimer::trUtf8(char const *, char const *)
+ ?loopCountChanged@QDeclarativeAbstractAnimation@@IAEXH@Z @ 1756 NONAME ABSENT ; void QDeclarativeAbstractAnimation::loopCountChanged(int)
+ ?repeatChanged@QDeclarativeTimer@@IAEXXZ @ 1757 NONAME ABSENT ; void QDeclarativeTimer::repeatChanged(void)
+ ?setDisableUserControl@QDeclarativeAbstractAnimation@@QAEXXZ @ 1758 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setDisableUserControl(void)
+ ?componentComplete@QDeclarativeBasePositioner@@MAEXXZ @ 1759 NONAME ABSENT ; void QDeclarativeBasePositioner::componentComplete(void)
+ ?setDefaultTarget@QDeclarativeAbstractAnimation@@QAEXABVQDeclarativeProperty@@@Z @ 1760 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setDefaultTarget(class QDeclarativeProperty const &)
+ ?staticMetaObject@QDeclarativeBasePositioner@@2UQMetaObject@@B @ 1761 NONAME ABSENT ; struct QMetaObject const QDeclarativeBasePositioner::staticMetaObject
+ ?triggeredOnStart@QDeclarativeTimer@@QBE_NXZ @ 1762 NONAME ABSENT ; bool QDeclarativeTimer::triggeredOnStart(void) const
+ ?notifyRunningChanged@QDeclarativeAbstractAnimation@@AAEX_N@Z @ 1763 NONAME ABSENT ; void QDeclarativeAbstractAnimation::notifyRunningChanged(bool)
+ ?statusChanged@QDeclarativeDebugClient@@MAEXW4Status@1@@Z @ 1764 NONAME ABSENT ; void QDeclarativeDebugClient::statusChanged(enum QDeclarativeDebugClient::Status)
+ ??0QDeclarativeBasePositioner@@IAE@AAVQDeclarativeBasePositionerPrivate@@W4PositionerType@0@PAVQDeclarativeItem@@@Z @ 1765 NONAME ABSENT ; QDeclarativeBasePositioner::QDeclarativeBasePositioner(class QDeclarativeBasePositionerPrivate &, enum QDeclarativeBasePositioner::PositionerType, class QDeclarativeItem *)
+ ?componentComplete@QDeclarativeTimer@@MAEXXZ @ 1766 NONAME ABSENT ; void QDeclarativeTimer::componentComplete(void)
+ ?tr@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0@Z @ 1767 NONAME ABSENT ; class QString QDeclarativeAbstractAnimation::tr(char const *, char const *)
+ ?isRunning@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1768 NONAME ABSENT ; bool QDeclarativeAbstractAnimation::isRunning(void) const
+ ?d_func@QDeclarativeAbstractAnimation@@ABEPBVQDeclarativeAbstractAnimationPrivate@@XZ @ 1769 NONAME ABSENT ; class QDeclarativeAbstractAnimationPrivate const * QDeclarativeAbstractAnimation::d_func(void) const
+ ??_EQDeclarativeAbstractAnimation@@UAE@I@Z @ 1770 NONAME ABSENT ; QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation(unsigned int)
+ ??0QDeclarativeBasePositioner@@QAE@W4PositionerType@0@PAVQDeclarativeItem@@@Z @ 1771 NONAME ABSENT ; QDeclarativeBasePositioner::QDeclarativeBasePositioner(enum QDeclarativeBasePositioner::PositionerType, class QDeclarativeItem *)
+ ?qt_metacall@QDeclarativeBasePositioner@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1772 NONAME ABSENT ; int QDeclarativeBasePositioner::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?status@QDeclarativeDebugClient@@QBE?AW4Status@1@XZ @ 1773 NONAME ABSENT ; enum QDeclarativeDebugClient::Status QDeclarativeDebugClient::status(void) const
+ ?prePositioning@QDeclarativeBasePositioner@@IAEXXZ @ 1774 NONAME ABSENT ; void QDeclarativeBasePositioner::prePositioning(void)
+ ?finishApplyTransitions@QDeclarativeBasePositioner@@IAEXXZ @ 1775 NONAME ABSENT ; void QDeclarativeBasePositioner::finishApplyTransitions(void)
+ ?d_func@QDeclarativeAbstractAnimation@@AAEPAVQDeclarativeAbstractAnimationPrivate@@XZ @ 1776 NONAME ABSENT ; class QDeclarativeAbstractAnimationPrivate * QDeclarativeAbstractAnimation::d_func(void)
+ ?componentFinalized@QDeclarativeAbstractAnimation@@AAEXXZ @ 1777 NONAME ABSENT ; void QDeclarativeAbstractAnimation::componentFinalized(void)
+ ??_EQDeclarativeTimer@@UAE@I@Z @ 1778 NONAME ABSENT ; QDeclarativeTimer::~QDeclarativeTimer(unsigned int)
+ ?pause@QDeclarativeAbstractAnimation@@QAEXXZ @ 1779 NONAME ABSENT ; void QDeclarativeAbstractAnimation::pause(void)
+ ?stop@QDeclarativeTimer@@QAEXXZ @ 1780 NONAME ABSENT ; void QDeclarativeTimer::stop(void)
+ ?timelineComplete@QDeclarativeAbstractAnimation@@AAEXXZ @ 1781 NONAME ABSENT ; void QDeclarativeAbstractAnimation::timelineComplete(void)
+ ?d_func@QDeclarativeBasePositioner@@AAEPAVQDeclarativeBasePositionerPrivate@@XZ @ 1782 NONAME ABSENT ; class QDeclarativeBasePositionerPrivate * QDeclarativeBasePositioner::d_func(void)
+ ?setAlwaysRunToEnd@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1783 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setAlwaysRunToEnd(bool)
+ ?classBegin@QDeclarativeAbstractAnimation@@UAEXXZ @ 1784 NONAME ABSENT ; void QDeclarativeAbstractAnimation::classBegin(void)
+ ?d_func@QDeclarativeTimer@@AAEPAVQDeclarativeTimerPrivate@@XZ @ 1785 NONAME ABSENT ; class QDeclarativeTimerPrivate * QDeclarativeTimer::d_func(void)
+ ?spacing@QDeclarativeBasePositioner@@QBEHXZ @ 1786 NONAME ABSENT ; int QDeclarativeBasePositioner::spacing(void) const
+ ??0QDeclarativeAbstractAnimation@@QAE@PAVQObject@@@Z @ 1787 NONAME ABSENT ; QDeclarativeAbstractAnimation::QDeclarativeAbstractAnimation(class QObject *)
+ ?metaObject@QDeclarativeAbstractAnimation@@UBEPBUQMetaObject@@XZ @ 1788 NONAME ABSENT ; struct QMetaObject const * QDeclarativeAbstractAnimation::metaObject(void) const
+ ?tr@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0H@Z @ 1789 NONAME ABSENT ; class QString QDeclarativeAbstractAnimation::tr(char const *, char const *, int)
+ ?started@QDeclarativeAbstractAnimation@@IAEXXZ @ 1790 NONAME ABSENT ; void QDeclarativeAbstractAnimation::started(void)
+ ?setInterval@QDeclarativeTimer@@QAEXH@Z @ 1791 NONAME ABSENT ; void QDeclarativeTimer::setInterval(int)
+ ?statusChanged@QDeclarativeEngineDebug@@IAEXW4Status@1@@Z @ 1792 NONAME ABSENT ; void QDeclarativeEngineDebug::statusChanged(enum QDeclarativeEngineDebug::Status)
+ ?d_func@QDeclarativeTimer@@ABEPBVQDeclarativeTimerPrivate@@XZ @ 1793 NONAME ABSENT ; class QDeclarativeTimerPrivate const * QDeclarativeTimer::d_func(void) const
+ ?setSpacing@QDeclarativeBasePositioner@@QAEXH@Z @ 1794 NONAME ABSENT ; void QDeclarativeBasePositioner::setSpacing(int)
+ ?staticMetaObject@QDeclarativeTimer@@2UQMetaObject@@B @ 1795 NONAME ABSENT ; struct QMetaObject const QDeclarativeTimer::staticMetaObject
+ ?positionY@QDeclarativeBasePositioner@@IAEXHABVPositionedItem@1@@Z @ 1796 NONAME ABSENT ; void QDeclarativeBasePositioner::positionY(int, class QDeclarativeBasePositioner::PositionedItem const &)
+ ?qt_metacast@QDeclarativeAbstractAnimation@@UAEPAXPBD@Z @ 1797 NONAME ABSENT ; void * QDeclarativeAbstractAnimation::qt_metacast(char const *)
+ ?setAdd@QDeclarativeBasePositioner@@QAEXPAVQDeclarativeTransition@@@Z @ 1798 NONAME ABSENT ; void QDeclarativeBasePositioner::setAdd(class QDeclarativeTransition *)
+ ?setCurrentTime@QDeclarativeAbstractAnimation@@QAEXH@Z @ 1799 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setCurrentTime(int)
+ ?attachedPropertiesId@QDeclarativeType@@QBEHXZ @ 1800 NONAME ABSENT ; int QDeclarativeType::attachedPropertiesId(void) const
+ ?positionX@QDeclarativeBasePositioner@@IAEXHABVPositionedItem@1@@Z @ 1801 NONAME ABSENT ; void QDeclarativeBasePositioner::positionX(int, class QDeclarativeBasePositioner::PositionedItem const &)
+ ?restart@QDeclarativeAbstractAnimation@@QAEXXZ @ 1802 NONAME ABSENT ; void QDeclarativeAbstractAnimation::restart(void)
+ ?itemChange@QDeclarativeBasePositioner@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 1803 NONAME ABSENT ; class QVariant QDeclarativeBasePositioner::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &)
+ ??0QDeclarativeAbstractAnimation@@IAE@AAVQDeclarativeAbstractAnimationPrivate@@PAVQObject@@@Z @ 1804 NONAME ABSENT ; QDeclarativeAbstractAnimation::QDeclarativeAbstractAnimation(class QDeclarativeAbstractAnimationPrivate &, class QObject *)
+ ?resume@QDeclarativeAbstractAnimation@@QAEXXZ @ 1805 NONAME ABSENT ; void QDeclarativeAbstractAnimation::resume(void)
+ ?runningChanged@QDeclarativeTimer@@IAEXXZ @ 1806 NONAME ABSENT ; void QDeclarativeTimer::runningChanged(void)
+ ?ticked@QDeclarativeTimer@@AAEXXZ @ 1807 NONAME ABSENT ; void QDeclarativeTimer::ticked(void)
+ ?graphicsWidgetGeometryChanged@QDeclarativeBasePositioner@@IAEXXZ @ 1808 NONAME ABSENT ; void QDeclarativeBasePositioner::graphicsWidgetGeometryChanged(void)
+ ?trUtf8@QDeclarativeTimer@@SA?AVQString@@PBD0H@Z @ 1809 NONAME ABSENT ; class QString QDeclarativeTimer::trUtf8(char const *, char const *, int)
+ ??0QDeclarativeTimer@@QAE@PAVQObject@@@Z @ 1810 NONAME ABSENT ; QDeclarativeTimer::QDeclarativeTimer(class QObject *)
+ ?loops@QDeclarativeAbstractAnimation@@QBEHXZ @ 1811 NONAME ABSENT ; int QDeclarativeAbstractAnimation::loops(void) const
+ ?setTarget@QDeclarativeAbstractAnimation@@EAEXABVQDeclarativeProperty@@@Z @ 1812 NONAME ABSENT ; void QDeclarativeAbstractAnimation::setTarget(class QDeclarativeProperty const &)
+ ?alwaysRunToEnd@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1813 NONAME ABSENT ; bool QDeclarativeAbstractAnimation::alwaysRunToEnd(void) const
+ ?tr@QDeclarativeTimer@@SA?AVQString@@PBD0H@Z @ 1814 NONAME ABSENT ; class QString QDeclarativeTimer::tr(char const *, char const *, int)
+ ?status@QDeclarativeDebugService@@QBE?AW4Status@1@XZ @ 1815 NONAME ABSENT ; enum QDeclarativeDebugService::Status QDeclarativeDebugService::status(void) const
+ ?intervalChanged@QDeclarativeTimer@@IAEXXZ @ 1816 NONAME ABSENT ; void QDeclarativeTimer::intervalChanged(void)
+ ?isPaused@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1817 NONAME ABSENT ; bool QDeclarativeAbstractAnimation::isPaused(void) const
+ ?getStaticMetaObject@QDeclarativeAbstractAnimation@@SAABUQMetaObject@@XZ @ 1818 NONAME ABSENT ; struct QMetaObject const & QDeclarativeAbstractAnimation::getStaticMetaObject(void)
+ ?group@QDeclarativeAbstractAnimation@@QBEPAVQDeclarativeAnimationGroup@@XZ @ 1819 NONAME ABSENT ; class QDeclarativeAnimationGroup * QDeclarativeAbstractAnimation::group(void) const
+ ?classBegin@QDeclarativeTimer@@MAEXXZ @ 1820 NONAME ABSENT ; void QDeclarativeTimer::classBegin(void)
+ ?restart@QDeclarativeTimer@@QAEXXZ @ 1821 NONAME ABSENT ; void QDeclarativeTimer::restart(void)
+ ?move@QDeclarativeBasePositioner@@QBEPAVQDeclarativeTransition@@XZ @ 1822 NONAME ABSENT ; class QDeclarativeTransition * QDeclarativeBasePositioner::move(void) const
+ ?spacingChanged@QDeclarativeBasePositioner@@IAEXXZ @ 1823 NONAME ABSENT ; void QDeclarativeBasePositioner::spacingChanged(void)
+ ?qt_metacast@QDeclarativeBasePositioner@@UAEPAXPBD@Z @ 1824 NONAME ABSENT ; void * QDeclarativeBasePositioner::qt_metacast(char const *)
+ ??1QDeclarativeTimer@@UAE@XZ @ 1825 NONAME ABSENT ; QDeclarativeTimer::~QDeclarativeTimer(void)
+ ?getStaticMetaObject@QDeclarativeTimer@@SAABUQMetaObject@@XZ @ 1826 NONAME ABSENT ; struct QMetaObject const & QDeclarativeTimer::getStaticMetaObject(void)
+ ?tr@QDeclarativeBasePositioner@@SA?AVQString@@PBD0H@Z @ 1827 NONAME ABSENT ; class QString QDeclarativeBasePositioner::tr(char const *, char const *, int)
+ ??1QDeclarativeBasePositioner@@UAE@XZ @ 1828 NONAME ABSENT ; QDeclarativeBasePositioner::~QDeclarativeBasePositioner(void)
+ ?moveChanged@QDeclarativeBasePositioner@@IAEXXZ @ 1829 NONAME ABSENT ; void QDeclarativeBasePositioner::moveChanged(void)
+ ?qt_metacast@QDeclarativeTimer@@UAEPAXPBD@Z @ 1830 NONAME ABSENT ; void * QDeclarativeTimer::qt_metacast(char const *)
+ ?metaObject@QDeclarativeBasePositioner@@UBEPBUQMetaObject@@XZ @ 1831 NONAME ABSENT ; struct QMetaObject const * QDeclarativeBasePositioner::metaObject(void) const
+ ?alwaysRunToEndChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1832 NONAME ABSENT ; void QDeclarativeAbstractAnimation::alwaysRunToEndChanged(bool)
+ ?triggeredOnStartChanged@QDeclarativeTimer@@IAEXXZ @ 1833 NONAME ABSENT ; void QDeclarativeTimer::triggeredOnStartChanged(void)
+ ?isRunning@QDeclarativeTimer@@QBE_NXZ @ 1834 NONAME ABSENT ; bool QDeclarativeTimer::isRunning(void) const
+ ?update@QDeclarativeTimer@@AAEXXZ @ 1835 NONAME ABSENT ; void QDeclarativeTimer::update(void)
+ ?stop@QDeclarativeAbstractAnimation@@QAEXXZ @ 1836 NONAME ABSENT ; void QDeclarativeAbstractAnimation::stop(void)
+ ?addChanged@QDeclarativeBasePositioner@@IAEXXZ @ 1837 NONAME ABSENT ; void QDeclarativeBasePositioner::addChanged(void)
+ ?start@QDeclarativeAbstractAnimation@@QAEXXZ @ 1838 NONAME ABSENT ; void QDeclarativeAbstractAnimation::start(void)
+ ?qt_metacall@QDeclarativeAbstractAnimation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1839 NONAME ABSENT ; int QDeclarativeAbstractAnimation::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?enableDebugging@QDeclarativeDebugHelper@@SAXXZ @ 1840 NONAME ; void QDeclarativeDebugHelper::enableDebugging(void)
+ ?connect@QDeclarativePropertyPrivate@@SA_NPBVQObject@@H0HHPAH@Z @ 1841 NONAME ABSENT ; bool QDeclarativePropertyPrivate::connect(class QObject const *, int, class QObject const *, int, int, int *)
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 305952c..b4a5dfc 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -12890,70 +12890,12 @@ EXPORTS
?lastRightBearing@QFontEngine@@IAE?AUQFixed@@ABUQGlyphLayout@@_N@Z @ 12889 NONAME ; struct QFixed QFontEngine::lastRightBearing(struct QGlyphLayout const &, bool)
?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@PAVQGraphicsItem@@@Z @ 12890 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, class QGraphicsItem *)
?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12891 NONAME ; void QTapAndHoldGesture::setTimeout(int)
- ?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ; class QString QApplicationPrivate::qmljsDebugArguments
+ ?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ABSENT ; class QString QApplicationPrivate::qmljsDebugArguments
?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@PAVQGraphicsItem@@@Z @ 12893 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(class QGraphicsItem *) const
- ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12894 NONAME ; class QString QFont::lastResortFont(void) const
- ??0QApplicationPrivate@@QAE@AAHPAPADW4Type@QApplication@@H@Z @ 12895 NONAME ; QApplicationPrivate::QApplicationPrivate(int &, char * *, enum QApplication::Type, int)
- ??0QGlyphs@@QAE@ABV0@@Z @ 12896 NONAME ; QGlyphs::QGlyphs(class QGlyphs const &)
- ??0QGlyphs@@QAE@XZ @ 12897 NONAME ; QGlyphs::QGlyphs(void)
- ??1QGlyphs@@QAE@XZ @ 12898 NONAME ; QGlyphs::~QGlyphs(void)
- ??4QGlyphs@@QAEAAV0@ABV0@@Z @ 12899 NONAME ; class QGlyphs & QGlyphs::operator=(class QGlyphs const &)
- ??6@YA?AVQDebug@@V0@PBVQSymbianEvent@@@Z @ 12900 NONAME ; class QDebug operator<<(class QDebug, class QSymbianEvent const *)
- ??8QGlyphs@@QBE_NABV0@@Z @ 12901 NONAME ; bool QGlyphs::operator==(class QGlyphs const &) const
- ??9QGlyphs@@QBE_NABV0@@Z @ 12902 NONAME ; bool QGlyphs::operator!=(class QGlyphs const &) const
- ??HQGlyphs@@ABE?AV0@ABV0@@Z @ 12903 NONAME ; class QGlyphs QGlyphs::operator+(class QGlyphs const &) const
- ??MQItemSelectionRange@@QBE_NABV0@@Z @ 12904 NONAME ; bool QItemSelectionRange::operator<(class QItemSelectionRange const &) const
- ??YQGlyphs@@AAEAAV0@ABV0@@Z @ 12905 NONAME ; class QGlyphs & QGlyphs::operator+=(class QGlyphs const &)
- ?alphaRGBMapForGlyph@QFontEngine@@UAE?AVQImage@@IUQFixed@@HABVQTransform@@@Z @ 12906 NONAME ; class QImage QFontEngine::alphaRGBMapForGlyph(unsigned int, struct QFixed, int, class QTransform const &)
- ?buddy@QAbstractProxyModel@@UBE?AVQModelIndex@@ABV2@@Z @ 12907 NONAME ; class QModelIndex QAbstractProxyModel::buddy(class QModelIndex const &) const
- ?calculateSubPixelPositionCount@QTextureGlyphCache@@IBEHI@Z @ 12908 NONAME ; int QTextureGlyphCache::calculateSubPixelPositionCount(unsigned int) const
- ?canFetchMore@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 12909 NONAME ; bool QAbstractProxyModel::canFetchMore(class QModelIndex const &) const
- ?clear@QGlyphs@@QAEXXZ @ 12910 NONAME ; void QGlyphs::clear(void)
- ?clipBoundingRect@QPainter@@QBE?AVQRectF@@XZ @ 12911 NONAME ; class QRectF QPainter::clipBoundingRect(void) const
- ?convertToPostscriptFontFamilyName@QFontEngine@@SA?AVQByteArray@@ABV2@@Z @ 12912 NONAME ; class QByteArray QFontEngine::convertToPostscriptFontFamilyName(class QByteArray const &)
- ?createExplicitFont@QFontEngine@@UBE?AVQFont@@XZ @ 12913 NONAME ; class QFont QFontEngine::createExplicitFont(void) const
- ?createExplicitFontWithName@QFontEngine@@IBE?AVQFont@@ABVQString@@@Z @ 12914 NONAME ; class QFont QFontEngine::createExplicitFontWithName(class QString const &) const
- ?detach@QGlyphs@@AAEXXZ @ 12915 NONAME ; void QGlyphs::detach(void)
- ?drawGlyphs@QPainter@@QAEXABVQPointF@@ABVQGlyphs@@@Z @ 12916 NONAME ; void QPainter::drawGlyphs(class QPointF const &, class QGlyphs const &)
- ?fetchMore@QAbstractProxyModel@@UAEXABVQModelIndex@@@Z @ 12917 NONAME ; void QAbstractProxyModel::fetchMore(class QModelIndex const &)
- ?fill@QImage@@QAEXABVQColor@@@Z @ 12918 NONAME ; void QImage::fill(class QColor const &)
- ?fill@QImage@@QAEXW4GlobalColor@Qt@@@Z @ 12919 NONAME ; void QImage::fill(enum Qt::GlobalColor)
- ?fillInPendingGlyphs@QTextureGlyphCache@@QAEXXZ @ 12920 NONAME ; void QTextureGlyphCache::fillInPendingGlyphs(void)
- ?fillTexture@QImageTextureGlyphCache@@UAEXABUCoord@QTextureGlyphCache@@IUQFixed@@@Z @ 12921 NONAME ; void QImageTextureGlyphCache::fillTexture(struct QTextureGlyphCache::Coord const &, unsigned int, struct QFixed)
- ?font@QGlyphs@@QBE?AVQFont@@XZ @ 12922 NONAME ; class QFont QGlyphs::font(void) const
- ?get@QFontPrivate@@SAPAV1@ABVQFont@@@Z @ 12923 NONAME ; class QFontPrivate * QFontPrivate::get(class QFont const &)
- ?glyphIndexes@QGlyphs@@QBE?AV?$QVector@I@@XZ @ 12924 NONAME ; class QVector<unsigned int> QGlyphs::glyphIndexes(void) const
- ?glyphs@QTextFragment@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 12925 NONAME ; class QList<class QGlyphs> QTextFragment::glyphs(void) const
- ?glyphs@QTextLayout@@QBE?AV?$QList@VQGlyphs@@@@XZ @ 12926 NONAME ; class QList<class QGlyphs> QTextLayout::glyphs(void) const
- ?glyphs@QTextLine@@ABE?AV?$QList@VQGlyphs@@@@HH@Z @ 12927 NONAME ; class QList<class QGlyphs> QTextLine::glyphs(int, int) const
- ?hasChildren@QAbstractProxyModel@@UBE_NABVQModelIndex@@@Z @ 12928 NONAME ; bool QAbstractProxyModel::hasChildren(class QModelIndex const &) const
- ?hasHeightForWidth@QWidgetPrivate@@UBE_NXZ @ 12929 NONAME ; bool QWidgetPrivate::hasHeightForWidth(void) const
- ?hasWidthForHeight@QSizePolicy@@QBE_NXZ @ 12930 NONAME ; bool QSizePolicy::hasWidthForHeight(void) const
- ?heightForWidth@QTabWidget@@UBEHH@Z @ 12931 NONAME ; int QTabWidget::heightForWidth(int) const
- ?inFontUcs4@QFontMetrics@@QBE_NI@Z @ 12932 NONAME ; bool QFontMetrics::inFontUcs4(unsigned int) const
- ?inFontUcs4@QFontMetricsF@@QBE_NI@Z @ 12933 NONAME ; bool QFontMetricsF::inFontUcs4(unsigned int) const
- ?maxTextureHeight@QTextureGlyphCache@@UBEHXZ @ 12934 NONAME ; int QTextureGlyphCache::maxTextureHeight(void) const
- ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12935 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const
- ?mimeData@QAbstractProxyModel@@UBEPAVQMimeData@@ABV?$QList@VQModelIndex@@@@@Z @ 12936 NONAME ; class QMimeData * QAbstractProxyModel::mimeData(class QList<class QModelIndex> const &) const
- ?mimeTypes@QAbstractProxyModel@@UBE?AVQStringList@@XZ @ 12937 NONAME ; class QStringList QAbstractProxyModel::mimeTypes(void) const
- ?minimumSizeHint@QCheckBox@@UBE?AVQSize@@XZ @ 12938 NONAME ; class QSize QCheckBox::minimumSizeHint(void) const
- ?minimumSizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 12939 NONAME ; class QSize QRadioButton::minimumSizeHint(void) const
- ?numberPrefix@QTextListFormat@@QBE?AVQString@@XZ @ 12940 NONAME ; class QString QTextListFormat::numberPrefix(void) const
- ?numberSuffix@QTextListFormat@@QBE?AVQString@@XZ @ 12941 NONAME ; class QString QTextListFormat::numberSuffix(void) const
- ?positions@QGlyphs@@QBE?AV?$QVector@VQPointF@@@@XZ @ 12942 NONAME ; class QVector<class QPointF> QGlyphs::positions(void) const
- ?removeItem@QGraphicsGridLayout@@QAEXPAVQGraphicsLayoutItem@@@Z @ 12943 NONAME ; void QGraphicsGridLayout::removeItem(class QGraphicsLayoutItem *)
- ?resizeCache@QTextureGlyphCache@@QAEXHH@Z @ 12944 NONAME ; void QTextureGlyphCache::resizeCache(int, int)
- ?setFont@QGlyphs@@QAEXABVQFont@@@Z @ 12945 NONAME ; void QGlyphs::setFont(class QFont const &)
- ?setGlyphIndexes@QGlyphs@@QAEXABV?$QVector@I@@@Z @ 12946 NONAME ; void QGlyphs::setGlyphIndexes(class QVector<unsigned int> const &)
- ?setItemData@QAbstractProxyModel@@UAE_NABVQModelIndex@@ABV?$QMap@HVQVariant@@@@@Z @ 12947 NONAME ; bool QAbstractProxyModel::setItemData(class QModelIndex const &, class QMap<int, class QVariant> const &)
- ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 12948 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &)
- ?setNumberSuffix@QTextListFormat@@QAEXABVQString@@@Z @ 12949 NONAME ; void QTextListFormat::setNumberSuffix(class QString const &)
- ?setPositions@QGlyphs@@QAEXABV?$QVector@VQPointF@@@@@Z @ 12950 NONAME ; void QGlyphs::setPositions(class QVector<class QPointF> const &)
- ?setWidthForHeight@QSizePolicy@@QAEX_N@Z @ 12951 NONAME ; void QSizePolicy::setWidthForHeight(bool)
- ?sort@QAbstractProxyModel@@UAEXHW4SortOrder@Qt@@@Z @ 12952 NONAME ; void QAbstractProxyModel::sort(int, enum Qt::SortOrder)
- ?span@QAbstractProxyModel@@UBE?AVQSize@@ABVQModelIndex@@@Z @ 12953 NONAME ; class QSize QAbstractProxyModel::span(class QModelIndex const &) const
- ?subPixelPositionForX@QTextureGlyphCache@@QBE?AUQFixed@@U2@@Z @ 12954 NONAME ; struct QFixed QTextureGlyphCache::subPixelPositionForX(struct QFixed) const
- ?supportedDropActions@QAbstractProxyModel@@UBE?AV?$QFlags@W4DropAction@Qt@@@@XZ @ 12955 NONAME ; class QFlags<enum Qt::DropAction> QAbstractProxyModel::supportedDropActions(void) const
- ?supportsSubPixelPositions@QFontEngine@@UBE_NXZ @ 12956 NONAME ; bool QFontEngine::supportsSubPixelPositions(void) const
- ?textureMapForGlyph@QTextureGlyphCache@@QBE?AVQImage@@IUQFixed@@@Z @ 12957 NONAME ; class QImage QTextureGlyphCache::textureMapForGlyph(unsigned int, struct QFixed) const
+ ?maxTextureHeight@QTextureGlyphCache@@UBEHXZ @ 12894 NONAME ; int QTextureGlyphCache::maxTextureHeight(void) const
+ ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12895 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const
+ ?qmljs_debug_arguments@QApplicationPrivate@@2VQString@@A @ 12896 NONAME ; class QString QApplicationPrivate::qmljs_debug_arguments
+ ?qmljsDebugArgumentsString@QApplicationPrivate@@SA?AVQString@@XZ @ 12897 NONAME ; class QString QApplicationPrivate::qmljsDebugArgumentsString(void)
+ ?convertToPostscriptFontFamilyName@QFontEngine@@SA?AVQByteArray@@ABV2@@Z @ 12898 NONAME ; class QByteArray QFontEngine::convertToPostscriptFontFamilyName(class QByteArray const &)
+ ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12899 NONAME ; class QString QFont::lastResortFont(void) const
diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def
index a67725e..87b9c7f 100644
--- a/src/s60installs/bwins/QtOpenVGu.def
+++ b/src/s60installs/bwins/QtOpenVGu.def
@@ -175,4 +175,5 @@ EXPORTS
?createPixmapForImage@QVGPixmapData@@IAEXAAVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@_N@Z @ 174 NONAME ; void QVGPixmapData::createPixmapForImage(class QImage &, class QFlags<enum Qt::ImageConversionFlag>, bool)
?fromData@QVGPixmapData@@UAE_NPBEIPBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 175 NONAME ; bool QVGPixmapData::fromData(unsigned char const *, unsigned int, char const *, class QFlags<enum Qt::ImageConversionFlag>)
?fromImageReader@QVGPixmapData@@UAEXPAVQImageReader@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 176 NONAME ; void QVGPixmapData::fromImageReader(class QImageReader *, class QFlags<enum Qt::ImageConversionFlag>)
+ ?canVgWritePixels@QVGPaintEngine@@ABE_NABVQImage@@@Z @ 177 NONAME ; bool QVGPaintEngine::canVgWritePixels(class QImage const &) const
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index ab2c5e5..3864914 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -3712,51 +3712,6 @@ EXPORTS
_ZltRK13QElapsedTimerS1_ @ 3711 NONAME
_ZrsR11QDataStreamR12QEasingCurve @ 3712 NONAME
_Z26qt_symbian_SetupThreadHeapiR24SStdEpocThreadCreateInfo @ 3713 NONAME
- _ZN11QThreadPool11waitForDoneEi @ 3714 NONAME
- _ZN12QSystemError8toStringEv @ 3715 NONAME
- _ZN13QSharedMemory12setNativeKeyERK7QString @ 3716 NONAME
- _ZN16QCoreApplicationC1ERiPPci @ 3717 NONAME
- _ZN16QCoreApplicationC2ERiPPci @ 3718 NONAME
- _ZN23QCoreApplicationPrivate19app_compile_versionE @ 3719 NONAME DATA 4
- _ZN23QCoreApplicationPrivateC1ERiPPcj @ 3720 NONAME
- _ZN23QCoreApplicationPrivateC2ERiPPcj @ 3721 NONAME
- _ZN6QMutex12lockInternalEv @ 3722 NONAME
- _ZN6QMutex14unlockInternalEv @ 3723 NONAME
- _ZN7QObject10disconnectEPKS_RK11QMetaMethodS1_S4_ @ 3724 NONAME
- _ZN7QObject7connectEPKS_RK11QMetaMethodS1_S4_N2Qt14ConnectionTypeE @ 3725 NONAME
- _ZN9QFileInfoC1EP16QFileInfoPrivate @ 3726 NONAME
- _ZN9QFileInfoC2EP16QFileInfoPrivate @ 3727 NONAME
- _ZNK10QStringRef10startsWithE13QLatin1StringN2Qt15CaseSensitivityE @ 3728 NONAME
- _ZNK10QStringRef10startsWithE5QCharN2Qt15CaseSensitivityE @ 3729 NONAME
- _ZNK10QStringRef10startsWithERK7QStringN2Qt15CaseSensitivityE @ 3730 NONAME
- _ZNK10QStringRef10startsWithERKS_N2Qt15CaseSensitivityE @ 3731 NONAME
- _ZNK10QStringRef11lastIndexOfE13QLatin1StringiN2Qt15CaseSensitivityE @ 3732 NONAME
- _ZNK10QStringRef11lastIndexOfE5QChariN2Qt15CaseSensitivityE @ 3733 NONAME
- _ZNK10QStringRef11lastIndexOfERK7QStringiN2Qt15CaseSensitivityE @ 3734 NONAME
- _ZNK10QStringRef11lastIndexOfERKS_iN2Qt15CaseSensitivityE @ 3735 NONAME
- _ZNK10QStringRef11toLocal8BitEv @ 3736 NONAME
- _ZNK10QStringRef5countE5QCharN2Qt15CaseSensitivityE @ 3737 NONAME
- _ZNK10QStringRef5countERK7QStringN2Qt15CaseSensitivityE @ 3738 NONAME
- _ZNK10QStringRef5countERKS_N2Qt15CaseSensitivityE @ 3739 NONAME
- _ZNK10QStringRef6toUcs4Ev @ 3740 NONAME
- _ZNK10QStringRef6toUtf8Ev @ 3741 NONAME
- _ZNK10QStringRef7indexOfE13QLatin1StringiN2Qt15CaseSensitivityE @ 3742 NONAME
- _ZNK10QStringRef7indexOfE5QChariN2Qt15CaseSensitivityE @ 3743 NONAME
- _ZNK10QStringRef7indexOfERK7QStringiN2Qt15CaseSensitivityE @ 3744 NONAME
- _ZNK10QStringRef7indexOfERKS_iN2Qt15CaseSensitivityE @ 3745 NONAME
- _ZNK10QStringRef7toAsciiEv @ 3746 NONAME
- _ZNK10QStringRef8endsWithE13QLatin1StringN2Qt15CaseSensitivityE @ 3747 NONAME
- _ZNK10QStringRef8endsWithE5QCharN2Qt15CaseSensitivityE @ 3748 NONAME
- _ZNK10QStringRef8endsWithERK7QStringN2Qt15CaseSensitivityE @ 3749 NONAME
- _ZNK10QStringRef8endsWithERKS_N2Qt15CaseSensitivityE @ 3750 NONAME
- _ZNK10QStringRef8toLatin1Ev @ 3751 NONAME
- _ZNK11QMetaObject4castEPK7QObject @ 3752 NONAME
- _ZNK13QSharedMemory9nativeKeyEv @ 3753 NONAME
- _ZNK4QUrl11isLocalFileEv @ 3754 NONAME
- _ZNK7QObject17senderSignalIndexEv @ 3755 NONAME
- _ZNK7QString10startsWithERK10QStringRefN2Qt15CaseSensitivityE @ 3756 NONAME
- _ZNK7QString11lastIndexOfERK10QStringRefiN2Qt15CaseSensitivityE @ 3757 NONAME
- _ZNK7QString5countERK10QStringRefN2Qt15CaseSensitivityE @ 3758 NONAME
- _ZNK7QString7indexOfERK10QStringRefiN2Qt15CaseSensitivityE @ 3759 NONAME
- _ZNK7QString8endsWithERK10QStringRefN2Qt15CaseSensitivityE @ 3760 NONAME
+ _ZN24QAbstractDeclarativeData17objectNameChangedE @ 3714 NONAME DATA 4
+ _ZN23QEventDispatcherSymbian36queueDeferredActiveObjectsCompletionEv @ 3715 NONAME
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index c0b43ac..1f69061 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -7,36 +7,36 @@ EXPORTS
_Z7qmlInfoPK7QObjectRK17QDeclarativeError @ 6 NONAME
_Z7qmlInfoPK7QObjectRK5QListI17QDeclarativeErrorE @ 7 NONAME
_Z9qmlEnginePK7QObject @ 8 NONAME
- _ZN15QDeclarativePen10penChangedEv @ 9 NONAME
- _ZN15QDeclarativePen11qt_metacallEN11QMetaObject4CallEiPPv @ 10 NONAME
- _ZN15QDeclarativePen11qt_metacastEPKc @ 11 NONAME
- _ZN15QDeclarativePen16staticMetaObjectE @ 12 NONAME DATA 16
- _ZN15QDeclarativePen19getStaticMetaObjectEv @ 13 NONAME
- _ZN15QDeclarativePen8setColorERK6QColor @ 14 NONAME
- _ZN15QDeclarativePen8setWidthEi @ 15 NONAME
- _ZN15QPacketAutoSendC1EP15QPacketProtocol @ 16 NONAME
- _ZN15QPacketAutoSendC2EP15QPacketProtocol @ 17 NONAME
- _ZN15QPacketAutoSendD0Ev @ 18 NONAME
- _ZN15QPacketAutoSendD1Ev @ 19 NONAME
- _ZN15QPacketAutoSendD2Ev @ 20 NONAME
- _ZN15QPacketProtocol11qt_metacallEN11QMetaObject4CallEiPPv @ 21 NONAME
- _ZN15QPacketProtocol11qt_metacastEPKc @ 22 NONAME
- _ZN15QPacketProtocol13invalidPacketEv @ 23 NONAME
- _ZN15QPacketProtocol13packetWrittenEv @ 24 NONAME
- _ZN15QPacketProtocol16staticMetaObjectE @ 25 NONAME DATA 16
- _ZN15QPacketProtocol19getStaticMetaObjectEv @ 26 NONAME
- _ZN15QPacketProtocol20setMaximumPacketSizeEi @ 27 NONAME
- _ZN15QPacketProtocol4readEv @ 28 NONAME
- _ZN15QPacketProtocol4sendERK7QPacket @ 29 NONAME
- _ZN15QPacketProtocol4sendEv @ 30 NONAME
- _ZN15QPacketProtocol5clearEv @ 31 NONAME
- _ZN15QPacketProtocol6deviceEv @ 32 NONAME
- _ZN15QPacketProtocol9readyReadEv @ 33 NONAME
- _ZN15QPacketProtocolC1EP9QIODeviceP7QObject @ 34 NONAME
- _ZN15QPacketProtocolC2EP9QIODeviceP7QObject @ 35 NONAME
- _ZN15QPacketProtocolD0Ev @ 36 NONAME
- _ZN15QPacketProtocolD1Ev @ 37 NONAME
- _ZN15QPacketProtocolD2Ev @ 38 NONAME
+ _ZN15QDeclarativePen10penChangedEv @ 9 NONAME ABSENT
+ _ZN15QDeclarativePen11qt_metacallEN11QMetaObject4CallEiPPv @ 10 NONAME ABSENT
+ _ZN15QDeclarativePen11qt_metacastEPKc @ 11 NONAME ABSENT
+ _ZN15QDeclarativePen16staticMetaObjectE @ 12 NONAME DATA 16 ABSENT
+ _ZN15QDeclarativePen19getStaticMetaObjectEv @ 13 NONAME ABSENT
+ _ZN15QDeclarativePen8setColorERK6QColor @ 14 NONAME ABSENT
+ _ZN15QDeclarativePen8setWidthEi @ 15 NONAME ABSENT
+ _ZN15QPacketAutoSendC1EP15QPacketProtocol @ 16 NONAME ABSENT
+ _ZN15QPacketAutoSendC2EP15QPacketProtocol @ 17 NONAME ABSENT
+ _ZN15QPacketAutoSendD0Ev @ 18 NONAME ABSENT
+ _ZN15QPacketAutoSendD1Ev @ 19 NONAME ABSENT
+ _ZN15QPacketAutoSendD2Ev @ 20 NONAME ABSENT
+ _ZN15QPacketProtocol11qt_metacallEN11QMetaObject4CallEiPPv @ 21 NONAME ABSENT
+ _ZN15QPacketProtocol11qt_metacastEPKc @ 22 NONAME ABSENT
+ _ZN15QPacketProtocol13invalidPacketEv @ 23 NONAME ABSENT
+ _ZN15QPacketProtocol13packetWrittenEv @ 24 NONAME ABSENT
+ _ZN15QPacketProtocol16staticMetaObjectE @ 25 NONAME DATA 16 ABSENT
+ _ZN15QPacketProtocol19getStaticMetaObjectEv @ 26 NONAME ABSENT
+ _ZN15QPacketProtocol20setMaximumPacketSizeEi @ 27 NONAME ABSENT
+ _ZN15QPacketProtocol4readEv @ 28 NONAME ABSENT
+ _ZN15QPacketProtocol4sendERK7QPacket @ 29 NONAME ABSENT
+ _ZN15QPacketProtocol4sendEv @ 30 NONAME ABSENT
+ _ZN15QPacketProtocol5clearEv @ 31 NONAME ABSENT
+ _ZN15QPacketProtocol6deviceEv @ 32 NONAME ABSENT
+ _ZN15QPacketProtocol9readyReadEv @ 33 NONAME ABSENT
+ _ZN15QPacketProtocolC1EP9QIODeviceP7QObject @ 34 NONAME ABSENT
+ _ZN15QPacketProtocolC2EP9QIODeviceP7QObject @ 35 NONAME ABSENT
+ _ZN15QPacketProtocolD0Ev @ 36 NONAME ABSENT
+ _ZN15QPacketProtocolD1Ev @ 37 NONAME ABSENT
+ _ZN15QPacketProtocolD2Ev @ 38 NONAME ABSENT
_ZN16QDeclarativeInfoC1EP23QDeclarativeInfoPrivate @ 39 NONAME
_ZN16QDeclarativeInfoC1ERKS_ @ 40 NONAME
_ZN16QDeclarativeInfoC2EP23QDeclarativeInfoPrivate @ 41 NONAME
@@ -93,48 +93,48 @@ EXPORTS
_ZN16QDeclarativeItemD0Ev @ 92 NONAME
_ZN16QDeclarativeItemD1Ev @ 93 NONAME
_ZN16QDeclarativeItemD2Ev @ 94 NONAME
- _ZN16QDeclarativeText11fontChangedERK5QFont @ 95 NONAME
- _ZN16QDeclarativeText11qt_metacallEN11QMetaObject4CallEiPPv @ 96 NONAME
- _ZN16QDeclarativeText11qt_metacastEPKc @ 97 NONAME
- _ZN16QDeclarativeText11setWrapModeENS_8WrapModeE @ 98 NONAME
- _ZN16QDeclarativeText11textChangedERK7QString @ 99 NONAME
- _ZN16QDeclarativeText12colorChangedERK6QColor @ 100 NONAME
- _ZN16QDeclarativeText12setElideModeENS_13TextElideModeE @ 101 NONAME
- _ZN16QDeclarativeText12styleChangedENS_9TextStyleE @ 102 NONAME
- _ZN16QDeclarativeText13linkActivatedERK7QString @ 103 NONAME
- _ZN16QDeclarativeText13setStyleColorERK6QColor @ 104 NONAME
- _ZN16QDeclarativeText13setTextFormatENS_10TextFormatE @ 105 NONAME
- _ZN16QDeclarativeText15geometryChangedERK6QRectFS2_ @ 106 NONAME
- _ZN16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 107 NONAME
- _ZN16QDeclarativeText15wrapModeChangedEv @ 108 NONAME
- _ZN16QDeclarativeText16elideModeChangedENS_13TextElideModeE @ 109 NONAME
- _ZN16QDeclarativeText16staticMetaObjectE @ 110 NONAME DATA 16
- _ZN16QDeclarativeText17componentCompleteEv @ 111 NONAME
- _ZN16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 112 NONAME
- _ZN16QDeclarativeText17styleColorChangedERK6QColor @ 113 NONAME
- _ZN16QDeclarativeText17textFormatChangedENS_10TextFormatE @ 114 NONAME
- _ZN16QDeclarativeText18paintedSizeChangedEv @ 115 NONAME
- _ZN16QDeclarativeText19getStaticMetaObjectEv @ 116 NONAME
- _ZN16QDeclarativeText24verticalAlignmentChangedENS_10VAlignmentE @ 117 NONAME
- _ZN16QDeclarativeText26horizontalAlignmentChangedENS_10HAlignmentE @ 118 NONAME
- _ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 119 NONAME
- _ZN16QDeclarativeText7setFontERK5QFont @ 120 NONAME
- _ZN16QDeclarativeText7setTextERK7QString @ 121 NONAME
- _ZN16QDeclarativeText8setColorERK6QColor @ 122 NONAME
- _ZN16QDeclarativeText8setStyleENS_9TextStyleE @ 123 NONAME
- _ZN16QDeclarativeText9setHAlignENS_10HAlignmentE @ 124 NONAME
- _ZN16QDeclarativeText9setVAlignENS_10VAlignmentE @ 125 NONAME
- _ZN16QDeclarativeTextC1EP16QDeclarativeItem @ 126 NONAME
- _ZN16QDeclarativeTextC2EP16QDeclarativeItem @ 127 NONAME
- _ZN16QDeclarativeTextD0Ev @ 128 NONAME
- _ZN16QDeclarativeTextD1Ev @ 129 NONAME
- _ZN16QDeclarativeTextD2Ev @ 130 NONAME
- _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate12RegisterTypeE @ 131 NONAME
- _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 132 NONAME
- _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate12RegisterTypeE @ 133 NONAME
- _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 134 NONAME
- _ZN16QDeclarativeTypeD1Ev @ 135 NONAME
- _ZN16QDeclarativeTypeD2Ev @ 136 NONAME
+ _ZN16QDeclarativeText11fontChangedERK5QFont @ 95 NONAME ABSENT
+ _ZN16QDeclarativeText11qt_metacallEN11QMetaObject4CallEiPPv @ 96 NONAME ABSENT
+ _ZN16QDeclarativeText11qt_metacastEPKc @ 97 NONAME ABSENT
+ _ZN16QDeclarativeText11setWrapModeENS_8WrapModeE @ 98 NONAME ABSENT
+ _ZN16QDeclarativeText11textChangedERK7QString @ 99 NONAME ABSENT
+ _ZN16QDeclarativeText12colorChangedERK6QColor @ 100 NONAME ABSENT
+ _ZN16QDeclarativeText12setElideModeENS_13TextElideModeE @ 101 NONAME ABSENT
+ _ZN16QDeclarativeText12styleChangedENS_9TextStyleE @ 102 NONAME ABSENT
+ _ZN16QDeclarativeText13linkActivatedERK7QString @ 103 NONAME ABSENT
+ _ZN16QDeclarativeText13setStyleColorERK6QColor @ 104 NONAME ABSENT
+ _ZN16QDeclarativeText13setTextFormatENS_10TextFormatE @ 105 NONAME ABSENT
+ _ZN16QDeclarativeText15geometryChangedERK6QRectFS2_ @ 106 NONAME ABSENT
+ _ZN16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 107 NONAME ABSENT
+ _ZN16QDeclarativeText15wrapModeChangedEv @ 108 NONAME ABSENT
+ _ZN16QDeclarativeText16elideModeChangedENS_13TextElideModeE @ 109 NONAME ABSENT
+ _ZN16QDeclarativeText16staticMetaObjectE @ 110 NONAME DATA 16 ABSENT
+ _ZN16QDeclarativeText17componentCompleteEv @ 111 NONAME ABSENT
+ _ZN16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 112 NONAME ABSENT
+ _ZN16QDeclarativeText17styleColorChangedERK6QColor @ 113 NONAME ABSENT
+ _ZN16QDeclarativeText17textFormatChangedENS_10TextFormatE @ 114 NONAME ABSENT
+ _ZN16QDeclarativeText18paintedSizeChangedEv @ 115 NONAME ABSENT
+ _ZN16QDeclarativeText19getStaticMetaObjectEv @ 116 NONAME ABSENT
+ _ZN16QDeclarativeText24verticalAlignmentChangedENS_10VAlignmentE @ 117 NONAME ABSENT
+ _ZN16QDeclarativeText26horizontalAlignmentChangedENS_10HAlignmentE @ 118 NONAME ABSENT
+ _ZN16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 119 NONAME ABSENT
+ _ZN16QDeclarativeText7setFontERK5QFont @ 120 NONAME ABSENT
+ _ZN16QDeclarativeText7setTextERK7QString @ 121 NONAME ABSENT
+ _ZN16QDeclarativeText8setColorERK6QColor @ 122 NONAME ABSENT
+ _ZN16QDeclarativeText8setStyleENS_9TextStyleE @ 123 NONAME ABSENT
+ _ZN16QDeclarativeText9setHAlignENS_10HAlignmentE @ 124 NONAME ABSENT
+ _ZN16QDeclarativeText9setVAlignENS_10VAlignmentE @ 125 NONAME ABSENT
+ _ZN16QDeclarativeTextC1EP16QDeclarativeItem @ 126 NONAME ABSENT
+ _ZN16QDeclarativeTextC2EP16QDeclarativeItem @ 127 NONAME ABSENT
+ _ZN16QDeclarativeTextD0Ev @ 128 NONAME ABSENT
+ _ZN16QDeclarativeTextD1Ev @ 129 NONAME ABSENT
+ _ZN16QDeclarativeTextD2Ev @ 130 NONAME ABSENT
+ _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate12RegisterTypeE @ 131 NONAME ABSENT
+ _ZN16QDeclarativeTypeC1EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 132 NONAME ABSENT
+ _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate12RegisterTypeE @ 133 NONAME ABSENT
+ _ZN16QDeclarativeTypeC2EiRKN19QDeclarativePrivate17RegisterInterfaceE @ 134 NONAME ABSENT
+ _ZN16QDeclarativeTypeD1Ev @ 135 NONAME ABSENT
+ _ZN16QDeclarativeTypeD2Ev @ 136 NONAME ABSENT
_ZN16QDeclarativeView10paintEventEP11QPaintEvent @ 137 NONAME
_ZN16QDeclarativeView10timerEventEP11QTimerEvent @ 138 NONAME
_ZN16QDeclarativeView11eventFilterEP7QObjectP6QEvent @ 139 NONAME
@@ -156,9 +156,9 @@ EXPORTS
_ZN16QDeclarativeViewD0Ev @ 155 NONAME
_ZN16QDeclarativeViewD1Ev @ 156 NONAME
_ZN16QDeclarativeViewD2Ev @ 157 NONAME
- _ZN16QMetaEnumBuilder6addKeyERK10QByteArrayi @ 158 NONAME
- _ZN16QMetaEnumBuilder9removeKeyEi @ 159 NONAME
- _ZN16QMetaEnumBuilder9setIsFlagEb @ 160 NONAME
+ _ZN16QMetaEnumBuilder6addKeyERK10QByteArrayi @ 158 NONAME ABSENT
+ _ZN16QMetaEnumBuilder9removeKeyEi @ 159 NONAME ABSENT
+ _ZN16QMetaEnumBuilder9setIsFlagEb @ 160 NONAME ABSENT
_ZN17QDeclarativeError14setDescriptionERK7QString @ 161 NONAME
_ZN17QDeclarativeError6setUrlERK4QUrl @ 162 NONAME
_ZN17QDeclarativeError7setLineEi @ 163 NONAME
@@ -188,13 +188,13 @@ EXPORTS
_ZN17QDeclarativeStateD1Ev @ 187 NONAME
_ZN17QDeclarativeStateD2Ev @ 188 NONAME
_ZN17QDeclarativeStatelsEP26QDeclarativeStateOperation @ 189 NONAME
- _ZN18QDeclarativeAction17deleteFromBindingEv @ 190 NONAME
- _ZN18QDeclarativeActionC1EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 191 NONAME
- _ZN18QDeclarativeActionC1EP7QObjectRK7QStringRK8QVariant @ 192 NONAME
- _ZN18QDeclarativeActionC1Ev @ 193 NONAME
- _ZN18QDeclarativeActionC2EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 194 NONAME
- _ZN18QDeclarativeActionC2EP7QObjectRK7QStringRK8QVariant @ 195 NONAME
- _ZN18QDeclarativeActionC2Ev @ 196 NONAME
+ _ZN18QDeclarativeAction17deleteFromBindingEv @ 190 NONAME ABSENT
+ _ZN18QDeclarativeActionC1EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 191 NONAME ABSENT
+ _ZN18QDeclarativeActionC1EP7QObjectRK7QStringRK8QVariant @ 192 NONAME ABSENT
+ _ZN18QDeclarativeActionC1Ev @ 193 NONAME ABSENT
+ _ZN18QDeclarativeActionC2EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 194 NONAME ABSENT
+ _ZN18QDeclarativeActionC2EP7QObjectRK7QStringRK8QVariant @ 195 NONAME ABSENT
+ _ZN18QDeclarativeActionC2Ev @ 196 NONAME ABSENT
_ZN18QDeclarativeEngine10setBaseUrlERK4QUrl @ 197 NONAME
_ZN18QDeclarativeEngine11qt_metacallEN11QMetaObject4CallEiPPv @ 198 NONAME
_ZN18QDeclarativeEngine11qt_metacastEPKc @ 199 NONAME
@@ -254,124 +254,124 @@ EXPORTS
_ZN18QDeclarativePixmapC2Ev @ 253 NONAME
_ZN18QDeclarativePixmapD1Ev @ 254 NONAME
_ZN18QDeclarativePixmapD2Ev @ 255 NONAME
- _ZN18QMetaMethodBuilder13setAttributesEi @ 256 NONAME
- _ZN18QMetaMethodBuilder13setReturnTypeERK10QByteArray @ 257 NONAME
- _ZN18QMetaMethodBuilder17setParameterNamesERK5QListI10QByteArrayE @ 258 NONAME
- _ZN18QMetaMethodBuilder6setTagERK10QByteArray @ 259 NONAME
- _ZN18QMetaMethodBuilder9setAccessEN11QMetaMethod6AccessE @ 260 NONAME
- _ZN18QMetaObjectBuilder11addPropertyERK10QByteArrayS2_i @ 261 NONAME
- _ZN18QMetaObjectBuilder11addPropertyERK13QMetaProperty @ 262 NONAME
- _ZN18QMetaObjectBuilder11deserializeER11QDataStreamRK4QMapI10QByteArrayPK11QMetaObjectE @ 263 NONAME
- _ZN18QMetaObjectBuilder11indexOfSlotERK10QByteArray @ 264 NONAME
- _ZN18QMetaObjectBuilder12addClassInfoERK10QByteArrayS2_ @ 265 NONAME
- _ZN18QMetaObjectBuilder12removeMethodEi @ 266 NONAME
- _ZN18QMetaObjectBuilder12setClassNameERK10QByteArray @ 267 NONAME
- _ZN18QMetaObjectBuilder13addEnumeratorERK10QByteArray @ 268 NONAME
- _ZN18QMetaObjectBuilder13addEnumeratorERK9QMetaEnum @ 269 NONAME
- _ZN18QMetaObjectBuilder13addMetaObjectEPK11QMetaObject6QFlagsINS_9AddMemberEE @ 270 NONAME
- _ZN18QMetaObjectBuilder13indexOfMethodERK10QByteArray @ 271 NONAME
- _ZN18QMetaObjectBuilder13indexOfSignalERK10QByteArray @ 272 NONAME
- _ZN18QMetaObjectBuilder13setSuperClassEPK11QMetaObject @ 273 NONAME
- _ZN18QMetaObjectBuilder14addConstructorERK10QByteArray @ 274 NONAME
- _ZN18QMetaObjectBuilder14addConstructorERK11QMetaMethod @ 275 NONAME
- _ZN18QMetaObjectBuilder14removePropertyEi @ 276 NONAME
- _ZN18QMetaObjectBuilder15indexOfPropertyERK10QByteArray @ 277 NONAME
- _ZN18QMetaObjectBuilder15removeClassInfoEi @ 278 NONAME
- _ZN18QMetaObjectBuilder16indexOfClassInfoERK10QByteArray @ 279 NONAME
- _ZN18QMetaObjectBuilder16removeEnumeratorEi @ 280 NONAME
- _ZN18QMetaObjectBuilder17indexOfEnumeratorERK10QByteArray @ 281 NONAME
- _ZN18QMetaObjectBuilder17removeConstructorEi @ 282 NONAME
- _ZN18QMetaObjectBuilder18indexOfConstructorERK10QByteArray @ 283 NONAME
- _ZN18QMetaObjectBuilder19fromRelocatableDataEP11QMetaObjectPKS0_RK10QByteArray @ 284 NONAME
- _ZN18QMetaObjectBuilder20addRelatedMetaObjectERKPFRK11QMetaObjectvE @ 285 NONAME
- _ZN18QMetaObjectBuilder23removeRelatedMetaObjectEi @ 286 NONAME
- _ZN18QMetaObjectBuilder25setStaticMetacallFunctionEPFiN11QMetaObject4CallEiPPvE @ 287 NONAME
- _ZN18QMetaObjectBuilder7addSlotERK10QByteArray @ 288 NONAME
- _ZN18QMetaObjectBuilder8setFlagsE6QFlagsINS_14MetaObjectFlagEE @ 289 NONAME
- _ZN18QMetaObjectBuilder9addMethodERK10QByteArray @ 290 NONAME
- _ZN18QMetaObjectBuilder9addMethodERK10QByteArrayS2_ @ 291 NONAME
- _ZN18QMetaObjectBuilder9addMethodERK11QMetaMethod @ 292 NONAME
- _ZN18QMetaObjectBuilder9addSignalERK10QByteArray @ 293 NONAME
- _ZN18QMetaObjectBuilderC1EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 294 NONAME
- _ZN18QMetaObjectBuilderC1Ev @ 295 NONAME
- _ZN18QMetaObjectBuilderC2EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 296 NONAME
- _ZN18QMetaObjectBuilderC2Ev @ 297 NONAME
- _ZN18QMetaObjectBuilderD0Ev @ 298 NONAME
- _ZN18QMetaObjectBuilderD1Ev @ 299 NONAME
- _ZN18QMetaObjectBuilderD2Ev @ 300 NONAME
- _ZN19QDeclarativeAnchors10classBeginEv @ 301 NONAME
- _ZN19QDeclarativeAnchors10resetRightEv @ 302 NONAME
- _ZN19QDeclarativeAnchors10setMarginsEf @ 303 NONAME
- _ZN19QDeclarativeAnchors10topChangedEv @ 304 NONAME
- _ZN19QDeclarativeAnchors11fillChangedEv @ 305 NONAME
- _ZN19QDeclarativeAnchors11leftChangedEv @ 306 NONAME
- _ZN19QDeclarativeAnchors11qt_metacallEN11QMetaObject4CallEiPPv @ 307 NONAME
- _ZN19QDeclarativeAnchors11qt_metacastEPKc @ 308 NONAME
- _ZN19QDeclarativeAnchors11resetBottomEv @ 309 NONAME
- _ZN19QDeclarativeAnchors11setBaselineERK22QDeclarativeAnchorLine @ 310 NONAME
- _ZN19QDeclarativeAnchors11setCenterInEP15QGraphicsObject @ 311 NONAME
- _ZN19QDeclarativeAnchors12rightChangedEv @ 312 NONAME
- _ZN19QDeclarativeAnchors12setTopMarginEf @ 313 NONAME
- _ZN19QDeclarativeAnchors13bottomChangedEv @ 314 NONAME
- _ZN19QDeclarativeAnchors13resetBaselineEv @ 315 NONAME
- _ZN19QDeclarativeAnchors13resetCenterInEv @ 316 NONAME
- _ZN19QDeclarativeAnchors13setLeftMarginEf @ 317 NONAME
- _ZN19QDeclarativeAnchors14marginsChangedEv @ 318 NONAME
- _ZN19QDeclarativeAnchors14setRightMarginEf @ 319 NONAME
- _ZN19QDeclarativeAnchors15baselineChangedEv @ 320 NONAME
- _ZN19QDeclarativeAnchors15centerInChangedEv @ 321 NONAME
- _ZN19QDeclarativeAnchors15setBottomMarginEf @ 322 NONAME
- _ZN19QDeclarativeAnchors16staticMetaObjectE @ 323 NONAME DATA 16
- _ZN19QDeclarativeAnchors16topMarginChangedEv @ 324 NONAME
- _ZN19QDeclarativeAnchors17componentCompleteEv @ 325 NONAME
- _ZN19QDeclarativeAnchors17leftMarginChangedEv @ 326 NONAME
- _ZN19QDeclarativeAnchors17setBaselineOffsetEf @ 327 NONAME
- _ZN19QDeclarativeAnchors17setVerticalCenterERK22QDeclarativeAnchorLine @ 328 NONAME
- _ZN19QDeclarativeAnchors18rightMarginChangedEv @ 329 NONAME
- _ZN19QDeclarativeAnchors19bottomMarginChangedEv @ 330 NONAME
- _ZN19QDeclarativeAnchors19getStaticMetaObjectEv @ 331 NONAME
- _ZN19QDeclarativeAnchors19resetVerticalCenterEv @ 332 NONAME
- _ZN19QDeclarativeAnchors19setHorizontalCenterERK22QDeclarativeAnchorLine @ 333 NONAME
- _ZN19QDeclarativeAnchors21baselineOffsetChangedEv @ 334 NONAME
- _ZN19QDeclarativeAnchors21resetHorizontalCenterEv @ 335 NONAME
- _ZN19QDeclarativeAnchors21verticalCenterChangedEv @ 336 NONAME
- _ZN19QDeclarativeAnchors23horizontalCenterChangedEv @ 337 NONAME
- _ZN19QDeclarativeAnchors23setVerticalCenterOffsetEf @ 338 NONAME
- _ZN19QDeclarativeAnchors25setHorizontalCenterOffsetEf @ 339 NONAME
- _ZN19QDeclarativeAnchors27verticalCenterOffsetChangedEv @ 340 NONAME
- _ZN19QDeclarativeAnchors29horizontalCenterOffsetChangedEv @ 341 NONAME
- _ZN19QDeclarativeAnchors6setTopERK22QDeclarativeAnchorLine @ 342 NONAME
- _ZN19QDeclarativeAnchors7setFillEP15QGraphicsObject @ 343 NONAME
- _ZN19QDeclarativeAnchors7setLeftERK22QDeclarativeAnchorLine @ 344 NONAME
- _ZN19QDeclarativeAnchors8resetTopEv @ 345 NONAME
- _ZN19QDeclarativeAnchors8setRightERK22QDeclarativeAnchorLine @ 346 NONAME
- _ZN19QDeclarativeAnchors9resetFillEv @ 347 NONAME
- _ZN19QDeclarativeAnchors9resetLeftEv @ 348 NONAME
- _ZN19QDeclarativeAnchors9setBottomERK22QDeclarativeAnchorLine @ 349 NONAME
- _ZN19QDeclarativeAnchorsC1EP15QGraphicsObjectP7QObject @ 350 NONAME
- _ZN19QDeclarativeAnchorsC1EP7QObject @ 351 NONAME
- _ZN19QDeclarativeAnchorsC2EP15QGraphicsObjectP7QObject @ 352 NONAME
- _ZN19QDeclarativeAnchorsC2EP7QObject @ 353 NONAME
- _ZN19QDeclarativeAnchorsD0Ev @ 354 NONAME
- _ZN19QDeclarativeAnchorsD1Ev @ 355 NONAME
- _ZN19QDeclarativeAnchorsD2Ev @ 356 NONAME
- _ZN19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 357 NONAME
- _ZN19QDeclarativeBinding11qt_metacallEN11QMetaObject4CallEiPPv @ 358 NONAME
- _ZN19QDeclarativeBinding11qt_metacastEPKc @ 359 NONAME
- _ZN19QDeclarativeBinding13propertyIndexEv @ 360 NONAME
- _ZN19QDeclarativeBinding16staticMetaObjectE @ 361 NONAME DATA 16
- _ZN19QDeclarativeBinding19getStaticMetaObjectEv @ 362 NONAME
- _ZN19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 363 NONAME
- _ZN19QDeclarativeBinding9setTargetERK20QDeclarativeProperty @ 364 NONAME
- _ZN19QDeclarativeBindingC1EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 365 NONAME
- _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 366 NONAME
- _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 367 NONAME
- _ZN19QDeclarativeBindingC2EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 368 NONAME
- _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 369 NONAME
- _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 370 NONAME
- _ZN19QDeclarativeBindingD0Ev @ 371 NONAME
- _ZN19QDeclarativeBindingD1Ev @ 372 NONAME
- _ZN19QDeclarativeBindingD2Ev @ 373 NONAME
+ _ZN18QMetaMethodBuilder13setAttributesEi @ 256 NONAME ABSENT
+ _ZN18QMetaMethodBuilder13setReturnTypeERK10QByteArray @ 257 NONAME ABSENT
+ _ZN18QMetaMethodBuilder17setParameterNamesERK5QListI10QByteArrayE @ 258 NONAME ABSENT
+ _ZN18QMetaMethodBuilder6setTagERK10QByteArray @ 259 NONAME ABSENT
+ _ZN18QMetaMethodBuilder9setAccessEN11QMetaMethod6AccessE @ 260 NONAME ABSENT
+ _ZN18QMetaObjectBuilder11addPropertyERK10QByteArrayS2_i @ 261 NONAME ABSENT
+ _ZN18QMetaObjectBuilder11addPropertyERK13QMetaProperty @ 262 NONAME ABSENT
+ _ZN18QMetaObjectBuilder11deserializeER11QDataStreamRK4QMapI10QByteArrayPK11QMetaObjectE @ 263 NONAME ABSENT
+ _ZN18QMetaObjectBuilder11indexOfSlotERK10QByteArray @ 264 NONAME ABSENT
+ _ZN18QMetaObjectBuilder12addClassInfoERK10QByteArrayS2_ @ 265 NONAME ABSENT
+ _ZN18QMetaObjectBuilder12removeMethodEi @ 266 NONAME ABSENT
+ _ZN18QMetaObjectBuilder12setClassNameERK10QByteArray @ 267 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13addEnumeratorERK10QByteArray @ 268 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13addEnumeratorERK9QMetaEnum @ 269 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13addMetaObjectEPK11QMetaObject6QFlagsINS_9AddMemberEE @ 270 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13indexOfMethodERK10QByteArray @ 271 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13indexOfSignalERK10QByteArray @ 272 NONAME ABSENT
+ _ZN18QMetaObjectBuilder13setSuperClassEPK11QMetaObject @ 273 NONAME ABSENT
+ _ZN18QMetaObjectBuilder14addConstructorERK10QByteArray @ 274 NONAME ABSENT
+ _ZN18QMetaObjectBuilder14addConstructorERK11QMetaMethod @ 275 NONAME ABSENT
+ _ZN18QMetaObjectBuilder14removePropertyEi @ 276 NONAME ABSENT
+ _ZN18QMetaObjectBuilder15indexOfPropertyERK10QByteArray @ 277 NONAME ABSENT
+ _ZN18QMetaObjectBuilder15removeClassInfoEi @ 278 NONAME ABSENT
+ _ZN18QMetaObjectBuilder16indexOfClassInfoERK10QByteArray @ 279 NONAME ABSENT
+ _ZN18QMetaObjectBuilder16removeEnumeratorEi @ 280 NONAME ABSENT
+ _ZN18QMetaObjectBuilder17indexOfEnumeratorERK10QByteArray @ 281 NONAME ABSENT
+ _ZN18QMetaObjectBuilder17removeConstructorEi @ 282 NONAME ABSENT
+ _ZN18QMetaObjectBuilder18indexOfConstructorERK10QByteArray @ 283 NONAME ABSENT
+ _ZN18QMetaObjectBuilder19fromRelocatableDataEP11QMetaObjectPKS0_RK10QByteArray @ 284 NONAME ABSENT
+ _ZN18QMetaObjectBuilder20addRelatedMetaObjectERKPFRK11QMetaObjectvE @ 285 NONAME ABSENT
+ _ZN18QMetaObjectBuilder23removeRelatedMetaObjectEi @ 286 NONAME ABSENT
+ _ZN18QMetaObjectBuilder25setStaticMetacallFunctionEPFiN11QMetaObject4CallEiPPvE @ 287 NONAME ABSENT
+ _ZN18QMetaObjectBuilder7addSlotERK10QByteArray @ 288 NONAME ABSENT
+ _ZN18QMetaObjectBuilder8setFlagsE6QFlagsINS_14MetaObjectFlagEE @ 289 NONAME ABSENT
+ _ZN18QMetaObjectBuilder9addMethodERK10QByteArray @ 290 NONAME ABSENT
+ _ZN18QMetaObjectBuilder9addMethodERK10QByteArrayS2_ @ 291 NONAME ABSENT
+ _ZN18QMetaObjectBuilder9addMethodERK11QMetaMethod @ 292 NONAME ABSENT
+ _ZN18QMetaObjectBuilder9addSignalERK10QByteArray @ 293 NONAME ABSENT
+ _ZN18QMetaObjectBuilderC1EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 294 NONAME ABSENT
+ _ZN18QMetaObjectBuilderC1Ev @ 295 NONAME ABSENT
+ _ZN18QMetaObjectBuilderC2EPK11QMetaObject6QFlagsINS_9AddMemberEE @ 296 NONAME ABSENT
+ _ZN18QMetaObjectBuilderC2Ev @ 297 NONAME ABSENT
+ _ZN18QMetaObjectBuilderD0Ev @ 298 NONAME ABSENT
+ _ZN18QMetaObjectBuilderD1Ev @ 299 NONAME ABSENT
+ _ZN18QMetaObjectBuilderD2Ev @ 300 NONAME ABSENT
+ _ZN19QDeclarativeAnchors10classBeginEv @ 301 NONAME ABSENT
+ _ZN19QDeclarativeAnchors10resetRightEv @ 302 NONAME ABSENT
+ _ZN19QDeclarativeAnchors10setMarginsEf @ 303 NONAME ABSENT
+ _ZN19QDeclarativeAnchors10topChangedEv @ 304 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11fillChangedEv @ 305 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11leftChangedEv @ 306 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11qt_metacallEN11QMetaObject4CallEiPPv @ 307 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11qt_metacastEPKc @ 308 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11resetBottomEv @ 309 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11setBaselineERK22QDeclarativeAnchorLine @ 310 NONAME ABSENT
+ _ZN19QDeclarativeAnchors11setCenterInEP15QGraphicsObject @ 311 NONAME ABSENT
+ _ZN19QDeclarativeAnchors12rightChangedEv @ 312 NONAME ABSENT
+ _ZN19QDeclarativeAnchors12setTopMarginEf @ 313 NONAME ABSENT
+ _ZN19QDeclarativeAnchors13bottomChangedEv @ 314 NONAME ABSENT
+ _ZN19QDeclarativeAnchors13resetBaselineEv @ 315 NONAME ABSENT
+ _ZN19QDeclarativeAnchors13resetCenterInEv @ 316 NONAME ABSENT
+ _ZN19QDeclarativeAnchors13setLeftMarginEf @ 317 NONAME ABSENT
+ _ZN19QDeclarativeAnchors14marginsChangedEv @ 318 NONAME ABSENT
+ _ZN19QDeclarativeAnchors14setRightMarginEf @ 319 NONAME ABSENT
+ _ZN19QDeclarativeAnchors15baselineChangedEv @ 320 NONAME ABSENT
+ _ZN19QDeclarativeAnchors15centerInChangedEv @ 321 NONAME ABSENT
+ _ZN19QDeclarativeAnchors15setBottomMarginEf @ 322 NONAME ABSENT
+ _ZN19QDeclarativeAnchors16staticMetaObjectE @ 323 NONAME DATA 16 ABSENT
+ _ZN19QDeclarativeAnchors16topMarginChangedEv @ 324 NONAME ABSENT
+ _ZN19QDeclarativeAnchors17componentCompleteEv @ 325 NONAME ABSENT
+ _ZN19QDeclarativeAnchors17leftMarginChangedEv @ 326 NONAME ABSENT
+ _ZN19QDeclarativeAnchors17setBaselineOffsetEf @ 327 NONAME ABSENT
+ _ZN19QDeclarativeAnchors17setVerticalCenterERK22QDeclarativeAnchorLine @ 328 NONAME ABSENT
+ _ZN19QDeclarativeAnchors18rightMarginChangedEv @ 329 NONAME ABSENT
+ _ZN19QDeclarativeAnchors19bottomMarginChangedEv @ 330 NONAME ABSENT
+ _ZN19QDeclarativeAnchors19getStaticMetaObjectEv @ 331 NONAME ABSENT
+ _ZN19QDeclarativeAnchors19resetVerticalCenterEv @ 332 NONAME ABSENT
+ _ZN19QDeclarativeAnchors19setHorizontalCenterERK22QDeclarativeAnchorLine @ 333 NONAME ABSENT
+ _ZN19QDeclarativeAnchors21baselineOffsetChangedEv @ 334 NONAME ABSENT
+ _ZN19QDeclarativeAnchors21resetHorizontalCenterEv @ 335 NONAME ABSENT
+ _ZN19QDeclarativeAnchors21verticalCenterChangedEv @ 336 NONAME ABSENT
+ _ZN19QDeclarativeAnchors23horizontalCenterChangedEv @ 337 NONAME ABSENT
+ _ZN19QDeclarativeAnchors23setVerticalCenterOffsetEf @ 338 NONAME ABSENT
+ _ZN19QDeclarativeAnchors25setHorizontalCenterOffsetEf @ 339 NONAME ABSENT
+ _ZN19QDeclarativeAnchors27verticalCenterOffsetChangedEv @ 340 NONAME ABSENT
+ _ZN19QDeclarativeAnchors29horizontalCenterOffsetChangedEv @ 341 NONAME ABSENT
+ _ZN19QDeclarativeAnchors6setTopERK22QDeclarativeAnchorLine @ 342 NONAME ABSENT
+ _ZN19QDeclarativeAnchors7setFillEP15QGraphicsObject @ 343 NONAME ABSENT
+ _ZN19QDeclarativeAnchors7setLeftERK22QDeclarativeAnchorLine @ 344 NONAME ABSENT
+ _ZN19QDeclarativeAnchors8resetTopEv @ 345 NONAME ABSENT
+ _ZN19QDeclarativeAnchors8setRightERK22QDeclarativeAnchorLine @ 346 NONAME ABSENT
+ _ZN19QDeclarativeAnchors9resetFillEv @ 347 NONAME ABSENT
+ _ZN19QDeclarativeAnchors9resetLeftEv @ 348 NONAME ABSENT
+ _ZN19QDeclarativeAnchors9setBottomERK22QDeclarativeAnchorLine @ 349 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsC1EP15QGraphicsObjectP7QObject @ 350 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsC1EP7QObject @ 351 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsC2EP15QGraphicsObjectP7QObject @ 352 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsC2EP7QObject @ 353 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsD0Ev @ 354 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsD1Ev @ 355 NONAME ABSENT
+ _ZN19QDeclarativeAnchorsD2Ev @ 356 NONAME ABSENT
+ _ZN19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 357 NONAME ABSENT
+ _ZN19QDeclarativeBinding11qt_metacallEN11QMetaObject4CallEiPPv @ 358 NONAME ABSENT
+ _ZN19QDeclarativeBinding11qt_metacastEPKc @ 359 NONAME ABSENT
+ _ZN19QDeclarativeBinding13propertyIndexEv @ 360 NONAME ABSENT
+ _ZN19QDeclarativeBinding16staticMetaObjectE @ 361 NONAME DATA 16 ABSENT
+ _ZN19QDeclarativeBinding19getStaticMetaObjectEv @ 362 NONAME ABSENT
+ _ZN19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 363 NONAME ABSENT
+ _ZN19QDeclarativeBinding9setTargetERK20QDeclarativeProperty @ 364 NONAME ABSENT
+ _ZN19QDeclarativeBindingC1EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 365 NONAME ABSENT
+ _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 366 NONAME ABSENT
+ _ZN19QDeclarativeBindingC1ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 367 NONAME ABSENT
+ _ZN19QDeclarativeBindingC2EPvP20QDeclarativeRefCountP7QObjectP23QDeclarativeContextDataRK7QStringiS4_ @ 368 NONAME ABSENT
+ _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP19QDeclarativeContextS4_ @ 369 NONAME ABSENT
+ _ZN19QDeclarativeBindingC2ERK7QStringP7QObjectP23QDeclarativeContextDataS4_ @ 370 NONAME ABSENT
+ _ZN19QDeclarativeBindingD0Ev @ 371 NONAME ABSENT
+ _ZN19QDeclarativeBindingD1Ev @ 372 NONAME ABSENT
+ _ZN19QDeclarativeBindingD2Ev @ 373 NONAME ABSENT
_ZN19QDeclarativeContext10setBaseUrlERK4QUrl @ 374 NONAME
_ZN19QDeclarativeContext11qt_metacallEN11QMetaObject4CallEiPPv @ 375 NONAME
_ZN19QDeclarativeContext11qt_metacastEPKc @ 376 NONAME
@@ -392,70 +392,70 @@ EXPORTS
_ZN19QDeclarativeContextD0Ev @ 391 NONAME
_ZN19QDeclarativeContextD1Ev @ 392 NONAME
_ZN19QDeclarativeContextD2Ev @ 393 NONAME
- _ZN19QDeclarativeDomListC1ERKS_ @ 394 NONAME
- _ZN19QDeclarativeDomListC1Ev @ 395 NONAME
- _ZN19QDeclarativeDomListC2ERKS_ @ 396 NONAME
- _ZN19QDeclarativeDomListC2Ev @ 397 NONAME
- _ZN19QDeclarativeDomListD1Ev @ 398 NONAME
- _ZN19QDeclarativeDomListD2Ev @ 399 NONAME
- _ZN19QDeclarativeDomListaSERKS_ @ 400 NONAME
+ _ZN19QDeclarativeDomListC1ERKS_ @ 394 NONAME ABSENT
+ _ZN19QDeclarativeDomListC1Ev @ 395 NONAME ABSENT
+ _ZN19QDeclarativeDomListC2ERKS_ @ 396 NONAME ABSENT
+ _ZN19QDeclarativeDomListC2Ev @ 397 NONAME ABSENT
+ _ZN19QDeclarativeDomListD1Ev @ 398 NONAME ABSENT
+ _ZN19QDeclarativeDomListD2Ev @ 399 NONAME ABSENT
+ _ZN19QDeclarativeDomListaSERKS_ @ 400 NONAME ABSENT
_ZN19QDeclarativePrivate11qmlregisterENS_16RegistrationTypeEPv @ 401 NONAME
_ZN19QDeclarativePrivate30qdeclarativeelement_destructorEP7QObject @ 402 NONAME
- _ZN19QListModelInterface10itemsMovedEiii @ 403 NONAME
- _ZN19QListModelInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 404 NONAME
- _ZN19QListModelInterface11qt_metacastEPKc @ 405 NONAME
- _ZN19QListModelInterface12itemsChangedEiiRK5QListIiE @ 406 NONAME
- _ZN19QListModelInterface12itemsRemovedEii @ 407 NONAME
- _ZN19QListModelInterface13itemsInsertedEii @ 408 NONAME
- _ZN19QListModelInterface16staticMetaObjectE @ 409 NONAME DATA 16
- _ZN19QListModelInterface19getStaticMetaObjectEv @ 410 NONAME
- _ZN20QDeclarativeBehavior10setEnabledEb @ 411 NONAME
- _ZN20QDeclarativeBehavior11qt_metacallEN11QMetaObject4CallEiPPv @ 412 NONAME
- _ZN20QDeclarativeBehavior11qt_metacastEPKc @ 413 NONAME
- _ZN20QDeclarativeBehavior12setAnimationEP29QDeclarativeAbstractAnimation @ 414 NONAME
- _ZN20QDeclarativeBehavior14enabledChangedEv @ 415 NONAME
- _ZN20QDeclarativeBehavior16staticMetaObjectE @ 416 NONAME DATA 16
- _ZN20QDeclarativeBehavior18componentFinalizedEv @ 417 NONAME
- _ZN20QDeclarativeBehavior19getStaticMetaObjectEv @ 418 NONAME
- _ZN20QDeclarativeBehavior23qtAnimationStateChangedEN18QAbstractAnimation5StateES1_ @ 419 NONAME
- _ZN20QDeclarativeBehavior5writeERK8QVariant @ 420 NONAME
- _ZN20QDeclarativeBehavior9animationEv @ 421 NONAME
- _ZN20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 422 NONAME
- _ZN20QDeclarativeBehaviorC1EP7QObject @ 423 NONAME
- _ZN20QDeclarativeBehaviorC2EP7QObject @ 424 NONAME
- _ZN20QDeclarativeBehaviorD0Ev @ 425 NONAME
- _ZN20QDeclarativeBehaviorD1Ev @ 426 NONAME
- _ZN20QDeclarativeBehaviorD2Ev @ 427 NONAME
- _ZN20QDeclarativeDomValueC1ERKS_ @ 428 NONAME
- _ZN20QDeclarativeDomValueC1Ev @ 429 NONAME
- _ZN20QDeclarativeDomValueC2ERKS_ @ 430 NONAME
- _ZN20QDeclarativeDomValueC2Ev @ 431 NONAME
- _ZN20QDeclarativeDomValueD1Ev @ 432 NONAME
- _ZN20QDeclarativeDomValueD2Ev @ 433 NONAME
- _ZN20QDeclarativeDomValueaSERKS_ @ 434 NONAME
- _ZN20QDeclarativeMetaType11isInterfaceEi @ 435 NONAME
- _ZN20QDeclarativeMetaType12interfaceIIdEi @ 436 NONAME
- _ZN20QDeclarativeMetaType12qmlTypeNamesEv @ 437 NONAME
- _ZN20QDeclarativeMetaType12typeCategoryEi @ 438 NONAME
- _ZN20QDeclarativeMetaType13defaultMethodEP7QObject @ 439 NONAME
- _ZN20QDeclarativeMetaType13defaultMethodEPK11QMetaObject @ 440 NONAME
- _ZN20QDeclarativeMetaType15defaultPropertyEP7QObject @ 441 NONAME
- _ZN20QDeclarativeMetaType15defaultPropertyEPK11QMetaObject @ 442 NONAME
- _ZN20QDeclarativeMetaType15parentFunctionsEv @ 443 NONAME
- _ZN20QDeclarativeMetaType21customStringConverterEi @ 444 NONAME
- _ZN20QDeclarativeMetaType24attachedPropertiesFuncIdEPK11QMetaObject @ 445 NONAME
- _ZN20QDeclarativeMetaType26attachedPropertiesFuncByIdEi @ 446 NONAME
- _ZN20QDeclarativeMetaType29registerCustomStringConverterEiPF8QVariantRK7QStringE @ 447 NONAME
- _ZN20QDeclarativeMetaType4copyEiPvPKv @ 448 NONAME
- _ZN20QDeclarativeMetaType6isListEi @ 449 NONAME
- _ZN20QDeclarativeMetaType7qmlTypeEPK11QMetaObject @ 450 NONAME
- _ZN20QDeclarativeMetaType7qmlTypeERK10QByteArrayii @ 451 NONAME
- _ZN20QDeclarativeMetaType7qmlTypeEi @ 452 NONAME
- _ZN20QDeclarativeMetaType8isModuleERK10QByteArrayii @ 453 NONAME
- _ZN20QDeclarativeMetaType8listTypeEi @ 454 NONAME
- _ZN20QDeclarativeMetaType8qmlTypesEv @ 455 NONAME
- _ZN20QDeclarativeMetaType9isQObjectEi @ 456 NONAME
- _ZN20QDeclarativeMetaType9toQObjectERK8QVariantPb @ 457 NONAME
+ _ZN19QListModelInterface10itemsMovedEiii @ 403 NONAME ABSENT
+ _ZN19QListModelInterface11qt_metacallEN11QMetaObject4CallEiPPv @ 404 NONAME ABSENT
+ _ZN19QListModelInterface11qt_metacastEPKc @ 405 NONAME ABSENT
+ _ZN19QListModelInterface12itemsChangedEiiRK5QListIiE @ 406 NONAME ABSENT
+ _ZN19QListModelInterface12itemsRemovedEii @ 407 NONAME ABSENT
+ _ZN19QListModelInterface13itemsInsertedEii @ 408 NONAME ABSENT
+ _ZN19QListModelInterface16staticMetaObjectE @ 409 NONAME DATA 16 ABSENT
+ _ZN19QListModelInterface19getStaticMetaObjectEv @ 410 NONAME ABSENT
+ _ZN20QDeclarativeBehavior10setEnabledEb @ 411 NONAME ABSENT
+ _ZN20QDeclarativeBehavior11qt_metacallEN11QMetaObject4CallEiPPv @ 412 NONAME ABSENT
+ _ZN20QDeclarativeBehavior11qt_metacastEPKc @ 413 NONAME ABSENT
+ _ZN20QDeclarativeBehavior12setAnimationEP29QDeclarativeAbstractAnimation @ 414 NONAME ABSENT
+ _ZN20QDeclarativeBehavior14enabledChangedEv @ 415 NONAME ABSENT
+ _ZN20QDeclarativeBehavior16staticMetaObjectE @ 416 NONAME DATA 16 ABSENT
+ _ZN20QDeclarativeBehavior18componentFinalizedEv @ 417 NONAME ABSENT
+ _ZN20QDeclarativeBehavior19getStaticMetaObjectEv @ 418 NONAME ABSENT
+ _ZN20QDeclarativeBehavior23qtAnimationStateChangedEN18QAbstractAnimation5StateES1_ @ 419 NONAME ABSENT
+ _ZN20QDeclarativeBehavior5writeERK8QVariant @ 420 NONAME ABSENT
+ _ZN20QDeclarativeBehavior9animationEv @ 421 NONAME ABSENT
+ _ZN20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 422 NONAME ABSENT
+ _ZN20QDeclarativeBehaviorC1EP7QObject @ 423 NONAME ABSENT
+ _ZN20QDeclarativeBehaviorC2EP7QObject @ 424 NONAME ABSENT
+ _ZN20QDeclarativeBehaviorD0Ev @ 425 NONAME ABSENT
+ _ZN20QDeclarativeBehaviorD1Ev @ 426 NONAME ABSENT
+ _ZN20QDeclarativeBehaviorD2Ev @ 427 NONAME ABSENT
+ _ZN20QDeclarativeDomValueC1ERKS_ @ 428 NONAME ABSENT
+ _ZN20QDeclarativeDomValueC1Ev @ 429 NONAME ABSENT
+ _ZN20QDeclarativeDomValueC2ERKS_ @ 430 NONAME ABSENT
+ _ZN20QDeclarativeDomValueC2Ev @ 431 NONAME ABSENT
+ _ZN20QDeclarativeDomValueD1Ev @ 432 NONAME ABSENT
+ _ZN20QDeclarativeDomValueD2Ev @ 433 NONAME ABSENT
+ _ZN20QDeclarativeDomValueaSERKS_ @ 434 NONAME ABSENT
+ _ZN20QDeclarativeMetaType11isInterfaceEi @ 435 NONAME ABSENT
+ _ZN20QDeclarativeMetaType12interfaceIIdEi @ 436 NONAME ABSENT
+ _ZN20QDeclarativeMetaType12qmlTypeNamesEv @ 437 NONAME ABSENT
+ _ZN20QDeclarativeMetaType12typeCategoryEi @ 438 NONAME ABSENT
+ _ZN20QDeclarativeMetaType13defaultMethodEP7QObject @ 439 NONAME ABSENT
+ _ZN20QDeclarativeMetaType13defaultMethodEPK11QMetaObject @ 440 NONAME ABSENT
+ _ZN20QDeclarativeMetaType15defaultPropertyEP7QObject @ 441 NONAME ABSENT
+ _ZN20QDeclarativeMetaType15defaultPropertyEPK11QMetaObject @ 442 NONAME ABSENT
+ _ZN20QDeclarativeMetaType15parentFunctionsEv @ 443 NONAME ABSENT
+ _ZN20QDeclarativeMetaType21customStringConverterEi @ 444 NONAME ABSENT
+ _ZN20QDeclarativeMetaType24attachedPropertiesFuncIdEPK11QMetaObject @ 445 NONAME ABSENT
+ _ZN20QDeclarativeMetaType26attachedPropertiesFuncByIdEi @ 446 NONAME ABSENT
+ _ZN20QDeclarativeMetaType29registerCustomStringConverterEiPF8QVariantRK7QStringE @ 447 NONAME ABSENT
+ _ZN20QDeclarativeMetaType4copyEiPvPKv @ 448 NONAME ABSENT
+ _ZN20QDeclarativeMetaType6isListEi @ 449 NONAME ABSENT
+ _ZN20QDeclarativeMetaType7qmlTypeEPK11QMetaObject @ 450 NONAME ABSENT
+ _ZN20QDeclarativeMetaType7qmlTypeERK10QByteArrayii @ 451 NONAME ABSENT
+ _ZN20QDeclarativeMetaType7qmlTypeEi @ 452 NONAME ABSENT
+ _ZN20QDeclarativeMetaType8isModuleERK10QByteArrayii @ 453 NONAME ABSENT
+ _ZN20QDeclarativeMetaType8listTypeEi @ 454 NONAME ABSENT
+ _ZN20QDeclarativeMetaType8qmlTypesEv @ 455 NONAME ABSENT
+ _ZN20QDeclarativeMetaType9isQObjectEi @ 456 NONAME ABSENT
+ _ZN20QDeclarativeMetaType9toQObjectERK8QVariantPb @ 457 NONAME ABSENT
_ZN20QDeclarativeProperty4readEP7QObjectRK7QString @ 458 NONAME
_ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP18QDeclarativeEngine @ 459 NONAME
_ZN20QDeclarativeProperty4readEP7QObjectRK7QStringP19QDeclarativeContext @ 460 NONAME
@@ -481,19 +481,19 @@ EXPORTS
_ZN20QDeclarativePropertyD1Ev @ 480 NONAME
_ZN20QDeclarativePropertyD2Ev @ 481 NONAME
_ZN20QDeclarativePropertyaSERKS_ @ 482 NONAME
- _ZN20QMetaPropertyBuilder10setDynamicEb @ 483 NONAME
- _ZN20QMetaPropertyBuilder11setEditableEb @ 484 NONAME
- _ZN20QMetaPropertyBuilder11setReadableEb @ 485 NONAME
- _ZN20QMetaPropertyBuilder11setWritableEb @ 486 NONAME
- _ZN20QMetaPropertyBuilder12setStdCppSetEb @ 487 NONAME
- _ZN20QMetaPropertyBuilder13setDesignableEb @ 488 NONAME
- _ZN20QMetaPropertyBuilder13setEnumOrFlagEb @ 489 NONAME
- _ZN20QMetaPropertyBuilder13setResettableEb @ 490 NONAME
- _ZN20QMetaPropertyBuilder13setScriptableEb @ 491 NONAME
- _ZN20QMetaPropertyBuilder15setNotifySignalERK18QMetaMethodBuilder @ 492 NONAME
- _ZN20QMetaPropertyBuilder18removeNotifySignalEv @ 493 NONAME
- _ZN20QMetaPropertyBuilder7setUserEb @ 494 NONAME
- _ZN20QMetaPropertyBuilder9setStoredEb @ 495 NONAME
+ _ZN20QMetaPropertyBuilder10setDynamicEb @ 483 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder11setEditableEb @ 484 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder11setReadableEb @ 485 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder11setWritableEb @ 486 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder12setStdCppSetEb @ 487 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder13setDesignableEb @ 488 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder13setEnumOrFlagEb @ 489 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder13setResettableEb @ 490 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder13setScriptableEb @ 491 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder15setNotifySignalERK18QMetaMethodBuilder @ 492 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder18removeNotifySignalEv @ 493 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder7setUserEb @ 494 NONAME ABSENT
+ _ZN20QMetaPropertyBuilder9setStoredEb @ 495 NONAME ABSENT
_ZN21QDeclarativeComponent11beginCreateEP19QDeclarativeContext @ 496 NONAME
_ZN21QDeclarativeComponent11qt_metacallEN11QMetaObject4CallEiPPv @ 497 NONAME
_ZN21QDeclarativeComponent11qt_metacastEPKc @ 498 NONAME
@@ -522,98 +522,98 @@ EXPORTS
_ZN21QDeclarativeComponentD0Ev @ 521 NONAME
_ZN21QDeclarativeComponentD1Ev @ 522 NONAME
_ZN21QDeclarativeComponentD2Ev @ 523 NONAME
- _ZN21QDeclarativeDomImportC1ERKS_ @ 524 NONAME
- _ZN21QDeclarativeDomImportC1Ev @ 525 NONAME
- _ZN21QDeclarativeDomImportC2ERKS_ @ 526 NONAME
- _ZN21QDeclarativeDomImportC2Ev @ 527 NONAME
- _ZN21QDeclarativeDomImportD1Ev @ 528 NONAME
- _ZN21QDeclarativeDomImportD2Ev @ 529 NONAME
- _ZN21QDeclarativeDomImportaSERKS_ @ 530 NONAME
- _ZN21QDeclarativeDomObjectC1ERKS_ @ 531 NONAME
- _ZN21QDeclarativeDomObjectC1Ev @ 532 NONAME
- _ZN21QDeclarativeDomObjectC2ERKS_ @ 533 NONAME
- _ZN21QDeclarativeDomObjectC2Ev @ 534 NONAME
- _ZN21QDeclarativeDomObjectD1Ev @ 535 NONAME
- _ZN21QDeclarativeDomObjectD2Ev @ 536 NONAME
- _ZN21QDeclarativeDomObjectaSERKS_ @ 537 NONAME
- _ZN21QDeclarativeListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 538 NONAME
- _ZN21QDeclarativeListModel11qt_metacastEPKc @ 539 NONAME
- _ZN21QDeclarativeListModel11setPropertyEiRK7QStringRK8QVariant @ 540 NONAME
- _ZN21QDeclarativeListModel12countChangedEv @ 541 NONAME
- _ZN21QDeclarativeListModel16staticMetaObjectE @ 542 NONAME DATA 16
- _ZN21QDeclarativeListModel19getStaticMetaObjectEv @ 543 NONAME
- _ZN21QDeclarativeListModel3setEiRK12QScriptValue @ 544 NONAME
- _ZN21QDeclarativeListModel4moveEiii @ 545 NONAME
- _ZN21QDeclarativeListModel4syncEv @ 546 NONAME
- _ZN21QDeclarativeListModel5agentEv @ 547 NONAME
- _ZN21QDeclarativeListModel5clearEv @ 548 NONAME
- _ZN21QDeclarativeListModel6appendERK12QScriptValue @ 549 NONAME
- _ZN21QDeclarativeListModel6insertEiRK12QScriptValue @ 550 NONAME
- _ZN21QDeclarativeListModel6removeEi @ 551 NONAME
- _ZN21QDeclarativeListModel7flattenEv @ 552 NONAME
- _ZN21QDeclarativeListModelC1EP7QObject @ 553 NONAME
+ _ZN21QDeclarativeDomImportC1ERKS_ @ 524 NONAME ABSENT
+ _ZN21QDeclarativeDomImportC1Ev @ 525 NONAME ABSENT
+ _ZN21QDeclarativeDomImportC2ERKS_ @ 526 NONAME ABSENT
+ _ZN21QDeclarativeDomImportC2Ev @ 527 NONAME ABSENT
+ _ZN21QDeclarativeDomImportD1Ev @ 528 NONAME ABSENT
+ _ZN21QDeclarativeDomImportD2Ev @ 529 NONAME ABSENT
+ _ZN21QDeclarativeDomImportaSERKS_ @ 530 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectC1ERKS_ @ 531 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectC1Ev @ 532 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectC2ERKS_ @ 533 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectC2Ev @ 534 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectD1Ev @ 535 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectD2Ev @ 536 NONAME ABSENT
+ _ZN21QDeclarativeDomObjectaSERKS_ @ 537 NONAME ABSENT
+ _ZN21QDeclarativeListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 538 NONAME ABSENT
+ _ZN21QDeclarativeListModel11qt_metacastEPKc @ 539 NONAME ABSENT
+ _ZN21QDeclarativeListModel11setPropertyEiRK7QStringRK8QVariant @ 540 NONAME ABSENT
+ _ZN21QDeclarativeListModel12countChangedEv @ 541 NONAME ABSENT
+ _ZN21QDeclarativeListModel16staticMetaObjectE @ 542 NONAME DATA 16 ABSENT
+ _ZN21QDeclarativeListModel19getStaticMetaObjectEv @ 543 NONAME ABSENT
+ _ZN21QDeclarativeListModel3setEiRK12QScriptValue @ 544 NONAME ABSENT
+ _ZN21QDeclarativeListModel4moveEiii @ 545 NONAME ABSENT
+ _ZN21QDeclarativeListModel4syncEv @ 546 NONAME ABSENT
+ _ZN21QDeclarativeListModel5agentEv @ 547 NONAME ABSENT
+ _ZN21QDeclarativeListModel5clearEv @ 548 NONAME ABSENT
+ _ZN21QDeclarativeListModel6appendERK12QScriptValue @ 549 NONAME ABSENT
+ _ZN21QDeclarativeListModel6insertEiRK12QScriptValue @ 550 NONAME ABSENT
+ _ZN21QDeclarativeListModel6removeEi @ 551 NONAME ABSENT
+ _ZN21QDeclarativeListModel7flattenEv @ 552 NONAME ABSENT
+ _ZN21QDeclarativeListModelC1EP7QObject @ 553 NONAME ABSENT
_ZN21QDeclarativeListModelC1EbP7QObject @ 554 NONAME ABSENT
- _ZN21QDeclarativeListModelC2EP7QObject @ 555 NONAME
+ _ZN21QDeclarativeListModelC2EP7QObject @ 555 NONAME ABSENT
_ZN21QDeclarativeListModelC2EbP7QObject @ 556 NONAME ABSENT
- _ZN21QDeclarativeListModelD0Ev @ 557 NONAME
- _ZN21QDeclarativeListModelD1Ev @ 558 NONAME
- _ZN21QDeclarativeListModelD2Ev @ 559 NONAME
- _ZN21QDeclarativeRectangle11qt_metacallEN11QMetaObject4CallEiPPv @ 560 NONAME
- _ZN21QDeclarativeRectangle11qt_metacastEPKc @ 561 NONAME
- _ZN21QDeclarativeRectangle11setGradientEP20QDeclarativeGradient @ 562 NONAME
- _ZN21QDeclarativeRectangle12colorChangedEv @ 563 NONAME
- _ZN21QDeclarativeRectangle13radiusChangedEv @ 564 NONAME
- _ZN21QDeclarativeRectangle16staticMetaObjectE @ 565 NONAME DATA 16
- _ZN21QDeclarativeRectangle19generateRoundedRectEv @ 566 NONAME
- _ZN21QDeclarativeRectangle19getStaticMetaObjectEv @ 567 NONAME
- _ZN21QDeclarativeRectangle20generateBorderedRectEv @ 568 NONAME
- _ZN21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 569 NONAME
- _ZN21QDeclarativeRectangle6borderEv @ 570 NONAME
- _ZN21QDeclarativeRectangle8doUpdateEv @ 571 NONAME
- _ZN21QDeclarativeRectangle8drawRectER8QPainter @ 572 NONAME
- _ZN21QDeclarativeRectangle8setColorERK6QColor @ 573 NONAME
- _ZN21QDeclarativeRectangle9setRadiusEf @ 574 NONAME
- _ZN21QDeclarativeRectangleC1EP16QDeclarativeItem @ 575 NONAME
- _ZN21QDeclarativeRectangleC2EP16QDeclarativeItem @ 576 NONAME
- _ZN21QDeclarativeScaleGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 577 NONAME
- _ZN21QDeclarativeScaleGrid11qt_metacastEPKc @ 578 NONAME
- _ZN21QDeclarativeScaleGrid13borderChangedEv @ 579 NONAME
- _ZN21QDeclarativeScaleGrid16staticMetaObjectE @ 580 NONAME DATA 16
- _ZN21QDeclarativeScaleGrid19getStaticMetaObjectEv @ 581 NONAME
- _ZN21QDeclarativeScaleGrid6setTopEi @ 582 NONAME
- _ZN21QDeclarativeScaleGrid7setLeftEi @ 583 NONAME
- _ZN21QDeclarativeScaleGrid8setRightEi @ 584 NONAME
- _ZN21QDeclarativeScaleGrid9setBottomEi @ 585 NONAME
- _ZN21QDeclarativeScaleGridC1EP7QObject @ 586 NONAME
- _ZN21QDeclarativeScaleGridC2EP7QObject @ 587 NONAME
- _ZN21QDeclarativeScaleGridD0Ev @ 588 NONAME
- _ZN21QDeclarativeScaleGridD1Ev @ 589 NONAME
- _ZN21QDeclarativeScaleGridD2Ev @ 590 NONAME
- _ZN21QDeclarativeValueType11qt_metacallEN11QMetaObject4CallEiPPv @ 591 NONAME
- _ZN21QDeclarativeValueType11qt_metacastEPKc @ 592 NONAME
- _ZN21QDeclarativeValueType16staticMetaObjectE @ 593 NONAME DATA 16
- _ZN21QDeclarativeValueType19getStaticMetaObjectEv @ 594 NONAME
- _ZN21QDeclarativeValueTypeC2EP7QObject @ 595 NONAME
- _ZN22QDeclarativeDebugQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 596 NONAME
- _ZN22QDeclarativeDebugQuery11qt_metacastEPKc @ 597 NONAME
- _ZN22QDeclarativeDebugQuery12stateChangedENS_5StateE @ 598 NONAME
- _ZN22QDeclarativeDebugQuery16staticMetaObjectE @ 599 NONAME DATA 16
- _ZN22QDeclarativeDebugQuery19getStaticMetaObjectEv @ 600 NONAME
- _ZN22QDeclarativeDebugQuery8setStateENS_5StateE @ 601 NONAME
- _ZN22QDeclarativeDebugQueryC1EP7QObject @ 602 NONAME
- _ZN22QDeclarativeDebugQueryC2EP7QObject @ 603 NONAME
- _ZN22QDeclarativeDebugWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 604 NONAME
- _ZN22QDeclarativeDebugWatch11qt_metacastEPKc @ 605 NONAME
- _ZN22QDeclarativeDebugWatch12stateChangedENS_5StateE @ 606 NONAME
- _ZN22QDeclarativeDebugWatch12valueChangedERK10QByteArrayRK8QVariant @ 607 NONAME
- _ZN22QDeclarativeDebugWatch16staticMetaObjectE @ 608 NONAME DATA 16
- _ZN22QDeclarativeDebugWatch19getStaticMetaObjectEv @ 609 NONAME
- _ZN22QDeclarativeDebugWatch8setStateENS_5StateE @ 610 NONAME
- _ZN22QDeclarativeDebugWatchC1EP7QObject @ 611 NONAME
- _ZN22QDeclarativeDebugWatchC2EP7QObject @ 612 NONAME
- _ZN22QDeclarativeDebugWatchD0Ev @ 613 NONAME
- _ZN22QDeclarativeDebugWatchD1Ev @ 614 NONAME
- _ZN22QDeclarativeDebugWatchD2Ev @ 615 NONAME
+ _ZN21QDeclarativeListModelD0Ev @ 557 NONAME ABSENT
+ _ZN21QDeclarativeListModelD1Ev @ 558 NONAME ABSENT
+ _ZN21QDeclarativeListModelD2Ev @ 559 NONAME ABSENT
+ _ZN21QDeclarativeRectangle11qt_metacallEN11QMetaObject4CallEiPPv @ 560 NONAME ABSENT
+ _ZN21QDeclarativeRectangle11qt_metacastEPKc @ 561 NONAME ABSENT
+ _ZN21QDeclarativeRectangle11setGradientEP20QDeclarativeGradient @ 562 NONAME ABSENT
+ _ZN21QDeclarativeRectangle12colorChangedEv @ 563 NONAME ABSENT
+ _ZN21QDeclarativeRectangle13radiusChangedEv @ 564 NONAME ABSENT
+ _ZN21QDeclarativeRectangle16staticMetaObjectE @ 565 NONAME DATA 16 ABSENT
+ _ZN21QDeclarativeRectangle19generateRoundedRectEv @ 566 NONAME ABSENT
+ _ZN21QDeclarativeRectangle19getStaticMetaObjectEv @ 567 NONAME ABSENT
+ _ZN21QDeclarativeRectangle20generateBorderedRectEv @ 568 NONAME ABSENT
+ _ZN21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 569 NONAME ABSENT
+ _ZN21QDeclarativeRectangle6borderEv @ 570 NONAME ABSENT
+ _ZN21QDeclarativeRectangle8doUpdateEv @ 571 NONAME ABSENT
+ _ZN21QDeclarativeRectangle8drawRectER8QPainter @ 572 NONAME ABSENT
+ _ZN21QDeclarativeRectangle8setColorERK6QColor @ 573 NONAME ABSENT
+ _ZN21QDeclarativeRectangle9setRadiusEf @ 574 NONAME ABSENT
+ _ZN21QDeclarativeRectangleC1EP16QDeclarativeItem @ 575 NONAME ABSENT
+ _ZN21QDeclarativeRectangleC2EP16QDeclarativeItem @ 576 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 577 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid11qt_metacastEPKc @ 578 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid13borderChangedEv @ 579 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid16staticMetaObjectE @ 580 NONAME DATA 16 ABSENT
+ _ZN21QDeclarativeScaleGrid19getStaticMetaObjectEv @ 581 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid6setTopEi @ 582 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid7setLeftEi @ 583 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid8setRightEi @ 584 NONAME ABSENT
+ _ZN21QDeclarativeScaleGrid9setBottomEi @ 585 NONAME ABSENT
+ _ZN21QDeclarativeScaleGridC1EP7QObject @ 586 NONAME ABSENT
+ _ZN21QDeclarativeScaleGridC2EP7QObject @ 587 NONAME ABSENT
+ _ZN21QDeclarativeScaleGridD0Ev @ 588 NONAME ABSENT
+ _ZN21QDeclarativeScaleGridD1Ev @ 589 NONAME ABSENT
+ _ZN21QDeclarativeScaleGridD2Ev @ 590 NONAME ABSENT
+ _ZN21QDeclarativeValueType11qt_metacallEN11QMetaObject4CallEiPPv @ 591 NONAME ABSENT
+ _ZN21QDeclarativeValueType11qt_metacastEPKc @ 592 NONAME ABSENT
+ _ZN21QDeclarativeValueType16staticMetaObjectE @ 593 NONAME DATA 16 ABSENT
+ _ZN21QDeclarativeValueType19getStaticMetaObjectEv @ 594 NONAME ABSENT
+ _ZN21QDeclarativeValueTypeC2EP7QObject @ 595 NONAME ABSENT
+ _ZN22QDeclarativeDebugQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 596 NONAME ABSENT
+ _ZN22QDeclarativeDebugQuery11qt_metacastEPKc @ 597 NONAME ABSENT
+ _ZN22QDeclarativeDebugQuery12stateChangedENS_5StateE @ 598 NONAME ABSENT
+ _ZN22QDeclarativeDebugQuery16staticMetaObjectE @ 599 NONAME DATA 16 ABSENT
+ _ZN22QDeclarativeDebugQuery19getStaticMetaObjectEv @ 600 NONAME ABSENT
+ _ZN22QDeclarativeDebugQuery8setStateENS_5StateE @ 601 NONAME ABSENT
+ _ZN22QDeclarativeDebugQueryC1EP7QObject @ 602 NONAME ABSENT
+ _ZN22QDeclarativeDebugQueryC2EP7QObject @ 603 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 604 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch11qt_metacastEPKc @ 605 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch12stateChangedENS_5StateE @ 606 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch12valueChangedERK10QByteArrayRK8QVariant @ 607 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch16staticMetaObjectE @ 608 NONAME DATA 16 ABSENT
+ _ZN22QDeclarativeDebugWatch19getStaticMetaObjectEv @ 609 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatch8setStateENS_5StateE @ 610 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatchC1EP7QObject @ 611 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatchC2EP7QObject @ 612 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatchD0Ev @ 613 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatchD1Ev @ 614 NONAME ABSENT
+ _ZN22QDeclarativeDebugWatchD2Ev @ 615 NONAME ABSENT
_ZN22QDeclarativeExpression10clearErrorEv @ 616 NONAME
_ZN22QDeclarativeExpression11qt_metacallEN11QMetaObject4CallEiPPv @ 617 NONAME
_ZN22QDeclarativeExpression11qt_metacastEPKc @ 618 NONAME
@@ -674,49 +674,49 @@ EXPORTS
_ZN22QDeclarativeTransitionD1Ev @ 673 NONAME
_ZN22QDeclarativeTransitionD2Ev @ 674 NONAME
_ZN23QDeclarativeDebugClient10setEnabledEb @ 675 NONAME ABSENT
- _ZN23QDeclarativeDebugClient11qt_metacallEN11QMetaObject4CallEiPPv @ 676 NONAME
- _ZN23QDeclarativeDebugClient11qt_metacastEPKc @ 677 NONAME
- _ZN23QDeclarativeDebugClient11sendMessageERK10QByteArray @ 678 NONAME
- _ZN23QDeclarativeDebugClient15messageReceivedERK10QByteArray @ 679 NONAME
- _ZN23QDeclarativeDebugClient16staticMetaObjectE @ 680 NONAME DATA 16
- _ZN23QDeclarativeDebugClient19getStaticMetaObjectEv @ 681 NONAME
- _ZN23QDeclarativeDebugClientC1ERK7QStringP27QDeclarativeDebugConnection @ 682 NONAME
- _ZN23QDeclarativeDebugClientC2ERK7QStringP27QDeclarativeDebugConnection @ 683 NONAME
- _ZN23QDeclarativeDomDocument4loadEP18QDeclarativeEngineRK10QByteArrayRK4QUrl @ 684 NONAME
- _ZN23QDeclarativeDomDocumentC1ERKS_ @ 685 NONAME
- _ZN23QDeclarativeDomDocumentC1Ev @ 686 NONAME
- _ZN23QDeclarativeDomDocumentC2ERKS_ @ 687 NONAME
- _ZN23QDeclarativeDomDocumentC2Ev @ 688 NONAME
- _ZN23QDeclarativeDomDocumentD1Ev @ 689 NONAME
- _ZN23QDeclarativeDomDocumentD2Ev @ 690 NONAME
- _ZN23QDeclarativeDomDocumentaSERKS_ @ 691 NONAME
- _ZN23QDeclarativeDomPropertyC1ERKS_ @ 692 NONAME
- _ZN23QDeclarativeDomPropertyC1Ev @ 693 NONAME
- _ZN23QDeclarativeDomPropertyC2ERKS_ @ 694 NONAME
- _ZN23QDeclarativeDomPropertyC2Ev @ 695 NONAME
- _ZN23QDeclarativeDomPropertyD1Ev @ 696 NONAME
- _ZN23QDeclarativeDomPropertyD2Ev @ 697 NONAME
- _ZN23QDeclarativeDomPropertyaSERKS_ @ 698 NONAME
- _ZN23QDeclarativeEngineDebug11qt_metacallEN11QMetaObject4CallEiPPv @ 699 NONAME
- _ZN23QDeclarativeEngineDebug11qt_metacastEPKc @ 700 NONAME
- _ZN23QDeclarativeEngineDebug11queryObjectERK32QDeclarativeDebugObjectReferenceP7QObject @ 701 NONAME
- _ZN23QDeclarativeEngineDebug11removeWatchEP22QDeclarativeDebugWatch @ 702 NONAME
- _ZN23QDeclarativeEngineDebug13setMethodBodyEiRK7QStringS2_ @ 703 NONAME
- _ZN23QDeclarativeEngineDebug16staticMetaObjectE @ 704 NONAME DATA 16
- _ZN23QDeclarativeEngineDebug17queryRootContextsERK32QDeclarativeDebugEngineReferenceP7QObject @ 705 NONAME
- _ZN23QDeclarativeEngineDebug19getStaticMetaObjectEv @ 706 NONAME
- _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantb @ 707 NONAME
- _ZN23QDeclarativeEngineDebug20queryObjectRecursiveERK32QDeclarativeDebugObjectReferenceP7QObject @ 708 NONAME
- _ZN23QDeclarativeEngineDebug21queryAvailableEnginesEP7QObject @ 709 NONAME
- _ZN23QDeclarativeEngineDebug21queryExpressionResultEiRK7QStringP7QObject @ 710 NONAME
- _ZN23QDeclarativeEngineDebug21resetBindingForObjectEiRK7QString @ 711 NONAME
- _ZN23QDeclarativeEngineDebug8addWatchERK30QDeclarativeDebugFileReferenceP7QObject @ 712 NONAME
- _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceP7QObject @ 713 NONAME
- _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceRK7QStringP7QObject @ 714 NONAME
- _ZN23QDeclarativeEngineDebug8addWatchERK33QDeclarativeDebugContextReferenceRK7QStringP7QObject @ 715 NONAME
- _ZN23QDeclarativeEngineDebug8addWatchERK34QDeclarativeDebugPropertyReferenceP7QObject @ 716 NONAME
- _ZN23QDeclarativeEngineDebugC1EP27QDeclarativeDebugConnectionP7QObject @ 717 NONAME
- _ZN23QDeclarativeEngineDebugC2EP27QDeclarativeDebugConnectionP7QObject @ 718 NONAME
+ _ZN23QDeclarativeDebugClient11qt_metacallEN11QMetaObject4CallEiPPv @ 676 NONAME ABSENT
+ _ZN23QDeclarativeDebugClient11qt_metacastEPKc @ 677 NONAME ABSENT
+ _ZN23QDeclarativeDebugClient11sendMessageERK10QByteArray @ 678 NONAME ABSENT
+ _ZN23QDeclarativeDebugClient15messageReceivedERK10QByteArray @ 679 NONAME ABSENT
+ _ZN23QDeclarativeDebugClient16staticMetaObjectE @ 680 NONAME DATA 16 ABSENT
+ _ZN23QDeclarativeDebugClient19getStaticMetaObjectEv @ 681 NONAME ABSENT
+ _ZN23QDeclarativeDebugClientC1ERK7QStringP27QDeclarativeDebugConnection @ 682 NONAME ABSENT
+ _ZN23QDeclarativeDebugClientC2ERK7QStringP27QDeclarativeDebugConnection @ 683 NONAME ABSENT
+ _ZN23QDeclarativeDomDocument4loadEP18QDeclarativeEngineRK10QByteArrayRK4QUrl @ 684 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentC1ERKS_ @ 685 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentC1Ev @ 686 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentC2ERKS_ @ 687 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentC2Ev @ 688 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentD1Ev @ 689 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentD2Ev @ 690 NONAME ABSENT
+ _ZN23QDeclarativeDomDocumentaSERKS_ @ 691 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyC1ERKS_ @ 692 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyC1Ev @ 693 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyC2ERKS_ @ 694 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyC2Ev @ 695 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyD1Ev @ 696 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyD2Ev @ 697 NONAME ABSENT
+ _ZN23QDeclarativeDomPropertyaSERKS_ @ 698 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug11qt_metacallEN11QMetaObject4CallEiPPv @ 699 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug11qt_metacastEPKc @ 700 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug11queryObjectERK32QDeclarativeDebugObjectReferenceP7QObject @ 701 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug11removeWatchEP22QDeclarativeDebugWatch @ 702 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug13setMethodBodyEiRK7QStringS2_ @ 703 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug16staticMetaObjectE @ 704 NONAME DATA 16 ABSENT
+ _ZN23QDeclarativeEngineDebug17queryRootContextsERK32QDeclarativeDebugEngineReferenceP7QObject @ 705 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug19getStaticMetaObjectEv @ 706 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug19setBindingForObjectEiRK7QStringRK8QVariantb @ 707 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug20queryObjectRecursiveERK32QDeclarativeDebugObjectReferenceP7QObject @ 708 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug21queryAvailableEnginesEP7QObject @ 709 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug21queryExpressionResultEiRK7QStringP7QObject @ 710 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug21resetBindingForObjectEiRK7QString @ 711 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug8addWatchERK30QDeclarativeDebugFileReferenceP7QObject @ 712 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceP7QObject @ 713 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug8addWatchERK32QDeclarativeDebugObjectReferenceRK7QStringP7QObject @ 714 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug8addWatchERK33QDeclarativeDebugContextReferenceRK7QStringP7QObject @ 715 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug8addWatchERK34QDeclarativeDebugPropertyReferenceP7QObject @ 716 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebugC1EP27QDeclarativeDebugConnectionP7QObject @ 717 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebugC2EP27QDeclarativeDebugConnectionP7QObject @ 718 NONAME ABSENT
_ZN23QDeclarativeItemPrivate10resetWidthEv @ 719 NONAME
_ZN23QDeclarativeItemPrivate11data_appendEP24QDeclarativeListPropertyI7QObjectEPS1_ @ 720 NONAME
_ZN23QDeclarativeItemPrivate11resetHeightEv @ 721 NONAME
@@ -761,27 +761,27 @@ EXPORTS
_ZN24QDeclarativeCustomParser5errorERK28QDeclarativeCustomParserNodeRK7QString @ 760 NONAME
_ZN24QDeclarativeCustomParser5errorERK32QDeclarativeCustomParserPropertyRK7QString @ 761 NONAME
_ZN24QDeclarativeCustomParser5errorERK7QString @ 762 NONAME
- _ZN24QDeclarativeDebugService11idForObjectEP7QObject @ 763 NONAME
- _ZN24QDeclarativeDebugService11objectForIdEi @ 764 NONAME
- _ZN24QDeclarativeDebugService11qt_metacallEN11QMetaObject4CallEiPPv @ 765 NONAME
- _ZN24QDeclarativeDebugService11qt_metacastEPKc @ 766 NONAME
- _ZN24QDeclarativeDebugService11sendMessageERK10QByteArray @ 767 NONAME
+ _ZN24QDeclarativeDebugService11idForObjectEP7QObject @ 763 NONAME ABSENT
+ _ZN24QDeclarativeDebugService11objectForIdEi @ 764 NONAME ABSENT
+ _ZN24QDeclarativeDebugService11qt_metacallEN11QMetaObject4CallEiPPv @ 765 NONAME ABSENT
+ _ZN24QDeclarativeDebugService11qt_metacastEPKc @ 766 NONAME ABSENT
+ _ZN24QDeclarativeDebugService11sendMessageERK10QByteArray @ 767 NONAME ABSENT
_ZN24QDeclarativeDebugService14enabledChangedEb @ 768 NONAME ABSENT
- _ZN24QDeclarativeDebugService14objectToStringEP7QObject @ 769 NONAME
- _ZN24QDeclarativeDebugService15messageReceivedERK10QByteArray @ 770 NONAME
- _ZN24QDeclarativeDebugService16staticMetaObjectE @ 771 NONAME DATA 16
- _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 772 NONAME
- _ZN24QDeclarativeDebugService18isDebuggingEnabledEv @ 773 NONAME
- _ZN24QDeclarativeDebugService19getStaticMetaObjectEv @ 774 NONAME
- _ZN24QDeclarativeDebugServiceC1ERK7QStringP7QObject @ 775 NONAME
- _ZN24QDeclarativeDebugServiceC2ERK7QStringP7QObject @ 776 NONAME
- _ZN24QDeclarativeDomComponentC1ERKS_ @ 777 NONAME
- _ZN24QDeclarativeDomComponentC1Ev @ 778 NONAME
- _ZN24QDeclarativeDomComponentC2ERKS_ @ 779 NONAME
- _ZN24QDeclarativeDomComponentC2Ev @ 780 NONAME
- _ZN24QDeclarativeDomComponentD1Ev @ 781 NONAME
- _ZN24QDeclarativeDomComponentD2Ev @ 782 NONAME
- _ZN24QDeclarativeDomComponentaSERKS_ @ 783 NONAME
+ _ZN24QDeclarativeDebugService14objectToStringEP7QObject @ 769 NONAME ABSENT
+ _ZN24QDeclarativeDebugService15messageReceivedERK10QByteArray @ 770 NONAME ABSENT
+ _ZN24QDeclarativeDebugService16staticMetaObjectE @ 771 NONAME DATA 16 ABSENT
+ _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 772 NONAME ABSENT
+ _ZN24QDeclarativeDebugService18isDebuggingEnabledEv @ 773 NONAME ABSENT
+ _ZN24QDeclarativeDebugService19getStaticMetaObjectEv @ 774 NONAME ABSENT
+ _ZN24QDeclarativeDebugServiceC1ERK7QStringP7QObject @ 775 NONAME ABSENT
+ _ZN24QDeclarativeDebugServiceC2ERK7QStringP7QObject @ 776 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentC1ERKS_ @ 777 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentC1Ev @ 778 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentC2ERKS_ @ 779 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentC2Ev @ 780 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentD1Ev @ 781 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentD2Ev @ 782 NONAME ABSENT
+ _ZN24QDeclarativeDomComponentaSERKS_ @ 783 NONAME ABSENT
_ZN24QDeclarativeParserStatusC2Ev @ 784 NONAME
_ZN24QDeclarativeParserStatusD0Ev @ 785 NONAME
_ZN24QDeclarativeParserStatusD1Ev @ 786 NONAME
@@ -812,29 +812,29 @@ EXPORTS
_ZN25QDeclarativeListReferenceD1Ev @ 811 NONAME
_ZN25QDeclarativeListReferenceD2Ev @ 812 NONAME
_ZN25QDeclarativeListReferenceaSERKS_ @ 813 NONAME
- _ZN26QDeclarativeDebuggerStatus16setSelectedStateEb @ 814 NONAME
- _ZN26QDeclarativeDebuggerStatusD0Ev @ 815 NONAME
- _ZN26QDeclarativeDebuggerStatusD1Ev @ 816 NONAME
- _ZN26QDeclarativeDebuggerStatusD2Ev @ 817 NONAME
- _ZN26QDeclarativeOpenMetaObject12initialValueEi @ 818 NONAME
- _ZN26QDeclarativeOpenMetaObject12propertyReadEi @ 819 NONAME
- _ZN26QDeclarativeOpenMetaObject13propertyWriteEi @ 820 NONAME
- _ZN26QDeclarativeOpenMetaObject14createPropertyEPKcS1_ @ 821 NONAME
- _ZN26QDeclarativeOpenMetaObject15propertyCreatedEiR20QMetaPropertyBuilder @ 822 NONAME
- _ZN26QDeclarativeOpenMetaObject15propertyWrittenEi @ 823 NONAME
- _ZN26QDeclarativeOpenMetaObject8metaCallEN11QMetaObject4CallEiPPv @ 824 NONAME
- _ZN26QDeclarativeOpenMetaObject8setValueERK10QByteArrayRK8QVariant @ 825 NONAME
- _ZN26QDeclarativeOpenMetaObject8setValueEiRK8QVariant @ 826 NONAME
- _ZN26QDeclarativeOpenMetaObject9setCachedEb @ 827 NONAME
- _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 828 NONAME
- _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectb @ 829 NONAME
- _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 830 NONAME
- _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectb @ 831 NONAME
- _ZN26QDeclarativeOpenMetaObjectD0Ev @ 832 NONAME
- _ZN26QDeclarativeOpenMetaObjectD1Ev @ 833 NONAME
- _ZN26QDeclarativeOpenMetaObjectD2Ev @ 834 NONAME
- _ZN26QDeclarativeOpenMetaObjectixERK10QByteArray @ 835 NONAME
- _ZN26QDeclarativeOpenMetaObjectixEi @ 836 NONAME
+ _ZN26QDeclarativeDebuggerStatus16setSelectedStateEb @ 814 NONAME ABSENT
+ _ZN26QDeclarativeDebuggerStatusD0Ev @ 815 NONAME ABSENT
+ _ZN26QDeclarativeDebuggerStatusD1Ev @ 816 NONAME ABSENT
+ _ZN26QDeclarativeDebuggerStatusD2Ev @ 817 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject12initialValueEi @ 818 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject12propertyReadEi @ 819 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject13propertyWriteEi @ 820 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject14createPropertyEPKcS1_ @ 821 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject15propertyCreatedEiR20QMetaPropertyBuilder @ 822 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject15propertyWrittenEi @ 823 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject8metaCallEN11QMetaObject4CallEiPPv @ 824 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject8setValueERK10QByteArrayRK8QVariant @ 825 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject8setValueEiRK8QVariant @ 826 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObject9setCachedEb @ 827 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 828 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectC1EP7QObjectb @ 829 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectP30QDeclarativeOpenMetaObjectTypeb @ 830 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectC2EP7QObjectb @ 831 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectD0Ev @ 832 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectD1Ev @ 833 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectD2Ev @ 834 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectixERK10QByteArray @ 835 NONAME ABSENT
+ _ZN26QDeclarativeOpenMetaObjectixEi @ 836 NONAME ABSENT
_ZN26QDeclarativeStateOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 837 NONAME
_ZN26QDeclarativeStateOperation11qt_metacastEPKc @ 838 NONAME
_ZN26QDeclarativeStateOperation16staticMetaObjectE @ 839 NONAME DATA 16
@@ -842,35 +842,35 @@ EXPORTS
_ZN26QDeclarativeStateOperation7actionsEv @ 841 NONAME
_ZN26QDeclarativeStateOperationC1ER14QObjectPrivateP7QObject @ 842 NONAME
_ZN26QDeclarativeStateOperationC2ER14QObjectPrivateP7QObject @ 843 NONAME
- _ZN27QDeclarativeAbstractBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 844 NONAME
- _ZN27QDeclarativeAbstractBinding11addToObjectEP7QObject @ 845 NONAME
- _ZN27QDeclarativeAbstractBinding16removeFromObjectEv @ 846 NONAME
- _ZN27QDeclarativeAbstractBinding5clearEv @ 847 NONAME
- _ZN27QDeclarativeAbstractBinding7destroyEv @ 848 NONAME
- _ZN27QDeclarativeAbstractBindingC2Ev @ 849 NONAME
- _ZN27QDeclarativeAbstractBindingD0Ev @ 850 NONAME
- _ZN27QDeclarativeAbstractBindingD1Ev @ 851 NONAME
- _ZN27QDeclarativeAbstractBindingD2Ev @ 852 NONAME
- _ZN27QDeclarativeDebugConnection11qt_metacallEN11QMetaObject4CallEiPPv @ 853 NONAME
- _ZN27QDeclarativeDebugConnection11qt_metacastEPKc @ 854 NONAME
- _ZN27QDeclarativeDebugConnection16staticMetaObjectE @ 855 NONAME DATA 16
- _ZN27QDeclarativeDebugConnection19getStaticMetaObjectEv @ 856 NONAME
- _ZN27QDeclarativeDebugConnectionC1EP7QObject @ 857 NONAME
- _ZN27QDeclarativeDebugConnectionC2EP7QObject @ 858 NONAME
- _ZN27QDeclarativeDomValueBindingC1ERKS_ @ 859 NONAME
- _ZN27QDeclarativeDomValueBindingC1Ev @ 860 NONAME
- _ZN27QDeclarativeDomValueBindingC2ERKS_ @ 861 NONAME
- _ZN27QDeclarativeDomValueBindingC2Ev @ 862 NONAME
- _ZN27QDeclarativeDomValueBindingD1Ev @ 863 NONAME
- _ZN27QDeclarativeDomValueBindingD2Ev @ 864 NONAME
- _ZN27QDeclarativeDomValueBindingaSERKS_ @ 865 NONAME
- _ZN27QDeclarativeDomValueLiteralC1ERKS_ @ 866 NONAME
- _ZN27QDeclarativeDomValueLiteralC1Ev @ 867 NONAME
- _ZN27QDeclarativeDomValueLiteralC2ERKS_ @ 868 NONAME
- _ZN27QDeclarativeDomValueLiteralC2Ev @ 869 NONAME
- _ZN27QDeclarativeDomValueLiteralD1Ev @ 870 NONAME
- _ZN27QDeclarativeDomValueLiteralD2Ev @ 871 NONAME
- _ZN27QDeclarativeDomValueLiteralaSERKS_ @ 872 NONAME
+ _ZN27QDeclarativeAbstractBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 844 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBinding11addToObjectEP7QObject @ 845 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBinding16removeFromObjectEv @ 846 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBinding5clearEv @ 847 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBinding7destroyEv @ 848 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBindingC2Ev @ 849 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBindingD0Ev @ 850 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBindingD1Ev @ 851 NONAME ABSENT
+ _ZN27QDeclarativeAbstractBindingD2Ev @ 852 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnection11qt_metacallEN11QMetaObject4CallEiPPv @ 853 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnection11qt_metacastEPKc @ 854 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnection16staticMetaObjectE @ 855 NONAME DATA 16 ABSENT
+ _ZN27QDeclarativeDebugConnection19getStaticMetaObjectEv @ 856 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnectionC1EP7QObject @ 857 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnectionC2EP7QObject @ 858 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingC1ERKS_ @ 859 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingC1Ev @ 860 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingC2ERKS_ @ 861 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingC2Ev @ 862 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingD1Ev @ 863 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingD2Ev @ 864 NONAME ABSENT
+ _ZN27QDeclarativeDomValueBindingaSERKS_ @ 865 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralC1ERKS_ @ 866 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralC1Ev @ 867 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralC2ERKS_ @ 868 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralC2Ev @ 869 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralD1Ev @ 870 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralD2Ev @ 871 NONAME ABSENT
+ _ZN27QDeclarativeDomValueLiteralaSERKS_ @ 872 NONAME ABSENT
_ZN27QDeclarativeExtensionPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 873 NONAME
_ZN27QDeclarativeExtensionPlugin11qt_metacastEPKc @ 874 NONAME
_ZN27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 875 NONAME
@@ -880,35 +880,35 @@ EXPORTS
_ZN27QDeclarativeExtensionPluginD0Ev @ 879 NONAME
_ZN27QDeclarativeExtensionPluginD1Ev @ 880 NONAME
_ZN27QDeclarativeExtensionPluginD2Ev @ 881 NONAME
- _ZN27QDeclarativeGridScaledImage12stringToRuleERK7QString @ 882 NONAME
- _ZN27QDeclarativeGridScaledImageC1EP9QIODevice @ 883 NONAME
- _ZN27QDeclarativeGridScaledImageC1ERKS_ @ 884 NONAME
- _ZN27QDeclarativeGridScaledImageC1Ev @ 885 NONAME
- _ZN27QDeclarativeGridScaledImageC2EP9QIODevice @ 886 NONAME
- _ZN27QDeclarativeGridScaledImageC2ERKS_ @ 887 NONAME
- _ZN27QDeclarativeGridScaledImageC2Ev @ 888 NONAME
- _ZN27QDeclarativeGridScaledImageaSERKS_ @ 889 NONAME
- _ZN27QDeclarativePropertyPrivate10canConvertEPK11QMetaObjectS2_ @ 890 NONAME
- _ZN27QDeclarativePropertyPrivate10setBindingEP7QObjectiiP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 891 NONAME
- _ZN27QDeclarativePropertyPrivate10setBindingERK20QDeclarativePropertyP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 892 NONAME
- _ZN27QDeclarativePropertyPrivate11initDefaultEP7QObject @ 893 NONAME
- _ZN27QDeclarativePropertyPrivate12bindingIndexERK20QDeclarativeProperty @ 894 NONAME
- _ZN27QDeclarativePropertyPrivate12initPropertyEP7QObjectRK7QString @ 895 NONAME
- _ZN27QDeclarativePropertyPrivate12savePropertyEPK11QMetaObjecti @ 896 NONAME
- _ZN27QDeclarativePropertyPrivate13saveValueTypeEPK11QMetaObjectiS2_i @ 897 NONAME
- _ZN27QDeclarativePropertyPrivate16findSignalByNameEPK11QMetaObjectRK10QByteArray @ 898 NONAME
- _ZN27QDeclarativePropertyPrivate16signalExpressionERK20QDeclarativeProperty @ 899 NONAME
- _ZN27QDeclarativePropertyPrivate17readValuePropertyEv @ 900 NONAME
- _ZN27QDeclarativePropertyPrivate17writeEnumPropertyERK13QMetaPropertyiP7QObjectRK8QVarianti @ 901 NONAME
- _ZN27QDeclarativePropertyPrivate18valueTypeCoreIndexERK20QDeclarativeProperty @ 902 NONAME
- _ZN27QDeclarativePropertyPrivate18writeValuePropertyERK8QVariant6QFlagsINS_9WriteFlagEE @ 903 NONAME
- _ZN27QDeclarativePropertyPrivate19setSignalExpressionERK20QDeclarativePropertyP22QDeclarativeExpression @ 904 NONAME
- _ZN27QDeclarativePropertyPrivate20rawMetaObjectForTypeEP25QDeclarativeEnginePrivatei @ 905 NONAME
- _ZN27QDeclarativePropertyPrivate5equalEPK11QMetaObjectS2_ @ 906 NONAME
- _ZN27QDeclarativePropertyPrivate5writeEP7QObjectRKN25QDeclarativePropertyCache4DataERK8QVariantP23QDeclarativeContextData6QFlagsINS_9WriteFlagEE @ 907 NONAME
- _ZN27QDeclarativePropertyPrivate5writeERK20QDeclarativePropertyRK8QVariant6QFlagsINS_9WriteFlagEE @ 908 NONAME
- _ZN27QDeclarativePropertyPrivate7bindingERK20QDeclarativeProperty @ 909 NONAME
- _ZN27QDeclarativePropertyPrivate7restoreERK10QByteArrayP7QObjectP23QDeclarativeContextData @ 910 NONAME
+ _ZN27QDeclarativeGridScaledImage12stringToRuleERK7QString @ 882 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC1EP9QIODevice @ 883 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC1ERKS_ @ 884 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC1Ev @ 885 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC2EP9QIODevice @ 886 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC2ERKS_ @ 887 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageC2Ev @ 888 NONAME ABSENT
+ _ZN27QDeclarativeGridScaledImageaSERKS_ @ 889 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate10canConvertEPK11QMetaObjectS2_ @ 890 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate10setBindingEP7QObjectiiP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 891 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate10setBindingERK20QDeclarativePropertyP27QDeclarativeAbstractBinding6QFlagsINS_9WriteFlagEE @ 892 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate11initDefaultEP7QObject @ 893 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate12bindingIndexERK20QDeclarativeProperty @ 894 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate12initPropertyEP7QObjectRK7QString @ 895 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate12savePropertyEPK11QMetaObjecti @ 896 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate13saveValueTypeEPK11QMetaObjectiS2_i @ 897 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate16findSignalByNameEPK11QMetaObjectRK10QByteArray @ 898 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate16signalExpressionERK20QDeclarativeProperty @ 899 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate17readValuePropertyEv @ 900 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate17writeEnumPropertyERK13QMetaPropertyiP7QObjectRK8QVarianti @ 901 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate18valueTypeCoreIndexERK20QDeclarativeProperty @ 902 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate18writeValuePropertyERK8QVariant6QFlagsINS_9WriteFlagEE @ 903 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate19setSignalExpressionERK20QDeclarativePropertyP22QDeclarativeExpression @ 904 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate20rawMetaObjectForTypeEP25QDeclarativeEnginePrivatei @ 905 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate5equalEPK11QMetaObjectS2_ @ 906 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate5writeEP7QObjectRKN25QDeclarativePropertyCache4DataERK8QVariantP23QDeclarativeContextData6QFlagsINS_9WriteFlagEE @ 907 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate5writeERK20QDeclarativePropertyRK8QVariant6QFlagsINS_9WriteFlagEE @ 908 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate7bindingERK20QDeclarativeProperty @ 909 NONAME ABSENT
+ _ZN27QDeclarativePropertyPrivate7restoreERK10QByteArrayP7QObjectP23QDeclarativeContextData @ 910 NONAME ABSENT
_ZN28QDeclarativeCustomParserNodeC1ERKS_ @ 911 NONAME
_ZN28QDeclarativeCustomParserNodeC1Ev @ 912 NONAME
_ZN28QDeclarativeCustomParserNodeC2ERKS_ @ 913 NONAME
@@ -916,76 +916,76 @@ EXPORTS
_ZN28QDeclarativeCustomParserNodeD1Ev @ 915 NONAME
_ZN28QDeclarativeCustomParserNodeD2Ev @ 916 NONAME
_ZN28QDeclarativeCustomParserNodeaSERKS_ @ 917 NONAME
- _ZN28QDeclarativeDebugObjectQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 918 NONAME
- _ZN28QDeclarativeDebugObjectQuery11qt_metacastEPKc @ 919 NONAME
- _ZN28QDeclarativeDebugObjectQuery16staticMetaObjectE @ 920 NONAME DATA 16
- _ZN28QDeclarativeDebugObjectQuery19getStaticMetaObjectEv @ 921 NONAME
- _ZN28QDeclarativeDebugObjectQueryC1EP7QObject @ 922 NONAME
- _ZN28QDeclarativeDebugObjectQueryC2EP7QObject @ 923 NONAME
- _ZN28QDeclarativeDebugObjectQueryD0Ev @ 924 NONAME
- _ZN28QDeclarativeDebugObjectQueryD1Ev @ 925 NONAME
- _ZN28QDeclarativeDebugObjectQueryD2Ev @ 926 NONAME
- _ZN28QDeclarativeStringConverters14dateFromStringERK7QStringPb @ 927 NONAME
- _ZN28QDeclarativeStringConverters14timeFromStringERK7QStringPb @ 928 NONAME
- _ZN28QDeclarativeStringConverters15colorFromStringERK7QStringPb @ 929 NONAME
- _ZN28QDeclarativeStringConverters15rectFFromStringERK7QStringPb @ 930 NONAME
- _ZN28QDeclarativeStringConverters15sizeFFromStringERK7QStringPb @ 931 NONAME
- _ZN28QDeclarativeStringConverters16pointFFromStringERK7QStringPb @ 932 NONAME
- _ZN28QDeclarativeStringConverters17variantFromStringERK7QString @ 933 NONAME
- _ZN28QDeclarativeStringConverters17variantFromStringERK7QStringiPb @ 934 NONAME
- _ZN28QDeclarativeStringConverters18dateTimeFromStringERK7QStringPb @ 935 NONAME
- _ZN28QDeclarativeStringConverters18vector3DFromStringERK7QStringPb @ 936 NONAME
- _ZN28QDeclarativeValueTypeFactory11isValueTypeEi @ 937 NONAME
- _ZN28QDeclarativeValueTypeFactory18registerValueTypesEv @ 938 NONAME
- _ZN28QDeclarativeValueTypeFactory9valueTypeEi @ 939 NONAME
- _ZN28QDeclarativeValueTypeFactoryC1Ev @ 940 NONAME
- _ZN28QDeclarativeValueTypeFactoryC2Ev @ 941 NONAME
- _ZN28QDeclarativeValueTypeFactoryD1Ev @ 942 NONAME
- _ZN28QDeclarativeValueTypeFactoryD2Ev @ 943 NONAME
- _ZN29QDeclarativeDebugEnginesQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 944 NONAME
- _ZN29QDeclarativeDebugEnginesQuery11qt_metacastEPKc @ 945 NONAME
- _ZN29QDeclarativeDebugEnginesQuery16staticMetaObjectE @ 946 NONAME DATA 16
- _ZN29QDeclarativeDebugEnginesQuery19getStaticMetaObjectEv @ 947 NONAME
- _ZN29QDeclarativeDebugEnginesQueryC1EP7QObject @ 948 NONAME
- _ZN29QDeclarativeDebugEnginesQueryC2EP7QObject @ 949 NONAME
- _ZN29QDeclarativeDebugEnginesQueryD0Ev @ 950 NONAME
- _ZN29QDeclarativeDebugEnginesQueryD1Ev @ 951 NONAME
- _ZN29QDeclarativeDebugEnginesQueryD2Ev @ 952 NONAME
- _ZN30QDeclarativeDebugFileReference13setLineNumberEi @ 953 NONAME
- _ZN30QDeclarativeDebugFileReference15setColumnNumberEi @ 954 NONAME
- _ZN30QDeclarativeDebugFileReference6setUrlERK4QUrl @ 955 NONAME
- _ZN30QDeclarativeDebugFileReferenceC1ERKS_ @ 956 NONAME
- _ZN30QDeclarativeDebugFileReferenceC1Ev @ 957 NONAME
- _ZN30QDeclarativeDebugFileReferenceC2ERKS_ @ 958 NONAME
- _ZN30QDeclarativeDebugFileReferenceC2Ev @ 959 NONAME
- _ZN30QDeclarativeDebugFileReferenceaSERKS_ @ 960 NONAME
- _ZN30QDeclarativeDebugPropertyWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 961 NONAME
- _ZN30QDeclarativeDebugPropertyWatch11qt_metacastEPKc @ 962 NONAME
- _ZN30QDeclarativeDebugPropertyWatch16staticMetaObjectE @ 963 NONAME DATA 16
- _ZN30QDeclarativeDebugPropertyWatch19getStaticMetaObjectEv @ 964 NONAME
- _ZN30QDeclarativeDebugPropertyWatchC1EP7QObject @ 965 NONAME
- _ZN30QDeclarativeDebugPropertyWatchC2EP7QObject @ 966 NONAME
- _ZN30QDeclarativeDomDynamicPropertyC1ERKS_ @ 967 NONAME
- _ZN30QDeclarativeDomDynamicPropertyC1Ev @ 968 NONAME
- _ZN30QDeclarativeDomDynamicPropertyC2ERKS_ @ 969 NONAME
- _ZN30QDeclarativeDomDynamicPropertyC2Ev @ 970 NONAME
- _ZN30QDeclarativeDomDynamicPropertyD1Ev @ 971 NONAME
- _ZN30QDeclarativeDomDynamicPropertyD2Ev @ 972 NONAME
- _ZN30QDeclarativeDomDynamicPropertyaSERKS_ @ 973 NONAME
- _ZN30QDeclarativeOpenMetaObjectType14createPropertyERK10QByteArray @ 974 NONAME
- _ZN30QDeclarativeOpenMetaObjectType15propertyCreatedEiR20QMetaPropertyBuilder @ 975 NONAME
- _ZN30QDeclarativeOpenMetaObjectTypeC1EPK11QMetaObjectP18QDeclarativeEngine @ 976 NONAME
- _ZN30QDeclarativeOpenMetaObjectTypeC2EPK11QMetaObjectP18QDeclarativeEngine @ 977 NONAME
- _ZN30QDeclarativeOpenMetaObjectTypeD0Ev @ 978 NONAME
- _ZN30QDeclarativeOpenMetaObjectTypeD1Ev @ 979 NONAME
- _ZN30QDeclarativeOpenMetaObjectTypeD2Ev @ 980 NONAME
- _ZN31QDeclarativeDomValueValueSourceC1ERKS_ @ 981 NONAME
- _ZN31QDeclarativeDomValueValueSourceC1Ev @ 982 NONAME
- _ZN31QDeclarativeDomValueValueSourceC2ERKS_ @ 983 NONAME
- _ZN31QDeclarativeDomValueValueSourceC2Ev @ 984 NONAME
- _ZN31QDeclarativeDomValueValueSourceD1Ev @ 985 NONAME
- _ZN31QDeclarativeDomValueValueSourceD2Ev @ 986 NONAME
- _ZN31QDeclarativeDomValueValueSourceaSERKS_ @ 987 NONAME
+ _ZN28QDeclarativeDebugObjectQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 918 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQuery11qt_metacastEPKc @ 919 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQuery16staticMetaObjectE @ 920 NONAME DATA 16 ABSENT
+ _ZN28QDeclarativeDebugObjectQuery19getStaticMetaObjectEv @ 921 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQueryC1EP7QObject @ 922 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQueryC2EP7QObject @ 923 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQueryD0Ev @ 924 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQueryD1Ev @ 925 NONAME ABSENT
+ _ZN28QDeclarativeDebugObjectQueryD2Ev @ 926 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters14dateFromStringERK7QStringPb @ 927 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters14timeFromStringERK7QStringPb @ 928 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters15colorFromStringERK7QStringPb @ 929 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters15rectFFromStringERK7QStringPb @ 930 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters15sizeFFromStringERK7QStringPb @ 931 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters16pointFFromStringERK7QStringPb @ 932 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters17variantFromStringERK7QString @ 933 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters17variantFromStringERK7QStringiPb @ 934 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters18dateTimeFromStringERK7QStringPb @ 935 NONAME ABSENT
+ _ZN28QDeclarativeStringConverters18vector3DFromStringERK7QStringPb @ 936 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactory11isValueTypeEi @ 937 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactory18registerValueTypesEv @ 938 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactory9valueTypeEi @ 939 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactoryC1Ev @ 940 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactoryC2Ev @ 941 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactoryD1Ev @ 942 NONAME ABSENT
+ _ZN28QDeclarativeValueTypeFactoryD2Ev @ 943 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 944 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQuery11qt_metacastEPKc @ 945 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQuery16staticMetaObjectE @ 946 NONAME DATA 16 ABSENT
+ _ZN29QDeclarativeDebugEnginesQuery19getStaticMetaObjectEv @ 947 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQueryC1EP7QObject @ 948 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQueryC2EP7QObject @ 949 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQueryD0Ev @ 950 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQueryD1Ev @ 951 NONAME ABSENT
+ _ZN29QDeclarativeDebugEnginesQueryD2Ev @ 952 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReference13setLineNumberEi @ 953 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReference15setColumnNumberEi @ 954 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReference6setUrlERK4QUrl @ 955 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReferenceC1ERKS_ @ 956 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReferenceC1Ev @ 957 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReferenceC2ERKS_ @ 958 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReferenceC2Ev @ 959 NONAME ABSENT
+ _ZN30QDeclarativeDebugFileReferenceaSERKS_ @ 960 NONAME ABSENT
+ _ZN30QDeclarativeDebugPropertyWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 961 NONAME ABSENT
+ _ZN30QDeclarativeDebugPropertyWatch11qt_metacastEPKc @ 962 NONAME ABSENT
+ _ZN30QDeclarativeDebugPropertyWatch16staticMetaObjectE @ 963 NONAME DATA 16 ABSENT
+ _ZN30QDeclarativeDebugPropertyWatch19getStaticMetaObjectEv @ 964 NONAME ABSENT
+ _ZN30QDeclarativeDebugPropertyWatchC1EP7QObject @ 965 NONAME ABSENT
+ _ZN30QDeclarativeDebugPropertyWatchC2EP7QObject @ 966 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyC1ERKS_ @ 967 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyC1Ev @ 968 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyC2ERKS_ @ 969 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyC2Ev @ 970 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyD1Ev @ 971 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyD2Ev @ 972 NONAME ABSENT
+ _ZN30QDeclarativeDomDynamicPropertyaSERKS_ @ 973 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectType14createPropertyERK10QByteArray @ 974 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectType15propertyCreatedEiR20QMetaPropertyBuilder @ 975 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectTypeC1EPK11QMetaObjectP18QDeclarativeEngine @ 976 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectTypeC2EPK11QMetaObjectP18QDeclarativeEngine @ 977 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectTypeD0Ev @ 978 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectTypeD1Ev @ 979 NONAME ABSENT
+ _ZN30QDeclarativeOpenMetaObjectTypeD2Ev @ 980 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceC1ERKS_ @ 981 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceC1Ev @ 982 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceC2ERKS_ @ 983 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceC2Ev @ 984 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceD1Ev @ 985 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceD2Ev @ 986 NONAME ABSENT
+ _ZN31QDeclarativeDomValueValueSourceaSERKS_ @ 987 NONAME ABSENT
_ZN31QDeclarativePropertyValueSourceC2Ev @ 988 NONAME
_ZN31QDeclarativePropertyValueSourceD0Ev @ 989 NONAME
_ZN31QDeclarativePropertyValueSourceD1Ev @ 990 NONAME
@@ -997,82 +997,82 @@ EXPORTS
_ZN32QDeclarativeCustomParserPropertyD1Ev @ 996 NONAME
_ZN32QDeclarativeCustomParserPropertyD2Ev @ 997 NONAME
_ZN32QDeclarativeCustomParserPropertyaSERKS_ @ 998 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC1ERKS_ @ 999 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC1Ei @ 1000 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC1Ev @ 1001 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC2ERKS_ @ 1002 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC2Ei @ 1003 NONAME
- _ZN32QDeclarativeDebugEngineReferenceC2Ev @ 1004 NONAME
- _ZN32QDeclarativeDebugEngineReferenceaSERKS_ @ 1005 NONAME
- _ZN32QDeclarativeDebugExpressionQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1006 NONAME
- _ZN32QDeclarativeDebugExpressionQuery11qt_metacastEPKc @ 1007 NONAME
- _ZN32QDeclarativeDebugExpressionQuery16staticMetaObjectE @ 1008 NONAME DATA 16
- _ZN32QDeclarativeDebugExpressionQuery19getStaticMetaObjectEv @ 1009 NONAME
- _ZN32QDeclarativeDebugExpressionQueryC1EP7QObject @ 1010 NONAME
- _ZN32QDeclarativeDebugExpressionQueryC2EP7QObject @ 1011 NONAME
- _ZN32QDeclarativeDebugExpressionQueryD0Ev @ 1012 NONAME
- _ZN32QDeclarativeDebugExpressionQueryD1Ev @ 1013 NONAME
- _ZN32QDeclarativeDebugExpressionQueryD2Ev @ 1014 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC1ERKS_ @ 1015 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC1Ei @ 1016 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC1Ev @ 1017 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC2ERKS_ @ 1018 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC2Ei @ 1019 NONAME
- _ZN32QDeclarativeDebugObjectReferenceC2Ev @ 1020 NONAME
- _ZN32QDeclarativeDebugObjectReferenceaSERKS_ @ 1021 NONAME
- _ZN33QDeclarativeDebugContextReferenceC1ERKS_ @ 1022 NONAME
- _ZN33QDeclarativeDebugContextReferenceC1Ev @ 1023 NONAME
- _ZN33QDeclarativeDebugContextReferenceC2ERKS_ @ 1024 NONAME
- _ZN33QDeclarativeDebugContextReferenceC2Ev @ 1025 NONAME
- _ZN33QDeclarativeDebugContextReferenceaSERKS_ @ 1026 NONAME
- _ZN33QDeclarativeDebugRootContextQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1027 NONAME
- _ZN33QDeclarativeDebugRootContextQuery11qt_metacastEPKc @ 1028 NONAME
- _ZN33QDeclarativeDebugRootContextQuery16staticMetaObjectE @ 1029 NONAME DATA 16
- _ZN33QDeclarativeDebugRootContextQuery19getStaticMetaObjectEv @ 1030 NONAME
- _ZN33QDeclarativeDebugRootContextQueryC1EP7QObject @ 1031 NONAME
- _ZN33QDeclarativeDebugRootContextQueryC2EP7QObject @ 1032 NONAME
- _ZN33QDeclarativeDebugRootContextQueryD0Ev @ 1033 NONAME
- _ZN33QDeclarativeDebugRootContextQueryD1Ev @ 1034 NONAME
- _ZN33QDeclarativeDebugRootContextQueryD2Ev @ 1035 NONAME
- _ZN34QDeclarativeDebugPropertyReferenceC1ERKS_ @ 1036 NONAME
- _ZN34QDeclarativeDebugPropertyReferenceC1Ev @ 1037 NONAME
- _ZN34QDeclarativeDebugPropertyReferenceC2ERKS_ @ 1038 NONAME
- _ZN34QDeclarativeDebugPropertyReferenceC2Ev @ 1039 NONAME
- _ZN34QDeclarativeDebugPropertyReferenceaSERKS_ @ 1040 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorC1ERKS_ @ 1041 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorC1Ev @ 1042 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorC2ERKS_ @ 1043 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorC2Ev @ 1044 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorD1Ev @ 1045 NONAME
- _ZN36QDeclarativeDomValueValueInterceptorD2Ev @ 1046 NONAME
- _ZN36QDeclarativeDomValueValueInterceptoraSERKS_ @ 1047 NONAME
+ _ZN32QDeclarativeDebugEngineReferenceC1ERKS_ @ 999 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceC1Ei @ 1000 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceC1Ev @ 1001 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceC2ERKS_ @ 1002 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceC2Ei @ 1003 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceC2Ev @ 1004 NONAME ABSENT
+ _ZN32QDeclarativeDebugEngineReferenceaSERKS_ @ 1005 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1006 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQuery11qt_metacastEPKc @ 1007 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQuery16staticMetaObjectE @ 1008 NONAME DATA 16 ABSENT
+ _ZN32QDeclarativeDebugExpressionQuery19getStaticMetaObjectEv @ 1009 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQueryC1EP7QObject @ 1010 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQueryC2EP7QObject @ 1011 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQueryD0Ev @ 1012 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQueryD1Ev @ 1013 NONAME ABSENT
+ _ZN32QDeclarativeDebugExpressionQueryD2Ev @ 1014 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC1ERKS_ @ 1015 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC1Ei @ 1016 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC1Ev @ 1017 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC2ERKS_ @ 1018 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC2Ei @ 1019 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceC2Ev @ 1020 NONAME ABSENT
+ _ZN32QDeclarativeDebugObjectReferenceaSERKS_ @ 1021 NONAME ABSENT
+ _ZN33QDeclarativeDebugContextReferenceC1ERKS_ @ 1022 NONAME ABSENT
+ _ZN33QDeclarativeDebugContextReferenceC1Ev @ 1023 NONAME ABSENT
+ _ZN33QDeclarativeDebugContextReferenceC2ERKS_ @ 1024 NONAME ABSENT
+ _ZN33QDeclarativeDebugContextReferenceC2Ev @ 1025 NONAME ABSENT
+ _ZN33QDeclarativeDebugContextReferenceaSERKS_ @ 1026 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQuery11qt_metacallEN11QMetaObject4CallEiPPv @ 1027 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQuery11qt_metacastEPKc @ 1028 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQuery16staticMetaObjectE @ 1029 NONAME DATA 16 ABSENT
+ _ZN33QDeclarativeDebugRootContextQuery19getStaticMetaObjectEv @ 1030 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQueryC1EP7QObject @ 1031 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQueryC2EP7QObject @ 1032 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQueryD0Ev @ 1033 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQueryD1Ev @ 1034 NONAME ABSENT
+ _ZN33QDeclarativeDebugRootContextQueryD2Ev @ 1035 NONAME ABSENT
+ _ZN34QDeclarativeDebugPropertyReferenceC1ERKS_ @ 1036 NONAME ABSENT
+ _ZN34QDeclarativeDebugPropertyReferenceC1Ev @ 1037 NONAME ABSENT
+ _ZN34QDeclarativeDebugPropertyReferenceC2ERKS_ @ 1038 NONAME ABSENT
+ _ZN34QDeclarativeDebugPropertyReferenceC2Ev @ 1039 NONAME ABSENT
+ _ZN34QDeclarativeDebugPropertyReferenceaSERKS_ @ 1040 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorC1ERKS_ @ 1041 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorC1Ev @ 1042 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorC2ERKS_ @ 1043 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorC2Ev @ 1044 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorD1Ev @ 1045 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptorD2Ev @ 1046 NONAME ABSENT
+ _ZN36QDeclarativeDomValueValueInterceptoraSERKS_ @ 1047 NONAME ABSENT
_ZN36QDeclarativePropertyValueInterceptorC2Ev @ 1048 NONAME
_ZN36QDeclarativePropertyValueInterceptorD0Ev @ 1049 NONAME
_ZN36QDeclarativePropertyValueInterceptorD1Ev @ 1050 NONAME
_ZN36QDeclarativePropertyValueInterceptorD2Ev @ 1051 NONAME
- _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 1052 NONAME
- _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacastEPKc @ 1053 NONAME
- _ZN38QDeclarativeDebugObjectExpressionWatch16staticMetaObjectE @ 1054 NONAME DATA 16
- _ZN38QDeclarativeDebugObjectExpressionWatch19getStaticMetaObjectEv @ 1055 NONAME
- _ZN38QDeclarativeDebugObjectExpressionWatchC1EP7QObject @ 1056 NONAME
- _ZN38QDeclarativeDebugObjectExpressionWatchC2EP7QObject @ 1057 NONAME
+ _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacallEN11QMetaObject4CallEiPPv @ 1052 NONAME ABSENT
+ _ZN38QDeclarativeDebugObjectExpressionWatch11qt_metacastEPKc @ 1053 NONAME ABSENT
+ _ZN38QDeclarativeDebugObjectExpressionWatch16staticMetaObjectE @ 1054 NONAME DATA 16 ABSENT
+ _ZN38QDeclarativeDebugObjectExpressionWatch19getStaticMetaObjectEv @ 1055 NONAME ABSENT
+ _ZN38QDeclarativeDebugObjectExpressionWatchC1EP7QObject @ 1056 NONAME ABSENT
+ _ZN38QDeclarativeDebugObjectExpressionWatchC2EP7QObject @ 1057 NONAME ABSENT
_ZN39QDeclarativeNetworkAccessManagerFactoryD0Ev @ 1058 NONAME
_ZN39QDeclarativeNetworkAccessManagerFactoryD1Ev @ 1059 NONAME
_ZN39QDeclarativeNetworkAccessManagerFactoryD2Ev @ 1060 NONAME
- _ZN7QPacket5clearEv @ 1061 NONAME
- _ZN7QPacketC1ERK10QByteArray @ 1062 NONAME
- _ZN7QPacketC1ERKS_ @ 1063 NONAME
- _ZN7QPacketC1Ev @ 1064 NONAME
- _ZN7QPacketC2ERK10QByteArray @ 1065 NONAME
- _ZN7QPacketC2ERKS_ @ 1066 NONAME
- _ZN7QPacketC2Ev @ 1067 NONAME
- _ZN7QPacketD0Ev @ 1068 NONAME
- _ZN7QPacketD1Ev @ 1069 NONAME
- _ZN7QPacketD2Ev @ 1070 NONAME
- _ZNK15QDeclarativePen10metaObjectEv @ 1071 NONAME
- _ZNK15QPacketProtocol10metaObjectEv @ 1072 NONAME
- _ZNK15QPacketProtocol16packetsAvailableEv @ 1073 NONAME
- _ZNK15QPacketProtocol17maximumPacketSizeEv @ 1074 NONAME
+ _ZN7QPacket5clearEv @ 1061 NONAME ABSENT
+ _ZN7QPacketC1ERK10QByteArray @ 1062 NONAME ABSENT
+ _ZN7QPacketC1ERKS_ @ 1063 NONAME ABSENT
+ _ZN7QPacketC1Ev @ 1064 NONAME ABSENT
+ _ZN7QPacketC2ERK10QByteArray @ 1065 NONAME ABSENT
+ _ZN7QPacketC2ERKS_ @ 1066 NONAME ABSENT
+ _ZN7QPacketC2Ev @ 1067 NONAME ABSENT
+ _ZN7QPacketD0Ev @ 1068 NONAME ABSENT
+ _ZN7QPacketD1Ev @ 1069 NONAME ABSENT
+ _ZN7QPacketD2Ev @ 1070 NONAME ABSENT
+ _ZNK15QDeclarativePen10metaObjectEv @ 1071 NONAME ABSENT
+ _ZNK15QPacketProtocol10metaObjectEv @ 1072 NONAME ABSENT
+ _ZNK15QPacketProtocol16packetsAvailableEv @ 1073 NONAME ABSENT
+ _ZNK15QPacketProtocol17maximumPacketSizeEv @ 1074 NONAME ABSENT
_ZNK16QDeclarativeItem10metaObjectEv @ 1075 NONAME
_ZNK16QDeclarativeItem10parentItemEv @ 1076 NONAME
_ZNK16QDeclarativeItem10widthValidEv @ 1077 NONAME
@@ -1094,46 +1094,46 @@ EXPORTS
_ZNK16QDeclarativeItem7childAtEff @ 1093 NONAME
_ZNK16QDeclarativeItem8hasFocusEv @ 1094 NONAME
_ZNK16QDeclarativeItem9mapToItemERK12QScriptValueff @ 1095 NONAME
- _ZNK16QDeclarativeText10metaObjectEv @ 1096 NONAME
- _ZNK16QDeclarativeText10styleColorEv @ 1097 NONAME
- _ZNK16QDeclarativeText10textFormatEv @ 1098 NONAME
- _ZNK16QDeclarativeText12boundingRectEv @ 1099 NONAME
- _ZNK16QDeclarativeText12paintedWidthEv @ 1100 NONAME
- _ZNK16QDeclarativeText13paintedHeightEv @ 1101 NONAME
- _ZNK16QDeclarativeText16resourcesLoadingEv @ 1102 NONAME
- _ZNK16QDeclarativeText4fontEv @ 1103 NONAME
- _ZNK16QDeclarativeText4textEv @ 1104 NONAME
- _ZNK16QDeclarativeText5colorEv @ 1105 NONAME
- _ZNK16QDeclarativeText5styleEv @ 1106 NONAME
- _ZNK16QDeclarativeText6hAlignEv @ 1107 NONAME
- _ZNK16QDeclarativeText6vAlignEv @ 1108 NONAME
- _ZNK16QDeclarativeText8wrapModeEv @ 1109 NONAME
- _ZNK16QDeclarativeText9elideModeEv @ 1110 NONAME
- _ZNK16QDeclarativeType10createSizeEv @ 1111 NONAME
- _ZNK16QDeclarativeType10metaObjectEv @ 1112 NONAME
- _ZNK16QDeclarativeType11isCreatableEv @ 1113 NONAME
- _ZNK16QDeclarativeType11isInterfaceEv @ 1114 NONAME
- _ZNK16QDeclarativeType11qListTypeIdEv @ 1115 NONAME
- _ZNK16QDeclarativeType11qmlTypeNameEv @ 1116 NONAME
- _ZNK16QDeclarativeType12customParserEv @ 1117 NONAME
- _ZNK16QDeclarativeType12interfaceIIdEv @ 1118 NONAME
- _ZNK16QDeclarativeType12majorVersionEv @ 1119 NONAME
- _ZNK16QDeclarativeType12minorVersionEv @ 1120 NONAME
- _ZNK16QDeclarativeType14baseMetaObjectEv @ 1121 NONAME
- _ZNK16QDeclarativeType14createFunctionEv @ 1122 NONAME
- _ZNK16QDeclarativeType14isExtendedTypeEv @ 1123 NONAME
- _ZNK16QDeclarativeType16noCreationReasonEv @ 1124 NONAME
- _ZNK16QDeclarativeType16parserStatusCastEv @ 1125 NONAME
- _ZNK16QDeclarativeType18availableInVersionEii @ 1126 NONAME
- _ZNK16QDeclarativeType22attachedPropertiesTypeEv @ 1127 NONAME
- _ZNK16QDeclarativeType23propertyValueSourceCastEv @ 1128 NONAME
- _ZNK16QDeclarativeType26attachedPropertiesFunctionEv @ 1129 NONAME
- _ZNK16QDeclarativeType28propertyValueInterceptorCastEv @ 1130 NONAME
- _ZNK16QDeclarativeType5indexEv @ 1131 NONAME
- _ZNK16QDeclarativeType6createEPP7QObjectPPvj @ 1132 NONAME
- _ZNK16QDeclarativeType6createEv @ 1133 NONAME
- _ZNK16QDeclarativeType6typeIdEv @ 1134 NONAME
- _ZNK16QDeclarativeType8typeNameEv @ 1135 NONAME
+ _ZNK16QDeclarativeText10metaObjectEv @ 1096 NONAME ABSENT
+ _ZNK16QDeclarativeText10styleColorEv @ 1097 NONAME ABSENT
+ _ZNK16QDeclarativeText10textFormatEv @ 1098 NONAME ABSENT
+ _ZNK16QDeclarativeText12boundingRectEv @ 1099 NONAME ABSENT
+ _ZNK16QDeclarativeText12paintedWidthEv @ 1100 NONAME ABSENT
+ _ZNK16QDeclarativeText13paintedHeightEv @ 1101 NONAME ABSENT
+ _ZNK16QDeclarativeText16resourcesLoadingEv @ 1102 NONAME ABSENT
+ _ZNK16QDeclarativeText4fontEv @ 1103 NONAME ABSENT
+ _ZNK16QDeclarativeText4textEv @ 1104 NONAME ABSENT
+ _ZNK16QDeclarativeText5colorEv @ 1105 NONAME ABSENT
+ _ZNK16QDeclarativeText5styleEv @ 1106 NONAME ABSENT
+ _ZNK16QDeclarativeText6hAlignEv @ 1107 NONAME ABSENT
+ _ZNK16QDeclarativeText6vAlignEv @ 1108 NONAME ABSENT
+ _ZNK16QDeclarativeText8wrapModeEv @ 1109 NONAME ABSENT
+ _ZNK16QDeclarativeText9elideModeEv @ 1110 NONAME ABSENT
+ _ZNK16QDeclarativeType10createSizeEv @ 1111 NONAME ABSENT
+ _ZNK16QDeclarativeType10metaObjectEv @ 1112 NONAME ABSENT
+ _ZNK16QDeclarativeType11isCreatableEv @ 1113 NONAME ABSENT
+ _ZNK16QDeclarativeType11isInterfaceEv @ 1114 NONAME ABSENT
+ _ZNK16QDeclarativeType11qListTypeIdEv @ 1115 NONAME ABSENT
+ _ZNK16QDeclarativeType11qmlTypeNameEv @ 1116 NONAME ABSENT
+ _ZNK16QDeclarativeType12customParserEv @ 1117 NONAME ABSENT
+ _ZNK16QDeclarativeType12interfaceIIdEv @ 1118 NONAME ABSENT
+ _ZNK16QDeclarativeType12majorVersionEv @ 1119 NONAME ABSENT
+ _ZNK16QDeclarativeType12minorVersionEv @ 1120 NONAME ABSENT
+ _ZNK16QDeclarativeType14baseMetaObjectEv @ 1121 NONAME ABSENT
+ _ZNK16QDeclarativeType14createFunctionEv @ 1122 NONAME ABSENT
+ _ZNK16QDeclarativeType14isExtendedTypeEv @ 1123 NONAME ABSENT
+ _ZNK16QDeclarativeType16noCreationReasonEv @ 1124 NONAME ABSENT
+ _ZNK16QDeclarativeType16parserStatusCastEv @ 1125 NONAME ABSENT
+ _ZNK16QDeclarativeType18availableInVersionEii @ 1126 NONAME ABSENT
+ _ZNK16QDeclarativeType22attachedPropertiesTypeEv @ 1127 NONAME ABSENT
+ _ZNK16QDeclarativeType23propertyValueSourceCastEv @ 1128 NONAME ABSENT
+ _ZNK16QDeclarativeType26attachedPropertiesFunctionEv @ 1129 NONAME ABSENT
+ _ZNK16QDeclarativeType28propertyValueInterceptorCastEv @ 1130 NONAME ABSENT
+ _ZNK16QDeclarativeType5indexEv @ 1131 NONAME ABSENT
+ _ZNK16QDeclarativeType6createEPP7QObjectPPvj @ 1132 NONAME ABSENT
+ _ZNK16QDeclarativeType6createEv @ 1133 NONAME ABSENT
+ _ZNK16QDeclarativeType6typeIdEv @ 1134 NONAME ABSENT
+ _ZNK16QDeclarativeType8typeNameEv @ 1135 NONAME ABSENT
_ZNK16QDeclarativeView10metaObjectEv @ 1136 NONAME
_ZNK16QDeclarativeView10resizeModeEv @ 1137 NONAME
_ZNK16QDeclarativeView10rootObjectEv @ 1138 NONAME
@@ -1144,12 +1144,12 @@ EXPORTS
_ZNK16QDeclarativeView6sourceEv @ 1143 NONAME
_ZNK16QDeclarativeView6statusEv @ 1144 NONAME
_ZNK16QDeclarativeView8sizeHintEv @ 1145 NONAME
- _ZNK16QMetaEnumBuilder3keyEi @ 1146 NONAME
- _ZNK16QMetaEnumBuilder4nameEv @ 1147 NONAME
- _ZNK16QMetaEnumBuilder5valueEi @ 1148 NONAME
- _ZNK16QMetaEnumBuilder6d_funcEv @ 1149 NONAME
- _ZNK16QMetaEnumBuilder6isFlagEv @ 1150 NONAME
- _ZNK16QMetaEnumBuilder8keyCountEv @ 1151 NONAME
+ _ZNK16QMetaEnumBuilder3keyEi @ 1146 NONAME ABSENT
+ _ZNK16QMetaEnumBuilder4nameEv @ 1147 NONAME ABSENT
+ _ZNK16QMetaEnumBuilder5valueEi @ 1148 NONAME ABSENT
+ _ZNK16QMetaEnumBuilder6d_funcEv @ 1149 NONAME ABSENT
+ _ZNK16QMetaEnumBuilder6isFlagEv @ 1150 NONAME ABSENT
+ _ZNK16QMetaEnumBuilder8keyCountEv @ 1151 NONAME ABSENT
_ZNK17QDeclarativeError11descriptionEv @ 1152 NONAME
_ZNK17QDeclarativeError3urlEv @ 1153 NONAME
_ZNK17QDeclarativeError4lineEv @ 1154 NONAME
@@ -1196,58 +1196,58 @@ EXPORTS
_ZNK18QDeclarativePixmap7isErrorEv @ 1195 NONAME
_ZNK18QDeclarativePixmap7isReadyEv @ 1196 NONAME
_ZNK18QDeclarativePixmap9isLoadingEv @ 1197 NONAME
- _ZNK18QMetaMethodBuilder10attributesEv @ 1198 NONAME
- _ZNK18QMetaMethodBuilder10methodTypeEv @ 1199 NONAME
- _ZNK18QMetaMethodBuilder10returnTypeEv @ 1200 NONAME
- _ZNK18QMetaMethodBuilder14parameterNamesEv @ 1201 NONAME
- _ZNK18QMetaMethodBuilder3tagEv @ 1202 NONAME
- _ZNK18QMetaMethodBuilder5indexEv @ 1203 NONAME
- _ZNK18QMetaMethodBuilder6accessEv @ 1204 NONAME
- _ZNK18QMetaMethodBuilder6d_funcEv @ 1205 NONAME
- _ZNK18QMetaMethodBuilder9signatureEv @ 1206 NONAME
- _ZNK18QMetaObjectBuilder10enumeratorEi @ 1207 NONAME
- _ZNK18QMetaObjectBuilder10superClassEv @ 1208 NONAME
- _ZNK18QMetaObjectBuilder11constructorEi @ 1209 NONAME
- _ZNK18QMetaObjectBuilder11methodCountEv @ 1210 NONAME
- _ZNK18QMetaObjectBuilder12toMetaObjectEv @ 1211 NONAME
- _ZNK18QMetaObjectBuilder13classInfoNameEi @ 1212 NONAME
- _ZNK18QMetaObjectBuilder13propertyCountEv @ 1213 NONAME
- _ZNK18QMetaObjectBuilder14classInfoCountEv @ 1214 NONAME
- _ZNK18QMetaObjectBuilder14classInfoValueEi @ 1215 NONAME
- _ZNK18QMetaObjectBuilder15enumeratorCountEv @ 1216 NONAME
- _ZNK18QMetaObjectBuilder16constructorCountEv @ 1217 NONAME
- _ZNK18QMetaObjectBuilder17relatedMetaObjectEi @ 1218 NONAME
- _ZNK18QMetaObjectBuilder17toRelocatableDataEPb @ 1219 NONAME
- _ZNK18QMetaObjectBuilder22relatedMetaObjectCountEv @ 1220 NONAME
- _ZNK18QMetaObjectBuilder22staticMetacallFunctionEv @ 1221 NONAME
- _ZNK18QMetaObjectBuilder5flagsEv @ 1222 NONAME
- _ZNK18QMetaObjectBuilder6methodEi @ 1223 NONAME
- _ZNK18QMetaObjectBuilder8propertyEi @ 1224 NONAME
- _ZNK18QMetaObjectBuilder9classNameEv @ 1225 NONAME
- _ZNK18QMetaObjectBuilder9serializeER11QDataStream @ 1226 NONAME
- _ZNK19QDeclarativeAnchors10leftMarginEv @ 1227 NONAME
- _ZNK19QDeclarativeAnchors10metaObjectEv @ 1228 NONAME
- _ZNK19QDeclarativeAnchors11rightMarginEv @ 1229 NONAME
- _ZNK19QDeclarativeAnchors11usedAnchorsEv @ 1230 NONAME
- _ZNK19QDeclarativeAnchors12bottomMarginEv @ 1231 NONAME
- _ZNK19QDeclarativeAnchors14baselineOffsetEv @ 1232 NONAME
- _ZNK19QDeclarativeAnchors14verticalCenterEv @ 1233 NONAME
- _ZNK19QDeclarativeAnchors16horizontalCenterEv @ 1234 NONAME
- _ZNK19QDeclarativeAnchors20verticalCenterOffsetEv @ 1235 NONAME
- _ZNK19QDeclarativeAnchors22horizontalCenterOffsetEv @ 1236 NONAME
- _ZNK19QDeclarativeAnchors3topEv @ 1237 NONAME
- _ZNK19QDeclarativeAnchors4fillEv @ 1238 NONAME
- _ZNK19QDeclarativeAnchors4leftEv @ 1239 NONAME
- _ZNK19QDeclarativeAnchors5rightEv @ 1240 NONAME
- _ZNK19QDeclarativeAnchors6bottomEv @ 1241 NONAME
- _ZNK19QDeclarativeAnchors7marginsEv @ 1242 NONAME
- _ZNK19QDeclarativeAnchors8baselineEv @ 1243 NONAME
- _ZNK19QDeclarativeAnchors8centerInEv @ 1244 NONAME
- _ZNK19QDeclarativeAnchors9topMarginEv @ 1245 NONAME
- _ZNK19QDeclarativeBinding10expressionEv @ 1246 NONAME
- _ZNK19QDeclarativeBinding10metaObjectEv @ 1247 NONAME
- _ZNK19QDeclarativeBinding7enabledEv @ 1248 NONAME
- _ZNK19QDeclarativeBinding8propertyEv @ 1249 NONAME
+ _ZNK18QMetaMethodBuilder10attributesEv @ 1198 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder10methodTypeEv @ 1199 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder10returnTypeEv @ 1200 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder14parameterNamesEv @ 1201 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder3tagEv @ 1202 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder5indexEv @ 1203 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder6accessEv @ 1204 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder6d_funcEv @ 1205 NONAME ABSENT
+ _ZNK18QMetaMethodBuilder9signatureEv @ 1206 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder10enumeratorEi @ 1207 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder10superClassEv @ 1208 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder11constructorEi @ 1209 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder11methodCountEv @ 1210 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder12toMetaObjectEv @ 1211 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder13classInfoNameEi @ 1212 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder13propertyCountEv @ 1213 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder14classInfoCountEv @ 1214 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder14classInfoValueEi @ 1215 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder15enumeratorCountEv @ 1216 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder16constructorCountEv @ 1217 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder17relatedMetaObjectEi @ 1218 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder17toRelocatableDataEPb @ 1219 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder22relatedMetaObjectCountEv @ 1220 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder22staticMetacallFunctionEv @ 1221 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder5flagsEv @ 1222 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder6methodEi @ 1223 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder8propertyEi @ 1224 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder9classNameEv @ 1225 NONAME ABSENT
+ _ZNK18QMetaObjectBuilder9serializeER11QDataStream @ 1226 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors10leftMarginEv @ 1227 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors10metaObjectEv @ 1228 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors11rightMarginEv @ 1229 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors11usedAnchorsEv @ 1230 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors12bottomMarginEv @ 1231 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors14baselineOffsetEv @ 1232 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors14verticalCenterEv @ 1233 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors16horizontalCenterEv @ 1234 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors20verticalCenterOffsetEv @ 1235 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors22horizontalCenterOffsetEv @ 1236 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors3topEv @ 1237 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors4fillEv @ 1238 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors4leftEv @ 1239 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors5rightEv @ 1240 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors6bottomEv @ 1241 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors7marginsEv @ 1242 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors8baselineEv @ 1243 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors8centerInEv @ 1244 NONAME ABSENT
+ _ZNK19QDeclarativeAnchors9topMarginEv @ 1245 NONAME ABSENT
+ _ZNK19QDeclarativeBinding10expressionEv @ 1246 NONAME ABSENT
+ _ZNK19QDeclarativeBinding10metaObjectEv @ 1247 NONAME ABSENT
+ _ZNK19QDeclarativeBinding7enabledEv @ 1248 NONAME ABSENT
+ _ZNK19QDeclarativeBinding8propertyEv @ 1249 NONAME ABSENT
_ZNK19QDeclarativeContext10metaObjectEv @ 1250 NONAME
_ZNK19QDeclarativeContext13contextObjectEv @ 1251 NONAME
_ZNK19QDeclarativeContext13parentContextEv @ 1252 NONAME
@@ -1255,29 +1255,29 @@ EXPORTS
_ZNK19QDeclarativeContext6engineEv @ 1254 NONAME
_ZNK19QDeclarativeContext7baseUrlEv @ 1255 NONAME
_ZNK19QDeclarativeContext7isValidEv @ 1256 NONAME
- _ZNK19QDeclarativeDomList14commaPositionsEv @ 1257 NONAME
- _ZNK19QDeclarativeDomList6lengthEv @ 1258 NONAME
- _ZNK19QDeclarativeDomList6valuesEv @ 1259 NONAME
- _ZNK19QDeclarativeDomList8positionEv @ 1260 NONAME
- _ZNK19QListModelInterface10metaObjectEv @ 1261 NONAME
- _ZNK20QDeclarativeBehavior10metaObjectEv @ 1262 NONAME
- _ZNK20QDeclarativeBehavior7enabledEv @ 1263 NONAME
- _ZNK20QDeclarativeDomValue13isValueSourceEv @ 1264 NONAME
- _ZNK20QDeclarativeDomValue13toValueSourceEv @ 1265 NONAME
- _ZNK20QDeclarativeDomValue18isValueInterceptorEv @ 1266 NONAME
- _ZNK20QDeclarativeDomValue18toValueInterceptorEv @ 1267 NONAME
- _ZNK20QDeclarativeDomValue4typeEv @ 1268 NONAME
- _ZNK20QDeclarativeDomValue6isListEv @ 1269 NONAME
- _ZNK20QDeclarativeDomValue6lengthEv @ 1270 NONAME
- _ZNK20QDeclarativeDomValue6toListEv @ 1271 NONAME
- _ZNK20QDeclarativeDomValue8isObjectEv @ 1272 NONAME
- _ZNK20QDeclarativeDomValue8positionEv @ 1273 NONAME
- _ZNK20QDeclarativeDomValue8toObjectEv @ 1274 NONAME
- _ZNK20QDeclarativeDomValue9isBindingEv @ 1275 NONAME
- _ZNK20QDeclarativeDomValue9isInvalidEv @ 1276 NONAME
- _ZNK20QDeclarativeDomValue9isLiteralEv @ 1277 NONAME
- _ZNK20QDeclarativeDomValue9toBindingEv @ 1278 NONAME
- _ZNK20QDeclarativeDomValue9toLiteralEv @ 1279 NONAME
+ _ZNK19QDeclarativeDomList14commaPositionsEv @ 1257 NONAME ABSENT
+ _ZNK19QDeclarativeDomList6lengthEv @ 1258 NONAME ABSENT
+ _ZNK19QDeclarativeDomList6valuesEv @ 1259 NONAME ABSENT
+ _ZNK19QDeclarativeDomList8positionEv @ 1260 NONAME ABSENT
+ _ZNK19QListModelInterface10metaObjectEv @ 1261 NONAME ABSENT
+ _ZNK20QDeclarativeBehavior10metaObjectEv @ 1262 NONAME ABSENT
+ _ZNK20QDeclarativeBehavior7enabledEv @ 1263 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue13isValueSourceEv @ 1264 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue13toValueSourceEv @ 1265 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue18isValueInterceptorEv @ 1266 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue18toValueInterceptorEv @ 1267 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue4typeEv @ 1268 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue6isListEv @ 1269 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue6lengthEv @ 1270 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue6toListEv @ 1271 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue8isObjectEv @ 1272 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue8positionEv @ 1273 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue8toObjectEv @ 1274 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue9isBindingEv @ 1275 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue9isInvalidEv @ 1276 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue9isLiteralEv @ 1277 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue9toBindingEv @ 1278 NONAME ABSENT
+ _ZNK20QDeclarativeDomValue9toLiteralEv @ 1279 NONAME ABSENT
_ZNK20QDeclarativeProperty10isPropertyEv @ 1280 NONAME
_ZNK20QDeclarativeProperty10isWritableEv @ 1281 NONAME
_ZNK20QDeclarativeProperty12isDesignableEv @ 1282 NONAME
@@ -1301,22 +1301,22 @@ EXPORTS
_ZNK20QDeclarativeProperty7isValidEv @ 1300 NONAME
_ZNK20QDeclarativeProperty8propertyEv @ 1301 NONAME
_ZNK20QDeclarativePropertyeqERKS_ @ 1302 NONAME
- _ZNK20QMetaPropertyBuilder10isEditableEv @ 1303 NONAME
- _ZNK20QMetaPropertyBuilder10isReadableEv @ 1304 NONAME
- _ZNK20QMetaPropertyBuilder10isWritableEv @ 1305 NONAME
- _ZNK20QMetaPropertyBuilder12hasStdCppSetEv @ 1306 NONAME
- _ZNK20QMetaPropertyBuilder12isDesignableEv @ 1307 NONAME
- _ZNK20QMetaPropertyBuilder12isEnumOrFlagEv @ 1308 NONAME
- _ZNK20QMetaPropertyBuilder12isResettableEv @ 1309 NONAME
- _ZNK20QMetaPropertyBuilder12isScriptableEv @ 1310 NONAME
- _ZNK20QMetaPropertyBuilder12notifySignalEv @ 1311 NONAME
- _ZNK20QMetaPropertyBuilder15hasNotifySignalEv @ 1312 NONAME
- _ZNK20QMetaPropertyBuilder4nameEv @ 1313 NONAME
- _ZNK20QMetaPropertyBuilder4typeEv @ 1314 NONAME
- _ZNK20QMetaPropertyBuilder6d_funcEv @ 1315 NONAME
- _ZNK20QMetaPropertyBuilder6isUserEv @ 1316 NONAME
- _ZNK20QMetaPropertyBuilder8isStoredEv @ 1317 NONAME
- _ZNK20QMetaPropertyBuilder9isDynamicEv @ 1318 NONAME
+ _ZNK20QMetaPropertyBuilder10isEditableEv @ 1303 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder10isReadableEv @ 1304 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder10isWritableEv @ 1305 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12hasStdCppSetEv @ 1306 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12isDesignableEv @ 1307 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12isEnumOrFlagEv @ 1308 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12isResettableEv @ 1309 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12isScriptableEv @ 1310 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder12notifySignalEv @ 1311 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder15hasNotifySignalEv @ 1312 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder4nameEv @ 1313 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder4typeEv @ 1314 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder6d_funcEv @ 1315 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder6isUserEv @ 1316 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder8isStoredEv @ 1317 NONAME ABSENT
+ _ZNK20QMetaPropertyBuilder9isDynamicEv @ 1318 NONAME ABSENT
_ZNK21QDeclarativeComponent10metaObjectEv @ 1319 NONAME
_ZNK21QDeclarativeComponent11errorStringEv @ 1320 NONAME
_ZNK21QDeclarativeComponent15creationContextEv @ 1321 NONAME
@@ -1328,49 +1328,49 @@ EXPORTS
_ZNK21QDeclarativeComponent7isReadyEv @ 1327 NONAME
_ZNK21QDeclarativeComponent8progressEv @ 1328 NONAME
_ZNK21QDeclarativeComponent9isLoadingEv @ 1329 NONAME
- _ZNK21QDeclarativeDomImport3uriEv @ 1330 NONAME
- _ZNK21QDeclarativeDomImport4typeEv @ 1331 NONAME
- _ZNK21QDeclarativeDomImport7versionEv @ 1332 NONAME
- _ZNK21QDeclarativeDomImport9qualifierEv @ 1333 NONAME
- _ZNK21QDeclarativeDomObject10objectTypeEv @ 1334 NONAME
- _ZNK21QDeclarativeDomObject10propertiesEv @ 1335 NONAME
- _ZNK21QDeclarativeDomObject11isComponentEv @ 1336 NONAME
- _ZNK21QDeclarativeDomObject11toComponentEv @ 1337 NONAME
- _ZNK21QDeclarativeDomObject12isCustomTypeEv @ 1338 NONAME
- _ZNK21QDeclarativeDomObject14customTypeDataEv @ 1339 NONAME
- _ZNK21QDeclarativeDomObject15dynamicPropertyERK10QByteArray @ 1340 NONAME
- _ZNK21QDeclarativeDomObject15objectClassNameEv @ 1341 NONAME
- _ZNK21QDeclarativeDomObject17dynamicPropertiesEv @ 1342 NONAME
- _ZNK21QDeclarativeDomObject22objectTypeMajorVersionEv @ 1343 NONAME
- _ZNK21QDeclarativeDomObject22objectTypeMinorVersionEv @ 1344 NONAME
- _ZNK21QDeclarativeDomObject3urlEv @ 1345 NONAME
- _ZNK21QDeclarativeDomObject6lengthEv @ 1346 NONAME
- _ZNK21QDeclarativeDomObject7isValidEv @ 1347 NONAME
- _ZNK21QDeclarativeDomObject8objectIdEv @ 1348 NONAME
- _ZNK21QDeclarativeDomObject8positionEv @ 1349 NONAME
- _ZNK21QDeclarativeDomObject8propertyERK10QByteArray @ 1350 NONAME
- _ZNK21QDeclarativeListModel10metaObjectEv @ 1351 NONAME
- _ZNK21QDeclarativeListModel3getEi @ 1352 NONAME
+ _ZNK21QDeclarativeDomImport3uriEv @ 1330 NONAME ABSENT
+ _ZNK21QDeclarativeDomImport4typeEv @ 1331 NONAME ABSENT
+ _ZNK21QDeclarativeDomImport7versionEv @ 1332 NONAME ABSENT
+ _ZNK21QDeclarativeDomImport9qualifierEv @ 1333 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject10objectTypeEv @ 1334 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject10propertiesEv @ 1335 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject11isComponentEv @ 1336 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject11toComponentEv @ 1337 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject12isCustomTypeEv @ 1338 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject14customTypeDataEv @ 1339 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject15dynamicPropertyERK10QByteArray @ 1340 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject15objectClassNameEv @ 1341 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject17dynamicPropertiesEv @ 1342 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject22objectTypeMajorVersionEv @ 1343 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject22objectTypeMinorVersionEv @ 1344 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject3urlEv @ 1345 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject6lengthEv @ 1346 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject7isValidEv @ 1347 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject8objectIdEv @ 1348 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject8positionEv @ 1349 NONAME ABSENT
+ _ZNK21QDeclarativeDomObject8propertyERK10QByteArray @ 1350 NONAME ABSENT
+ _ZNK21QDeclarativeListModel10metaObjectEv @ 1351 NONAME ABSENT
+ _ZNK21QDeclarativeListModel3getEi @ 1352 NONAME ABSENT
_ZNK21QDeclarativeListModel4dataEiRK5QListIiE @ 1353 NONAME ABSENT
- _ZNK21QDeclarativeListModel4dataEii @ 1354 NONAME
- _ZNK21QDeclarativeListModel5countEv @ 1355 NONAME
- _ZNK21QDeclarativeListModel5rolesEv @ 1356 NONAME
- _ZNK21QDeclarativeListModel8toStringEi @ 1357 NONAME
- _ZNK21QDeclarativeRectangle10metaObjectEv @ 1358 NONAME
- _ZNK21QDeclarativeRectangle12boundingRectEv @ 1359 NONAME
- _ZNK21QDeclarativeRectangle5colorEv @ 1360 NONAME
- _ZNK21QDeclarativeRectangle6radiusEv @ 1361 NONAME
- _ZNK21QDeclarativeRectangle8gradientEv @ 1362 NONAME
- _ZNK21QDeclarativeScaleGrid10metaObjectEv @ 1363 NONAME
- _ZNK21QDeclarativeScaleGrid6isNullEv @ 1364 NONAME
- _ZNK21QDeclarativeValueType10metaObjectEv @ 1365 NONAME
- _ZNK22QDeclarativeDebugQuery10metaObjectEv @ 1366 NONAME
- _ZNK22QDeclarativeDebugQuery5stateEv @ 1367 NONAME
- _ZNK22QDeclarativeDebugQuery9isWaitingEv @ 1368 NONAME
- _ZNK22QDeclarativeDebugWatch10metaObjectEv @ 1369 NONAME
- _ZNK22QDeclarativeDebugWatch13objectDebugIdEv @ 1370 NONAME
- _ZNK22QDeclarativeDebugWatch5stateEv @ 1371 NONAME
- _ZNK22QDeclarativeDebugWatch7queryIdEv @ 1372 NONAME
+ _ZNK21QDeclarativeListModel4dataEii @ 1354 NONAME ABSENT
+ _ZNK21QDeclarativeListModel5countEv @ 1355 NONAME ABSENT
+ _ZNK21QDeclarativeListModel5rolesEv @ 1356 NONAME ABSENT
+ _ZNK21QDeclarativeListModel8toStringEi @ 1357 NONAME ABSENT
+ _ZNK21QDeclarativeRectangle10metaObjectEv @ 1358 NONAME ABSENT
+ _ZNK21QDeclarativeRectangle12boundingRectEv @ 1359 NONAME ABSENT
+ _ZNK21QDeclarativeRectangle5colorEv @ 1360 NONAME ABSENT
+ _ZNK21QDeclarativeRectangle6radiusEv @ 1361 NONAME ABSENT
+ _ZNK21QDeclarativeRectangle8gradientEv @ 1362 NONAME ABSENT
+ _ZNK21QDeclarativeScaleGrid10metaObjectEv @ 1363 NONAME ABSENT
+ _ZNK21QDeclarativeScaleGrid6isNullEv @ 1364 NONAME ABSENT
+ _ZNK21QDeclarativeValueType10metaObjectEv @ 1365 NONAME ABSENT
+ _ZNK22QDeclarativeDebugQuery10metaObjectEv @ 1366 NONAME ABSENT
+ _ZNK22QDeclarativeDebugQuery5stateEv @ 1367 NONAME ABSENT
+ _ZNK22QDeclarativeDebugQuery9isWaitingEv @ 1368 NONAME ABSENT
+ _ZNK22QDeclarativeDebugWatch10metaObjectEv @ 1369 NONAME ABSENT
+ _ZNK22QDeclarativeDebugWatch13objectDebugIdEv @ 1370 NONAME ABSENT
+ _ZNK22QDeclarativeDebugWatch5stateEv @ 1371 NONAME ABSENT
+ _ZNK22QDeclarativeDebugWatch7queryIdEv @ 1372 NONAME ABSENT
_ZNK22QDeclarativeExpression10expressionEv @ 1373 NONAME
_ZNK22QDeclarativeExpression10lineNumberEv @ 1374 NONAME
_ZNK22QDeclarativeExpression10metaObjectEv @ 1375 NONAME
@@ -1389,21 +1389,21 @@ EXPORTS
_ZNK22QDeclarativeTransition10reversibleEv @ 1388 NONAME
_ZNK22QDeclarativeTransition7toStateEv @ 1389 NONAME
_ZNK22QDeclarativeTransition9fromStateEv @ 1390 NONAME
- _ZNK23QDeclarativeDebugClient10metaObjectEv @ 1391 NONAME
+ _ZNK23QDeclarativeDebugClient10metaObjectEv @ 1391 NONAME ABSENT
_ZNK23QDeclarativeDebugClient11isConnectedEv @ 1392 NONAME ABSENT
- _ZNK23QDeclarativeDebugClient4nameEv @ 1393 NONAME
+ _ZNK23QDeclarativeDebugClient4nameEv @ 1393 NONAME ABSENT
_ZNK23QDeclarativeDebugClient9isEnabledEv @ 1394 NONAME ABSENT
- _ZNK23QDeclarativeDomDocument10rootObjectEv @ 1395 NONAME
- _ZNK23QDeclarativeDomDocument6errorsEv @ 1396 NONAME
- _ZNK23QDeclarativeDomDocument7importsEv @ 1397 NONAME
- _ZNK23QDeclarativeDomProperty12propertyNameEv @ 1398 NONAME
- _ZNK23QDeclarativeDomProperty17isDefaultPropertyEv @ 1399 NONAME
- _ZNK23QDeclarativeDomProperty17propertyNamePartsEv @ 1400 NONAME
- _ZNK23QDeclarativeDomProperty5valueEv @ 1401 NONAME
- _ZNK23QDeclarativeDomProperty6lengthEv @ 1402 NONAME
- _ZNK23QDeclarativeDomProperty7isValidEv @ 1403 NONAME
- _ZNK23QDeclarativeDomProperty8positionEv @ 1404 NONAME
- _ZNK23QDeclarativeEngineDebug10metaObjectEv @ 1405 NONAME
+ _ZNK23QDeclarativeDomDocument10rootObjectEv @ 1395 NONAME ABSENT
+ _ZNK23QDeclarativeDomDocument6errorsEv @ 1396 NONAME ABSENT
+ _ZNK23QDeclarativeDomDocument7importsEv @ 1397 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty12propertyNameEv @ 1398 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty17isDefaultPropertyEv @ 1399 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty17propertyNamePartsEv @ 1400 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty5valueEv @ 1401 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty6lengthEv @ 1402 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty7isValidEv @ 1403 NONAME ABSENT
+ _ZNK23QDeclarativeDomProperty8positionEv @ 1404 NONAME ABSENT
+ _ZNK23QDeclarativeEngineDebug10metaObjectEv @ 1405 NONAME ABSENT
_ZNK23QDeclarativeItemPrivate14verticalCenterEv @ 1406 NONAME
_ZNK23QDeclarativeItemPrivate16horizontalCenterEv @ 1407 NONAME
_ZNK23QDeclarativeItemPrivate22computeTransformOriginEv @ 1408 NONAME
@@ -1425,10 +1425,10 @@ EXPORTS
_ZNK23QDeclarativePropertyMapixERK7QString @ 1424 NONAME
_ZNK24QDeclarativeCustomParser11resolveTypeERK10QByteArray @ 1425 NONAME
_ZNK24QDeclarativeCustomParser12evaluateEnumERK10QByteArray @ 1426 NONAME
- _ZNK24QDeclarativeDebugService10metaObjectEv @ 1427 NONAME
- _ZNK24QDeclarativeDebugService4nameEv @ 1428 NONAME
+ _ZNK24QDeclarativeDebugService10metaObjectEv @ 1427 NONAME ABSENT
+ _ZNK24QDeclarativeDebugService4nameEv @ 1428 NONAME ABSENT
_ZNK24QDeclarativeDebugService9isEnabledEv @ 1429 NONAME ABSENT
- _ZNK24QDeclarativeDomComponent13componentRootEv @ 1430 NONAME
+ _ZNK24QDeclarativeDomComponent13componentRootEv @ 1430 NONAME ABSENT
_ZNK24QDeclarativeScriptString11scopeObjectEv @ 1431 NONAME
_ZNK24QDeclarativeScriptString6scriptEv @ 1432 NONAME
_ZNK24QDeclarativeScriptString7contextEv @ 1433 NONAME
@@ -1444,193 +1444,193 @@ EXPORTS
_ZNK25QDeclarativeListReference8canClearEv @ 1443 NONAME
_ZNK25QDeclarativeListReference8canCountEv @ 1444 NONAME
_ZNK25QDeclarativeListReference9canAppendEv @ 1445 NONAME
- _ZNK26QDeclarativeOpenMetaObject4nameEi @ 1446 NONAME
- _ZNK26QDeclarativeOpenMetaObject4typeEv @ 1447 NONAME
- _ZNK26QDeclarativeOpenMetaObject5countEv @ 1448 NONAME
- _ZNK26QDeclarativeOpenMetaObject5valueERK10QByteArray @ 1449 NONAME
- _ZNK26QDeclarativeOpenMetaObject5valueEi @ 1450 NONAME
- _ZNK26QDeclarativeOpenMetaObject6objectEv @ 1451 NONAME
- _ZNK26QDeclarativeOpenMetaObject6parentEv @ 1452 NONAME
- _ZNK26QDeclarativeOpenMetaObject8hasValueEi @ 1453 NONAME
+ _ZNK26QDeclarativeOpenMetaObject4nameEi @ 1446 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject4typeEv @ 1447 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject5countEv @ 1448 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject5valueERK10QByteArray @ 1449 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject5valueEi @ 1450 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject6objectEv @ 1451 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject6parentEv @ 1452 NONAME ABSENT
+ _ZNK26QDeclarativeOpenMetaObject8hasValueEi @ 1453 NONAME ABSENT
_ZNK26QDeclarativeStateOperation10metaObjectEv @ 1454 NONAME
- _ZNK27QDeclarativeAbstractBinding10expressionEv @ 1455 NONAME
- _ZNK27QDeclarativeDebugConnection10metaObjectEv @ 1456 NONAME
- _ZNK27QDeclarativeDebugConnection11isConnectedEv @ 1457 NONAME
- _ZNK27QDeclarativeDomValueBinding7bindingEv @ 1458 NONAME
- _ZNK27QDeclarativeDomValueLiteral7literalEv @ 1459 NONAME
+ _ZNK27QDeclarativeAbstractBinding10expressionEv @ 1455 NONAME ABSENT
+ _ZNK27QDeclarativeDebugConnection10metaObjectEv @ 1456 NONAME ABSENT
+ _ZNK27QDeclarativeDebugConnection11isConnectedEv @ 1457 NONAME ABSENT
+ _ZNK27QDeclarativeDomValueBinding7bindingEv @ 1458 NONAME ABSENT
+ _ZNK27QDeclarativeDomValueLiteral7literalEv @ 1459 NONAME ABSENT
_ZNK27QDeclarativeExtensionPlugin10metaObjectEv @ 1460 NONAME
- _ZNK27QDeclarativeGridScaledImage10gridBottomEv @ 1461 NONAME
- _ZNK27QDeclarativeGridScaledImage7gridTopEv @ 1462 NONAME
- _ZNK27QDeclarativeGridScaledImage7isValidEv @ 1463 NONAME
- _ZNK27QDeclarativeGridScaledImage8gridLeftEv @ 1464 NONAME
- _ZNK27QDeclarativeGridScaledImage9gridRightEv @ 1465 NONAME
- _ZNK27QDeclarativeGridScaledImage9pixmapUrlEv @ 1466 NONAME
- _ZNK27QDeclarativePropertyPrivate11isValueTypeEv @ 1467 NONAME
- _ZNK27QDeclarativePropertyPrivate12propertyTypeEv @ 1468 NONAME
- _ZNK27QDeclarativePropertyPrivate20propertyTypeCategoryEv @ 1469 NONAME
+ _ZNK27QDeclarativeGridScaledImage10gridBottomEv @ 1461 NONAME ABSENT
+ _ZNK27QDeclarativeGridScaledImage7gridTopEv @ 1462 NONAME ABSENT
+ _ZNK27QDeclarativeGridScaledImage7isValidEv @ 1463 NONAME ABSENT
+ _ZNK27QDeclarativeGridScaledImage8gridLeftEv @ 1464 NONAME ABSENT
+ _ZNK27QDeclarativeGridScaledImage9gridRightEv @ 1465 NONAME ABSENT
+ _ZNK27QDeclarativeGridScaledImage9pixmapUrlEv @ 1466 NONAME ABSENT
+ _ZNK27QDeclarativePropertyPrivate11isValueTypeEv @ 1467 NONAME ABSENT
+ _ZNK27QDeclarativePropertyPrivate12propertyTypeEv @ 1468 NONAME ABSENT
+ _ZNK27QDeclarativePropertyPrivate20propertyTypeCategoryEv @ 1469 NONAME ABSENT
_ZNK28QDeclarativeCustomParserNode10propertiesEv @ 1470 NONAME
_ZNK28QDeclarativeCustomParserNode4nameEv @ 1471 NONAME
_ZNK28QDeclarativeCustomParserNode8locationEv @ 1472 NONAME
- _ZNK28QDeclarativeDebugObjectQuery10metaObjectEv @ 1473 NONAME
- _ZNK28QDeclarativeDebugObjectQuery6objectEv @ 1474 NONAME
- _ZNK29QDeclarativeDebugEnginesQuery10metaObjectEv @ 1475 NONAME
- _ZNK29QDeclarativeDebugEnginesQuery7enginesEv @ 1476 NONAME
- _ZNK30QDeclarativeDebugFileReference10lineNumberEv @ 1477 NONAME
- _ZNK30QDeclarativeDebugFileReference12columnNumberEv @ 1478 NONAME
- _ZNK30QDeclarativeDebugFileReference3urlEv @ 1479 NONAME
- _ZNK30QDeclarativeDebugPropertyWatch10metaObjectEv @ 1480 NONAME
- _ZNK30QDeclarativeDebugPropertyWatch4nameEv @ 1481 NONAME
- _ZNK30QDeclarativeDomDynamicProperty12defaultValueEv @ 1482 NONAME
- _ZNK30QDeclarativeDomDynamicProperty12propertyNameEv @ 1483 NONAME
- _ZNK30QDeclarativeDomDynamicProperty12propertyTypeEv @ 1484 NONAME
- _ZNK30QDeclarativeDomDynamicProperty16propertyTypeNameEv @ 1485 NONAME
- _ZNK30QDeclarativeDomDynamicProperty17isDefaultPropertyEv @ 1486 NONAME
- _ZNK30QDeclarativeDomDynamicProperty6lengthEv @ 1487 NONAME
- _ZNK30QDeclarativeDomDynamicProperty7isAliasEv @ 1488 NONAME
- _ZNK30QDeclarativeDomDynamicProperty7isValidEv @ 1489 NONAME
- _ZNK30QDeclarativeDomDynamicProperty8positionEv @ 1490 NONAME
- _ZNK30QDeclarativeOpenMetaObjectType12signalOffsetEv @ 1491 NONAME
- _ZNK30QDeclarativeOpenMetaObjectType14propertyOffsetEv @ 1492 NONAME
- _ZNK31QDeclarativeDomValueValueSource6objectEv @ 1493 NONAME
+ _ZNK28QDeclarativeDebugObjectQuery10metaObjectEv @ 1473 NONAME ABSENT
+ _ZNK28QDeclarativeDebugObjectQuery6objectEv @ 1474 NONAME ABSENT
+ _ZNK29QDeclarativeDebugEnginesQuery10metaObjectEv @ 1475 NONAME ABSENT
+ _ZNK29QDeclarativeDebugEnginesQuery7enginesEv @ 1476 NONAME ABSENT
+ _ZNK30QDeclarativeDebugFileReference10lineNumberEv @ 1477 NONAME ABSENT
+ _ZNK30QDeclarativeDebugFileReference12columnNumberEv @ 1478 NONAME ABSENT
+ _ZNK30QDeclarativeDebugFileReference3urlEv @ 1479 NONAME ABSENT
+ _ZNK30QDeclarativeDebugPropertyWatch10metaObjectEv @ 1480 NONAME ABSENT
+ _ZNK30QDeclarativeDebugPropertyWatch4nameEv @ 1481 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty12defaultValueEv @ 1482 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty12propertyNameEv @ 1483 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty12propertyTypeEv @ 1484 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty16propertyTypeNameEv @ 1485 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty17isDefaultPropertyEv @ 1486 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty6lengthEv @ 1487 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty7isAliasEv @ 1488 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty7isValidEv @ 1489 NONAME ABSENT
+ _ZNK30QDeclarativeDomDynamicProperty8positionEv @ 1490 NONAME ABSENT
+ _ZNK30QDeclarativeOpenMetaObjectType12signalOffsetEv @ 1491 NONAME ABSENT
+ _ZNK30QDeclarativeOpenMetaObjectType14propertyOffsetEv @ 1492 NONAME ABSENT
+ _ZNK31QDeclarativeDomValueValueSource6objectEv @ 1493 NONAME ABSENT
_ZNK32QDeclarativeCustomParserProperty14assignedValuesEv @ 1494 NONAME
_ZNK32QDeclarativeCustomParserProperty4nameEv @ 1495 NONAME
_ZNK32QDeclarativeCustomParserProperty6isListEv @ 1496 NONAME
_ZNK32QDeclarativeCustomParserProperty8locationEv @ 1497 NONAME
- _ZNK32QDeclarativeDebugEngineReference4nameEv @ 1498 NONAME
- _ZNK32QDeclarativeDebugEngineReference7debugIdEv @ 1499 NONAME
- _ZNK32QDeclarativeDebugExpressionQuery10expressionEv @ 1500 NONAME
- _ZNK32QDeclarativeDebugExpressionQuery10metaObjectEv @ 1501 NONAME
- _ZNK32QDeclarativeDebugExpressionQuery6resultEv @ 1502 NONAME
- _ZNK32QDeclarativeDebugObjectReference10propertiesEv @ 1503 NONAME
- _ZNK32QDeclarativeDebugObjectReference14contextDebugIdEv @ 1504 NONAME
- _ZNK32QDeclarativeDebugObjectReference4nameEv @ 1505 NONAME
- _ZNK32QDeclarativeDebugObjectReference6sourceEv @ 1506 NONAME
- _ZNK32QDeclarativeDebugObjectReference7debugIdEv @ 1507 NONAME
- _ZNK32QDeclarativeDebugObjectReference8childrenEv @ 1508 NONAME
- _ZNK32QDeclarativeDebugObjectReference8idStringEv @ 1509 NONAME
- _ZNK32QDeclarativeDebugObjectReference9classNameEv @ 1510 NONAME
- _ZNK33QDeclarativeDebugContextReference4nameEv @ 1511 NONAME
- _ZNK33QDeclarativeDebugContextReference7debugIdEv @ 1512 NONAME
- _ZNK33QDeclarativeDebugContextReference7objectsEv @ 1513 NONAME
- _ZNK33QDeclarativeDebugContextReference8contextsEv @ 1514 NONAME
- _ZNK33QDeclarativeDebugRootContextQuery10metaObjectEv @ 1515 NONAME
- _ZNK33QDeclarativeDebugRootContextQuery11rootContextEv @ 1516 NONAME
- _ZNK34QDeclarativeDebugPropertyReference13objectDebugIdEv @ 1517 NONAME
- _ZNK34QDeclarativeDebugPropertyReference13valueTypeNameEv @ 1518 NONAME
- _ZNK34QDeclarativeDebugPropertyReference15hasNotifySignalEv @ 1519 NONAME
- _ZNK34QDeclarativeDebugPropertyReference4nameEv @ 1520 NONAME
- _ZNK34QDeclarativeDebugPropertyReference5valueEv @ 1521 NONAME
- _ZNK34QDeclarativeDebugPropertyReference7bindingEv @ 1522 NONAME
- _ZNK36QDeclarativeDomValueValueInterceptor6objectEv @ 1523 NONAME
- _ZNK38QDeclarativeDebugObjectExpressionWatch10expressionEv @ 1524 NONAME
- _ZNK38QDeclarativeDebugObjectExpressionWatch10metaObjectEv @ 1525 NONAME
- _ZNK7QPacket7isEmptyEv @ 1526 NONAME
- _ZTI15QDeclarativePen @ 1527 NONAME
- _ZTI15QPacketAutoSend @ 1528 NONAME
- _ZTI15QPacketProtocol @ 1529 NONAME
+ _ZNK32QDeclarativeDebugEngineReference4nameEv @ 1498 NONAME ABSENT
+ _ZNK32QDeclarativeDebugEngineReference7debugIdEv @ 1499 NONAME ABSENT
+ _ZNK32QDeclarativeDebugExpressionQuery10expressionEv @ 1500 NONAME ABSENT
+ _ZNK32QDeclarativeDebugExpressionQuery10metaObjectEv @ 1501 NONAME ABSENT
+ _ZNK32QDeclarativeDebugExpressionQuery6resultEv @ 1502 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference10propertiesEv @ 1503 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference14contextDebugIdEv @ 1504 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference4nameEv @ 1505 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference6sourceEv @ 1506 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference7debugIdEv @ 1507 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference8childrenEv @ 1508 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference8idStringEv @ 1509 NONAME ABSENT
+ _ZNK32QDeclarativeDebugObjectReference9classNameEv @ 1510 NONAME ABSENT
+ _ZNK33QDeclarativeDebugContextReference4nameEv @ 1511 NONAME ABSENT
+ _ZNK33QDeclarativeDebugContextReference7debugIdEv @ 1512 NONAME ABSENT
+ _ZNK33QDeclarativeDebugContextReference7objectsEv @ 1513 NONAME ABSENT
+ _ZNK33QDeclarativeDebugContextReference8contextsEv @ 1514 NONAME ABSENT
+ _ZNK33QDeclarativeDebugRootContextQuery10metaObjectEv @ 1515 NONAME ABSENT
+ _ZNK33QDeclarativeDebugRootContextQuery11rootContextEv @ 1516 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference13objectDebugIdEv @ 1517 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference13valueTypeNameEv @ 1518 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference15hasNotifySignalEv @ 1519 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference4nameEv @ 1520 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference5valueEv @ 1521 NONAME ABSENT
+ _ZNK34QDeclarativeDebugPropertyReference7bindingEv @ 1522 NONAME ABSENT
+ _ZNK36QDeclarativeDomValueValueInterceptor6objectEv @ 1523 NONAME ABSENT
+ _ZNK38QDeclarativeDebugObjectExpressionWatch10expressionEv @ 1524 NONAME ABSENT
+ _ZNK38QDeclarativeDebugObjectExpressionWatch10metaObjectEv @ 1525 NONAME ABSENT
+ _ZNK7QPacket7isEmptyEv @ 1526 NONAME ABSENT
+ _ZTI15QDeclarativePen @ 1527 NONAME ABSENT
+ _ZTI15QPacketAutoSend @ 1528 NONAME ABSENT
+ _ZTI15QPacketProtocol @ 1529 NONAME ABSENT
_ZTI16QDeclarativeItem @ 1530 NONAME
- _ZTI16QDeclarativeText @ 1531 NONAME
+ _ZTI16QDeclarativeText @ 1531 NONAME ABSENT
_ZTI16QDeclarativeView @ 1532 NONAME
_ZTI17QDeclarativeState @ 1533 NONAME
_ZTI18QDeclarativeEngine @ 1534 NONAME
- _ZTI18QMetaObjectBuilder @ 1535 NONAME
- _ZTI19QDeclarativeAnchors @ 1536 NONAME
- _ZTI19QDeclarativeBinding @ 1537 NONAME
+ _ZTI18QMetaObjectBuilder @ 1535 NONAME ABSENT
+ _ZTI19QDeclarativeAnchors @ 1536 NONAME ABSENT
+ _ZTI19QDeclarativeBinding @ 1537 NONAME ABSENT
_ZTI19QDeclarativeContext @ 1538 NONAME
- _ZTI19QListModelInterface @ 1539 NONAME
- _ZTI20QDeclarativeBehavior @ 1540 NONAME
+ _ZTI19QListModelInterface @ 1539 NONAME ABSENT
+ _ZTI20QDeclarativeBehavior @ 1540 NONAME ABSENT
_ZTI21QDeclarativeComponent @ 1541 NONAME
- _ZTI21QDeclarativeListModel @ 1542 NONAME
- _ZTI21QDeclarativeRectangle @ 1543 NONAME
- _ZTI21QDeclarativeScaleGrid @ 1544 NONAME
- _ZTI21QDeclarativeValueType @ 1545 NONAME
- _ZTI22QDeclarativeDebugQuery @ 1546 NONAME
- _ZTI22QDeclarativeDebugWatch @ 1547 NONAME
+ _ZTI21QDeclarativeListModel @ 1542 NONAME ABSENT
+ _ZTI21QDeclarativeRectangle @ 1543 NONAME ABSENT
+ _ZTI21QDeclarativeScaleGrid @ 1544 NONAME ABSENT
+ _ZTI21QDeclarativeValueType @ 1545 NONAME ABSENT
+ _ZTI22QDeclarativeDebugQuery @ 1546 NONAME ABSENT
+ _ZTI22QDeclarativeDebugWatch @ 1547 NONAME ABSENT
_ZTI22QDeclarativeExpression @ 1548 NONAME
_ZTI22QDeclarativeStateGroup @ 1549 NONAME
_ZTI22QDeclarativeTransition @ 1550 NONAME
- _ZTI23QDeclarativeDebugClient @ 1551 NONAME
- _ZTI23QDeclarativeEngineDebug @ 1552 NONAME
+ _ZTI23QDeclarativeDebugClient @ 1551 NONAME ABSENT
+ _ZTI23QDeclarativeEngineDebug @ 1552 NONAME ABSENT
_ZTI23QDeclarativeItemPrivate @ 1553 NONAME
_ZTI23QDeclarativePropertyMap @ 1554 NONAME
_ZTI24QDeclarativeCustomParser @ 1555 NONAME
- _ZTI24QDeclarativeDebugService @ 1556 NONAME
+ _ZTI24QDeclarativeDebugService @ 1556 NONAME ABSENT
_ZTI24QDeclarativeParserStatus @ 1557 NONAME
_ZTI25QDeclarativeImageProvider @ 1558 NONAME
- _ZTI26QDeclarativeDebuggerStatus @ 1559 NONAME
- _ZTI26QDeclarativeOpenMetaObject @ 1560 NONAME
+ _ZTI26QDeclarativeDebuggerStatus @ 1559 NONAME ABSENT
+ _ZTI26QDeclarativeOpenMetaObject @ 1560 NONAME ABSENT
_ZTI26QDeclarativeStateOperation @ 1561 NONAME
- _ZTI27QDeclarativeAbstractBinding @ 1562 NONAME
- _ZTI27QDeclarativeDebugConnection @ 1563 NONAME
+ _ZTI27QDeclarativeAbstractBinding @ 1562 NONAME ABSENT
+ _ZTI27QDeclarativeDebugConnection @ 1563 NONAME ABSENT
_ZTI27QDeclarativeExtensionPlugin @ 1564 NONAME
- _ZTI28QDeclarativeDebugObjectQuery @ 1565 NONAME
- _ZTI29QDeclarativeDebugEnginesQuery @ 1566 NONAME
- _ZTI30QDeclarativeDebugPropertyWatch @ 1567 NONAME
+ _ZTI28QDeclarativeDebugObjectQuery @ 1565 NONAME ABSENT
+ _ZTI29QDeclarativeDebugEnginesQuery @ 1566 NONAME ABSENT
+ _ZTI30QDeclarativeDebugPropertyWatch @ 1567 NONAME ABSENT
_ZTI30QDeclarativeExtensionInterface @ 1568 NONAME
- _ZTI30QDeclarativeOpenMetaObjectType @ 1569 NONAME
+ _ZTI30QDeclarativeOpenMetaObjectType @ 1569 NONAME ABSENT
_ZTI31QDeclarativePropertyValueSource @ 1570 NONAME
- _ZTI32QDeclarativeDebugExpressionQuery @ 1571 NONAME
- _ZTI33QDeclarativeDebugRootContextQuery @ 1572 NONAME
+ _ZTI32QDeclarativeDebugExpressionQuery @ 1571 NONAME ABSENT
+ _ZTI33QDeclarativeDebugRootContextQuery @ 1572 NONAME ABSENT
_ZTI36QDeclarativePropertyValueInterceptor @ 1573 NONAME
- _ZTI38QDeclarativeDebugObjectExpressionWatch @ 1574 NONAME
+ _ZTI38QDeclarativeDebugObjectExpressionWatch @ 1574 NONAME ABSENT
_ZTI39QDeclarativeNetworkAccessManagerFactory @ 1575 NONAME
- _ZTI7QPacket @ 1576 NONAME
- _ZTV15QDeclarativePen @ 1577 NONAME
- _ZTV15QPacketAutoSend @ 1578 NONAME
- _ZTV15QPacketProtocol @ 1579 NONAME
+ _ZTI7QPacket @ 1576 NONAME ABSENT
+ _ZTV15QDeclarativePen @ 1577 NONAME ABSENT
+ _ZTV15QPacketAutoSend @ 1578 NONAME ABSENT
+ _ZTV15QPacketProtocol @ 1579 NONAME ABSENT
_ZTV16QDeclarativeItem @ 1580 NONAME
- _ZTV16QDeclarativeText @ 1581 NONAME
+ _ZTV16QDeclarativeText @ 1581 NONAME ABSENT
_ZTV16QDeclarativeView @ 1582 NONAME
_ZTV17QDeclarativeState @ 1583 NONAME
_ZTV18QDeclarativeEngine @ 1584 NONAME
- _ZTV18QMetaObjectBuilder @ 1585 NONAME
- _ZTV19QDeclarativeAnchors @ 1586 NONAME
- _ZTV19QDeclarativeBinding @ 1587 NONAME
+ _ZTV18QMetaObjectBuilder @ 1585 NONAME ABSENT
+ _ZTV19QDeclarativeAnchors @ 1586 NONAME ABSENT
+ _ZTV19QDeclarativeBinding @ 1587 NONAME ABSENT
_ZTV19QDeclarativeContext @ 1588 NONAME
- _ZTV19QListModelInterface @ 1589 NONAME
- _ZTV20QDeclarativeBehavior @ 1590 NONAME
+ _ZTV19QListModelInterface @ 1589 NONAME ABSENT
+ _ZTV20QDeclarativeBehavior @ 1590 NONAME ABSENT
_ZTV21QDeclarativeComponent @ 1591 NONAME
- _ZTV21QDeclarativeListModel @ 1592 NONAME
- _ZTV21QDeclarativeRectangle @ 1593 NONAME
- _ZTV21QDeclarativeScaleGrid @ 1594 NONAME
- _ZTV21QDeclarativeValueType @ 1595 NONAME
- _ZTV22QDeclarativeDebugQuery @ 1596 NONAME
- _ZTV22QDeclarativeDebugWatch @ 1597 NONAME
+ _ZTV21QDeclarativeListModel @ 1592 NONAME ABSENT
+ _ZTV21QDeclarativeRectangle @ 1593 NONAME ABSENT
+ _ZTV21QDeclarativeScaleGrid @ 1594 NONAME ABSENT
+ _ZTV21QDeclarativeValueType @ 1595 NONAME ABSENT
+ _ZTV22QDeclarativeDebugQuery @ 1596 NONAME ABSENT
+ _ZTV22QDeclarativeDebugWatch @ 1597 NONAME ABSENT
_ZTV22QDeclarativeExpression @ 1598 NONAME
_ZTV22QDeclarativeStateGroup @ 1599 NONAME
_ZTV22QDeclarativeTransition @ 1600 NONAME
- _ZTV23QDeclarativeDebugClient @ 1601 NONAME
- _ZTV23QDeclarativeEngineDebug @ 1602 NONAME
+ _ZTV23QDeclarativeDebugClient @ 1601 NONAME ABSENT
+ _ZTV23QDeclarativeEngineDebug @ 1602 NONAME ABSENT
_ZTV23QDeclarativeItemPrivate @ 1603 NONAME
_ZTV23QDeclarativePropertyMap @ 1604 NONAME
_ZTV24QDeclarativeCustomParser @ 1605 NONAME
- _ZTV24QDeclarativeDebugService @ 1606 NONAME
+ _ZTV24QDeclarativeDebugService @ 1606 NONAME ABSENT
_ZTV24QDeclarativeParserStatus @ 1607 NONAME
_ZTV25QDeclarativeImageProvider @ 1608 NONAME
- _ZTV26QDeclarativeDebuggerStatus @ 1609 NONAME
- _ZTV26QDeclarativeOpenMetaObject @ 1610 NONAME
+ _ZTV26QDeclarativeDebuggerStatus @ 1609 NONAME ABSENT
+ _ZTV26QDeclarativeOpenMetaObject @ 1610 NONAME ABSENT
_ZTV26QDeclarativeStateOperation @ 1611 NONAME
- _ZTV27QDeclarativeAbstractBinding @ 1612 NONAME
- _ZTV27QDeclarativeDebugConnection @ 1613 NONAME
+ _ZTV27QDeclarativeAbstractBinding @ 1612 NONAME ABSENT
+ _ZTV27QDeclarativeDebugConnection @ 1613 NONAME ABSENT
_ZTV27QDeclarativeExtensionPlugin @ 1614 NONAME
- _ZTV28QDeclarativeDebugObjectQuery @ 1615 NONAME
- _ZTV29QDeclarativeDebugEnginesQuery @ 1616 NONAME
- _ZTV30QDeclarativeDebugPropertyWatch @ 1617 NONAME
- _ZTV30QDeclarativeOpenMetaObjectType @ 1618 NONAME
+ _ZTV28QDeclarativeDebugObjectQuery @ 1615 NONAME ABSENT
+ _ZTV29QDeclarativeDebugEnginesQuery @ 1616 NONAME ABSENT
+ _ZTV30QDeclarativeDebugPropertyWatch @ 1617 NONAME ABSENT
+ _ZTV30QDeclarativeOpenMetaObjectType @ 1618 NONAME ABSENT
_ZTV31QDeclarativePropertyValueSource @ 1619 NONAME
- _ZTV32QDeclarativeDebugExpressionQuery @ 1620 NONAME
- _ZTV33QDeclarativeDebugRootContextQuery @ 1621 NONAME
+ _ZTV32QDeclarativeDebugExpressionQuery @ 1620 NONAME ABSENT
+ _ZTV33QDeclarativeDebugRootContextQuery @ 1621 NONAME ABSENT
_ZTV36QDeclarativePropertyValueInterceptor @ 1622 NONAME
- _ZTV38QDeclarativeDebugObjectExpressionWatch @ 1623 NONAME
+ _ZTV38QDeclarativeDebugObjectExpressionWatch @ 1623 NONAME ABSENT
_ZTV39QDeclarativeNetworkAccessManagerFactory @ 1624 NONAME
- _ZTV7QPacket @ 1625 NONAME
+ _ZTV7QPacket @ 1625 NONAME ABSENT
_ZThn16_N16QDeclarativeItem10classBeginEv @ 1626 NONAME
_ZThn16_N16QDeclarativeItem17componentCompleteEv @ 1627 NONAME
_ZThn16_N16QDeclarativeItemD0Ev @ 1628 NONAME
_ZThn16_N16QDeclarativeItemD1Ev @ 1629 NONAME
- _ZThn16_N16QDeclarativeText17componentCompleteEv @ 1630 NONAME
- _ZThn16_N16QDeclarativeTextD0Ev @ 1631 NONAME
- _ZThn16_N16QDeclarativeTextD1Ev @ 1632 NONAME
+ _ZThn16_N16QDeclarativeText17componentCompleteEv @ 1630 NONAME ABSENT
+ _ZThn16_N16QDeclarativeTextD0Ev @ 1631 NONAME ABSENT
+ _ZThn16_N16QDeclarativeTextD1Ev @ 1632 NONAME ABSENT
_ZThn8_N16QDeclarativeItem10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1633 NONAME
_ZThn8_N16QDeclarativeItem10sceneEventEP6QEvent @ 1634 NONAME
_ZThn8_N16QDeclarativeItem13keyPressEventEP9QKeyEvent @ 1635 NONAME
@@ -1639,23 +1639,23 @@ EXPORTS
_ZThn8_N16QDeclarativeItem5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1638 NONAME
_ZThn8_N16QDeclarativeItemD0Ev @ 1639 NONAME
_ZThn8_N16QDeclarativeItemD1Ev @ 1640 NONAME
- _ZThn8_N16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 1641 NONAME
- _ZThn8_N16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 1642 NONAME
- _ZThn8_N16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1643 NONAME
- _ZThn8_N16QDeclarativeTextD0Ev @ 1644 NONAME
- _ZThn8_N16QDeclarativeTextD1Ev @ 1645 NONAME
+ _ZThn8_N16QDeclarativeText15mousePressEventEP24QGraphicsSceneMouseEvent @ 1641 NONAME ABSENT
+ _ZThn8_N16QDeclarativeText17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 1642 NONAME ABSENT
+ _ZThn8_N16QDeclarativeText5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1643 NONAME ABSENT
+ _ZThn8_N16QDeclarativeTextD0Ev @ 1644 NONAME ABSENT
+ _ZThn8_N16QDeclarativeTextD1Ev @ 1645 NONAME ABSENT
_ZThn8_N16QDeclarativeViewD0Ev @ 1646 NONAME
_ZThn8_N16QDeclarativeViewD1Ev @ 1647 NONAME
- _ZThn8_N19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1648 NONAME
- _ZThn8_N19QDeclarativeBinding13propertyIndexEv @ 1649 NONAME
- _ZThn8_N19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1650 NONAME
- _ZThn8_N19QDeclarativeBindingD0Ev @ 1651 NONAME
- _ZThn8_N19QDeclarativeBindingD1Ev @ 1652 NONAME
- _ZThn8_N20QDeclarativeBehavior5writeERK8QVariant @ 1653 NONAME
- _ZThn8_N20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 1654 NONAME
- _ZThn8_N20QDeclarativeBehaviorD0Ev @ 1655 NONAME
- _ZThn8_N20QDeclarativeBehaviorD1Ev @ 1656 NONAME
- _ZThn8_N21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1657 NONAME
+ _ZThn8_N19QDeclarativeBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1648 NONAME ABSENT
+ _ZThn8_N19QDeclarativeBinding13propertyIndexEv @ 1649 NONAME ABSENT
+ _ZThn8_N19QDeclarativeBinding6updateE6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 1650 NONAME ABSENT
+ _ZThn8_N19QDeclarativeBindingD0Ev @ 1651 NONAME ABSENT
+ _ZThn8_N19QDeclarativeBindingD1Ev @ 1652 NONAME ABSENT
+ _ZThn8_N20QDeclarativeBehavior5writeERK8QVariant @ 1653 NONAME ABSENT
+ _ZThn8_N20QDeclarativeBehavior9setTargetERK20QDeclarativeProperty @ 1654 NONAME ABSENT
+ _ZThn8_N20QDeclarativeBehaviorD0Ev @ 1655 NONAME ABSENT
+ _ZThn8_N20QDeclarativeBehaviorD1Ev @ 1656 NONAME ABSENT
+ _ZThn8_N21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1657 NONAME ABSENT
_ZThn8_N22QDeclarativeStateGroup10classBeginEv @ 1658 NONAME
_ZThn8_N22QDeclarativeStateGroup17componentCompleteEv @ 1659 NONAME
_ZThn8_N22QDeclarativeStateGroupD0Ev @ 1660 NONAME
@@ -1665,16 +1665,16 @@ EXPORTS
_ZThn8_N27QDeclarativeExtensionPluginD1Ev @ 1664 NONAME
_ZThn8_NK16QDeclarativeItem12boundingRectEv @ 1665 NONAME
_ZThn8_NK16QDeclarativeItem16inputMethodQueryEN2Qt16InputMethodQueryE @ 1666 NONAME
- _ZThn8_NK16QDeclarativeText12boundingRectEv @ 1667 NONAME
- _ZThn8_NK19QDeclarativeBinding10expressionEv @ 1668 NONAME
- _ZThn8_NK21QDeclarativeRectangle12boundingRectEv @ 1669 NONAME
+ _ZThn8_NK16QDeclarativeText12boundingRectEv @ 1667 NONAME ABSENT
+ _ZThn8_NK19QDeclarativeBinding10expressionEv @ 1668 NONAME ABSENT
+ _ZThn8_NK21QDeclarativeRectangle12boundingRectEv @ 1669 NONAME ABSENT
_Zls6QDebugP16QDeclarativeItem @ 1670 NONAME
_Zls6QDebugRK17QDeclarativeError @ 1671 NONAME
- _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1672 NONAME
- _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1673 NONAME
- _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1674 NONAME
- _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1675 NONAME
- _ZN23QDeclarativeEngineDebug10newObjectsEv @ 1676 NONAME
+ _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1672 NONAME ABSENT
+ _ZlsR11QDataStreamRKN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1673 NONAME ABSENT
+ _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1674 NONAME ABSENT
+ _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1675 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug10newObjectsEv @ 1676 NONAME ABSENT
_ZN17QDeclarativeState20addEntryToRevertListERK18QDeclarativeAction @ 1677 NONAME
_ZN17QDeclarativeState22addEntriesToRevertListERK5QListI18QDeclarativeActionE @ 1678 NONAME
_ZN17QDeclarativeState23changeValueInRevertListEP7QObjectRK10QByteArrayRK8QVariant @ 1679 NONAME
@@ -1686,202 +1686,203 @@ EXPORTS
_ZN23QDeclarativeItemPrivate15resources_clearEP24QDeclarativeListPropertyI7QObjectE @ 1685 NONAME
_ZN23QDeclarativeItemPrivate7data_atEP24QDeclarativeListPropertyI7QObjectEi @ 1686 NONAME
_ZN26QDeclarativeStateOperation8setStateEP17QDeclarativeState @ 1687 NONAME
- _ZN27QDeclarativeAbstractBinding11weakPointerEv @ 1688 NONAME
- _ZN27QDeclarativePropertyChanges11changeValueERK10QByteArrayRK8QVariant @ 1689 NONAME
- _ZN27QDeclarativePropertyChanges11qt_metacallEN11QMetaObject4CallEiPPv @ 1690 NONAME
- _ZN27QDeclarativePropertyChanges11qt_metacastEPKc @ 1691 NONAME
- _ZN27QDeclarativePropertyChanges13attachToStateEv @ 1692 NONAME
- _ZN27QDeclarativePropertyChanges13setIsExplicitEb @ 1693 NONAME
- _ZN27QDeclarativePropertyChanges14removePropertyERK10QByteArray @ 1694 NONAME
- _ZN27QDeclarativePropertyChanges15detachFromStateEv @ 1695 NONAME
- _ZN27QDeclarativePropertyChanges16changeExpressionERK10QByteArrayRK7QString @ 1696 NONAME
- _ZN27QDeclarativePropertyChanges16staticMetaObjectE @ 1697 NONAME DATA 16
- _ZN27QDeclarativePropertyChanges19getStaticMetaObjectEv @ 1698 NONAME
- _ZN27QDeclarativePropertyChanges21setRestoreEntryValuesEb @ 1699 NONAME
- _ZN27QDeclarativePropertyChanges7actionsEv @ 1700 NONAME
- _ZN27QDeclarativePropertyChanges9setObjectEP7QObject @ 1701 NONAME
- _ZN27QDeclarativePropertyChangesC1Ev @ 1702 NONAME
- _ZN27QDeclarativePropertyChangesC2Ev @ 1703 NONAME
- _ZN27QDeclarativePropertyChangesD0Ev @ 1704 NONAME
- _ZN27QDeclarativePropertyChangesD1Ev @ 1705 NONAME
- _ZN27QDeclarativePropertyChangesD2Ev @ 1706 NONAME
+ _ZN27QDeclarativeAbstractBinding11weakPointerEv @ 1688 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges11changeValueERK10QByteArrayRK8QVariant @ 1689 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges11qt_metacallEN11QMetaObject4CallEiPPv @ 1690 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges11qt_metacastEPKc @ 1691 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges13attachToStateEv @ 1692 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges13setIsExplicitEb @ 1693 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges14removePropertyERK10QByteArray @ 1694 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges15detachFromStateEv @ 1695 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges16changeExpressionERK10QByteArrayRK7QString @ 1696 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges16staticMetaObjectE @ 1697 NONAME DATA 16 ABSENT
+ _ZN27QDeclarativePropertyChanges19getStaticMetaObjectEv @ 1698 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges21setRestoreEntryValuesEb @ 1699 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges7actionsEv @ 1700 NONAME ABSENT
+ _ZN27QDeclarativePropertyChanges9setObjectEP7QObject @ 1701 NONAME ABSENT
+ _ZN27QDeclarativePropertyChangesC1Ev @ 1702 NONAME ABSENT
+ _ZN27QDeclarativePropertyChangesC2Ev @ 1703 NONAME ABSENT
+ _ZN27QDeclarativePropertyChangesD0Ev @ 1704 NONAME ABSENT
+ _ZN27QDeclarativePropertyChangesD1Ev @ 1705 NONAME ABSENT
+ _ZN27QDeclarativePropertyChangesD2Ev @ 1706 NONAME ABSENT
_ZNK17QDeclarativeState13isStateActiveEv @ 1707 NONAME
_ZNK17QDeclarativeState17valueInRevertListEP7QObjectRK10QByteArray @ 1708 NONAME
_ZNK17QDeclarativeState19bindingInRevertListEP7QObjectRK10QByteArray @ 1709 NONAME
_ZNK17QDeclarativeState28containsPropertyInRevertListEP7QObjectRK10QByteArray @ 1710 NONAME
_ZNK26QDeclarativeStateOperation5stateEv @ 1711 NONAME
- _ZNK27QDeclarativePropertyChanges10expressionERK10QByteArray @ 1712 NONAME
- _ZNK27QDeclarativePropertyChanges10isExplicitEv @ 1713 NONAME
- _ZNK27QDeclarativePropertyChanges10metaObjectEv @ 1714 NONAME
- _ZNK27QDeclarativePropertyChanges13containsValueERK10QByteArray @ 1715 NONAME
- _ZNK27QDeclarativePropertyChanges16containsPropertyERK10QByteArray @ 1716 NONAME
- _ZNK27QDeclarativePropertyChanges18containsExpressionERK10QByteArray @ 1717 NONAME
- _ZNK27QDeclarativePropertyChanges18restoreEntryValuesEv @ 1718 NONAME
- _ZNK27QDeclarativePropertyChanges5valueERK10QByteArray @ 1719 NONAME
- _ZNK27QDeclarativePropertyChanges6objectEv @ 1720 NONAME
- _ZNK27QDeclarativePropertyChanges8propertyERK10QByteArray @ 1721 NONAME
- _ZTI27QDeclarativePropertyChanges @ 1722 NONAME
- _ZTV27QDeclarativePropertyChanges @ 1723 NONAME
- _ZN24QDeclarativeScriptAction10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEN29QDeclarativeAbstractAnimation19TransitionDirectionE @ 1724 NONAME
- _ZN24QDeclarativeScriptAction11qtAnimationEv @ 1725 NONAME
- _ZN24QDeclarativeScriptAction11qt_metacallEN11QMetaObject4CallEiPPv @ 1726 NONAME
- _ZN24QDeclarativeScriptAction11qt_metacastEPKc @ 1727 NONAME
- _ZN24QDeclarativeScriptAction16staticMetaObjectE @ 1728 NONAME DATA 16
- _ZN24QDeclarativeScriptAction19getStaticMetaObjectEv @ 1729 NONAME
- _ZN24QDeclarativeScriptAction24setStateChangeScriptNameERK7QString @ 1730 NONAME
- _ZN24QDeclarativeScriptAction9setScriptERK24QDeclarativeScriptString @ 1731 NONAME
- _ZN24QDeclarativeScriptActionC1EP7QObject @ 1732 NONAME
- _ZN24QDeclarativeScriptActionC2EP7QObject @ 1733 NONAME
- _ZN24QDeclarativeScriptActionD0Ev @ 1734 NONAME
- _ZN24QDeclarativeScriptActionD1Ev @ 1735 NONAME
- _ZN24QDeclarativeScriptActionD2Ev @ 1736 NONAME
- _ZNK24QDeclarativeScriptAction10metaObjectEv @ 1737 NONAME
- _ZNK24QDeclarativeScriptAction21stateChangeScriptNameEv @ 1738 NONAME
- _ZNK24QDeclarativeScriptAction6scriptEv @ 1739 NONAME
- _ZTI24QDeclarativeScriptAction @ 1740 NONAME
- _ZTV24QDeclarativeScriptAction @ 1741 NONAME
- _ZThn12_N24QDeclarativeScriptActionD0Ev @ 1742 NONAME
- _ZThn12_N24QDeclarativeScriptActionD1Ev @ 1743 NONAME
- _ZThn8_N24QDeclarativeScriptActionD0Ev @ 1744 NONAME
- _ZThn8_N24QDeclarativeScriptActionD1Ev @ 1745 NONAME
- _ZN21QDeclarativeListModelC1EPKS_P32QDeclarativeListModelWorkerAgent @ 1746 NONAME
- _ZN21QDeclarativeListModelC2EPKS_P32QDeclarativeListModelWorkerAgent @ 1747 NONAME
- _ZNK21QDeclarativeListModel14inWorkerThreadEv @ 1748 NONAME
- _ZN17QDeclarativeTimer10classBeginEv @ 1749 NONAME
- _ZN17QDeclarativeTimer10setRunningEb @ 1750 NONAME
- _ZN17QDeclarativeTimer11qt_metacallEN11QMetaObject4CallEiPPv @ 1751 NONAME
- _ZN17QDeclarativeTimer11qt_metacastEPKc @ 1752 NONAME
- _ZN17QDeclarativeTimer11setIntervalEi @ 1753 NONAME
- _ZN17QDeclarativeTimer12setRepeatingEb @ 1754 NONAME
- _ZN17QDeclarativeTimer13repeatChangedEv @ 1755 NONAME
- _ZN17QDeclarativeTimer14runningChangedEv @ 1756 NONAME
- _ZN17QDeclarativeTimer15intervalChangedEv @ 1757 NONAME
- _ZN17QDeclarativeTimer16staticMetaObjectE @ 1758 NONAME DATA 16
- _ZN17QDeclarativeTimer17componentCompleteEv @ 1759 NONAME
- _ZN17QDeclarativeTimer19getStaticMetaObjectEv @ 1760 NONAME
- _ZN17QDeclarativeTimer19setTriggeredOnStartEb @ 1761 NONAME
- _ZN17QDeclarativeTimer23triggeredOnStartChangedEv @ 1762 NONAME
- _ZN17QDeclarativeTimer4stopEv @ 1763 NONAME
- _ZN17QDeclarativeTimer5startEv @ 1764 NONAME
- _ZN17QDeclarativeTimer6tickedEv @ 1765 NONAME
- _ZN17QDeclarativeTimer6updateEv @ 1766 NONAME
- _ZN17QDeclarativeTimer7restartEv @ 1767 NONAME
- _ZN17QDeclarativeTimer8finishedEv @ 1768 NONAME
- _ZN17QDeclarativeTimer9triggeredEv @ 1769 NONAME
- _ZN17QDeclarativeTimerC1EP7QObject @ 1770 NONAME
- _ZN17QDeclarativeTimerC2EP7QObject @ 1771 NONAME
- _ZN23QDeclarativeDebugClient13statusChangedENS_6StatusE @ 1772 NONAME
- _ZN23QDeclarativeDebugClientD0Ev @ 1773 NONAME
- _ZN23QDeclarativeDebugClientD1Ev @ 1774 NONAME
- _ZN23QDeclarativeDebugClientD2Ev @ 1775 NONAME
- _ZN23QDeclarativeDebugHelper15getScriptEngineEP18QDeclarativeEngine @ 1776 NONAME
- _ZN23QDeclarativeDebugHelper26setAnimationSlowDownFactorEf @ 1777 NONAME
- _ZN23QDeclarativeEngineDebug13statusChangedENS_6StatusE @ 1778 NONAME
- _ZN24QDeclarativeDebugService13statusChangedENS_6StatusE @ 1779 NONAME
- _ZN24QDeclarativeDebugServiceD0Ev @ 1780 NONAME
- _ZN24QDeclarativeDebugServiceD1Ev @ 1781 NONAME
- _ZN24QDeclarativeDebugServiceD2Ev @ 1782 NONAME
- _ZN26QDeclarativeBasePositioner10addChangedEv @ 1783 NONAME
- _ZN26QDeclarativeBasePositioner10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1784 NONAME
- _ZN26QDeclarativeBasePositioner10setSpacingEi @ 1785 NONAME
- _ZN26QDeclarativeBasePositioner11moveChangedEv @ 1786 NONAME
- _ZN26QDeclarativeBasePositioner11qt_metacallEN11QMetaObject4CallEiPPv @ 1787 NONAME
- _ZN26QDeclarativeBasePositioner11qt_metacastEPKc @ 1788 NONAME
- _ZN26QDeclarativeBasePositioner14prePositioningEv @ 1789 NONAME
- _ZN26QDeclarativeBasePositioner14spacingChangedEv @ 1790 NONAME
- _ZN26QDeclarativeBasePositioner16staticMetaObjectE @ 1791 NONAME DATA 16
- _ZN26QDeclarativeBasePositioner17componentCompleteEv @ 1792 NONAME
- _ZN26QDeclarativeBasePositioner19getStaticMetaObjectEv @ 1793 NONAME
- _ZN26QDeclarativeBasePositioner22finishApplyTransitionsEv @ 1794 NONAME
- _ZN26QDeclarativeBasePositioner29graphicsWidgetGeometryChangedEv @ 1795 NONAME
- _ZN26QDeclarativeBasePositioner6setAddEP22QDeclarativeTransition @ 1796 NONAME
- _ZN26QDeclarativeBasePositioner7setMoveEP22QDeclarativeTransition @ 1797 NONAME
- _ZN26QDeclarativeBasePositioner9positionXEiRKNS_14PositionedItemE @ 1798 NONAME
- _ZN26QDeclarativeBasePositioner9positionYEiRKNS_14PositionedItemE @ 1799 NONAME
- _ZN26QDeclarativeBasePositionerC2ENS_14PositionerTypeEP16QDeclarativeItem @ 1800 NONAME
- _ZN26QDeclarativeBasePositionerC2ER33QDeclarativeBasePositionerPrivateNS_14PositionerTypeEP16QDeclarativeItem @ 1801 NONAME
- _ZN26QDeclarativeBasePositionerD0Ev @ 1802 NONAME
- _ZN26QDeclarativeBasePositionerD1Ev @ 1803 NONAME
- _ZN26QDeclarativeBasePositionerD2Ev @ 1804 NONAME
- _ZN27QDeclarativeDebugConnectionD0Ev @ 1805 NONAME
- _ZN27QDeclarativeDebugConnectionD1Ev @ 1806 NONAME
- _ZN27QDeclarativeDebugConnectionD2Ev @ 1807 NONAME
- _ZN27QDeclarativePropertyPrivate7connectEPK7QObjectiS2_iiPi @ 1808 NONAME
- _ZN29QDeclarativeAbstractAnimation10classBeginEv @ 1809 NONAME
- _ZN29QDeclarativeAbstractAnimation10setRunningEb @ 1810 NONAME
- _ZN29QDeclarativeAbstractAnimation10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyENS_19TransitionDirectionE @ 1811 NONAME
- _ZN29QDeclarativeAbstractAnimation11currentTimeEv @ 1812 NONAME
- _ZN29QDeclarativeAbstractAnimation11qt_metacallEN11QMetaObject4CallEiPPv @ 1813 NONAME
- _ZN29QDeclarativeAbstractAnimation11qt_metacastEPKc @ 1814 NONAME
- _ZN29QDeclarativeAbstractAnimation13pausedChangedEb @ 1815 NONAME
- _ZN29QDeclarativeAbstractAnimation14runningChangedEb @ 1816 NONAME
- _ZN29QDeclarativeAbstractAnimation14setCurrentTimeEi @ 1817 NONAME
- _ZN29QDeclarativeAbstractAnimation16loopCountChangedEi @ 1818 NONAME
- _ZN29QDeclarativeAbstractAnimation16setDefaultTargetERK20QDeclarativeProperty @ 1819 NONAME
- _ZN29QDeclarativeAbstractAnimation16staticMetaObjectE @ 1820 NONAME DATA 16
- _ZN29QDeclarativeAbstractAnimation16timelineCompleteEv @ 1821 NONAME
- _ZN29QDeclarativeAbstractAnimation17componentCompleteEv @ 1822 NONAME
- _ZN29QDeclarativeAbstractAnimation17setAlwaysRunToEndEb @ 1823 NONAME
- _ZN29QDeclarativeAbstractAnimation18componentFinalizedEv @ 1824 NONAME
- _ZN29QDeclarativeAbstractAnimation19getStaticMetaObjectEv @ 1825 NONAME
- _ZN29QDeclarativeAbstractAnimation20notifyRunningChangedEb @ 1826 NONAME
- _ZN29QDeclarativeAbstractAnimation21alwaysRunToEndChangedEb @ 1827 NONAME
- _ZN29QDeclarativeAbstractAnimation21setDisableUserControlEv @ 1828 NONAME
- _ZN29QDeclarativeAbstractAnimation4stopEv @ 1829 NONAME
- _ZN29QDeclarativeAbstractAnimation5pauseEv @ 1830 NONAME
- _ZN29QDeclarativeAbstractAnimation5startEv @ 1831 NONAME
- _ZN29QDeclarativeAbstractAnimation6resumeEv @ 1832 NONAME
- _ZN29QDeclarativeAbstractAnimation7restartEv @ 1833 NONAME
- _ZN29QDeclarativeAbstractAnimation7startedEv @ 1834 NONAME
- _ZN29QDeclarativeAbstractAnimation8completeEv @ 1835 NONAME
- _ZN29QDeclarativeAbstractAnimation8setGroupEP26QDeclarativeAnimationGroup @ 1836 NONAME
- _ZN29QDeclarativeAbstractAnimation8setLoopsEi @ 1837 NONAME
- _ZN29QDeclarativeAbstractAnimation9completedEv @ 1838 NONAME
- _ZN29QDeclarativeAbstractAnimation9setPausedEb @ 1839 NONAME
- _ZN29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1840 NONAME
- _ZN29QDeclarativeAbstractAnimationC2EP7QObject @ 1841 NONAME
- _ZN29QDeclarativeAbstractAnimationC2ER36QDeclarativeAbstractAnimationPrivateP7QObject @ 1842 NONAME
- _ZN29QDeclarativeAbstractAnimationD0Ev @ 1843 NONAME
- _ZN29QDeclarativeAbstractAnimationD1Ev @ 1844 NONAME
- _ZN29QDeclarativeAbstractAnimationD2Ev @ 1845 NONAME
- _ZNK16QDeclarativeType20attachedPropertiesIdEv @ 1846 NONAME
- _ZNK17QDeclarativeTimer10metaObjectEv @ 1847 NONAME
- _ZNK17QDeclarativeTimer11isRepeatingEv @ 1848 NONAME
- _ZNK17QDeclarativeTimer16triggeredOnStartEv @ 1849 NONAME
- _ZNK17QDeclarativeTimer8intervalEv @ 1850 NONAME
- _ZNK17QDeclarativeTimer9isRunningEv @ 1851 NONAME
- _ZNK23QDeclarativeDebugClient6statusEv @ 1852 NONAME
- _ZNK23QDeclarativeEngineDebug6statusEv @ 1853 NONAME
- _ZNK24QDeclarativeDebugService6statusEv @ 1854 NONAME
- _ZNK26QDeclarativeBasePositioner10metaObjectEv @ 1855 NONAME
- _ZNK26QDeclarativeBasePositioner3addEv @ 1856 NONAME
- _ZNK26QDeclarativeBasePositioner4moveEv @ 1857 NONAME
- _ZNK26QDeclarativeBasePositioner7spacingEv @ 1858 NONAME
- _ZNK29QDeclarativeAbstractAnimation10metaObjectEv @ 1859 NONAME
- _ZNK29QDeclarativeAbstractAnimation14alwaysRunToEndEv @ 1860 NONAME
- _ZNK29QDeclarativeAbstractAnimation5groupEv @ 1861 NONAME
- _ZNK29QDeclarativeAbstractAnimation5loopsEv @ 1862 NONAME
- _ZNK29QDeclarativeAbstractAnimation8isPausedEv @ 1863 NONAME
- _ZNK29QDeclarativeAbstractAnimation9isRunningEv @ 1864 NONAME
- _ZTI17QDeclarativeTimer @ 1865 NONAME
- _ZTI26QDeclarativeBasePositioner @ 1866 NONAME
- _ZTI29QDeclarativeAbstractAnimation @ 1867 NONAME
- _ZTV17QDeclarativeTimer @ 1868 NONAME
- _ZTV26QDeclarativeBasePositioner @ 1869 NONAME
- _ZTV29QDeclarativeAbstractAnimation @ 1870 NONAME
- _ZThn12_N29QDeclarativeAbstractAnimation10classBeginEv @ 1871 NONAME
- _ZThn12_N29QDeclarativeAbstractAnimation17componentCompleteEv @ 1872 NONAME
- _ZThn12_N29QDeclarativeAbstractAnimationD0Ev @ 1873 NONAME
- _ZThn12_N29QDeclarativeAbstractAnimationD1Ev @ 1874 NONAME
- _ZThn16_N26QDeclarativeBasePositioner17componentCompleteEv @ 1875 NONAME
- _ZThn16_N26QDeclarativeBasePositionerD0Ev @ 1876 NONAME
- _ZThn16_N26QDeclarativeBasePositionerD1Ev @ 1877 NONAME
- _ZThn8_N17QDeclarativeTimer10classBeginEv @ 1878 NONAME
- _ZThn8_N17QDeclarativeTimer17componentCompleteEv @ 1879 NONAME
- _ZThn8_N26QDeclarativeBasePositioner10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1880 NONAME
- _ZThn8_N26QDeclarativeBasePositionerD0Ev @ 1881 NONAME
- _ZThn8_N26QDeclarativeBasePositionerD1Ev @ 1882 NONAME
- _ZThn8_N29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1883 NONAME
- _ZThn8_N29QDeclarativeAbstractAnimationD0Ev @ 1884 NONAME
- _ZThn8_N29QDeclarativeAbstractAnimationD1Ev @ 1885 NONAME
+ _ZNK27QDeclarativePropertyChanges10expressionERK10QByteArray @ 1712 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges10isExplicitEv @ 1713 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges10metaObjectEv @ 1714 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges13containsValueERK10QByteArray @ 1715 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges16containsPropertyERK10QByteArray @ 1716 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges18containsExpressionERK10QByteArray @ 1717 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges18restoreEntryValuesEv @ 1718 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges5valueERK10QByteArray @ 1719 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges6objectEv @ 1720 NONAME ABSENT
+ _ZNK27QDeclarativePropertyChanges8propertyERK10QByteArray @ 1721 NONAME ABSENT
+ _ZTI27QDeclarativePropertyChanges @ 1722 NONAME ABSENT
+ _ZTV27QDeclarativePropertyChanges @ 1723 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEN29QDeclarativeAbstractAnimation19TransitionDirectionE @ 1724 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction11qtAnimationEv @ 1725 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction11qt_metacallEN11QMetaObject4CallEiPPv @ 1726 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction11qt_metacastEPKc @ 1727 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction16staticMetaObjectE @ 1728 NONAME DATA 16 ABSENT
+ _ZN24QDeclarativeScriptAction19getStaticMetaObjectEv @ 1729 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction24setStateChangeScriptNameERK7QString @ 1730 NONAME ABSENT
+ _ZN24QDeclarativeScriptAction9setScriptERK24QDeclarativeScriptString @ 1731 NONAME ABSENT
+ _ZN24QDeclarativeScriptActionC1EP7QObject @ 1732 NONAME ABSENT
+ _ZN24QDeclarativeScriptActionC2EP7QObject @ 1733 NONAME ABSENT
+ _ZN24QDeclarativeScriptActionD0Ev @ 1734 NONAME ABSENT
+ _ZN24QDeclarativeScriptActionD1Ev @ 1735 NONAME ABSENT
+ _ZN24QDeclarativeScriptActionD2Ev @ 1736 NONAME ABSENT
+ _ZNK24QDeclarativeScriptAction10metaObjectEv @ 1737 NONAME ABSENT
+ _ZNK24QDeclarativeScriptAction21stateChangeScriptNameEv @ 1738 NONAME ABSENT
+ _ZNK24QDeclarativeScriptAction6scriptEv @ 1739 NONAME ABSENT
+ _ZTI24QDeclarativeScriptAction @ 1740 NONAME ABSENT
+ _ZTV24QDeclarativeScriptAction @ 1741 NONAME ABSENT
+ _ZThn12_N24QDeclarativeScriptActionD0Ev @ 1742 NONAME ABSENT
+ _ZThn12_N24QDeclarativeScriptActionD1Ev @ 1743 NONAME ABSENT
+ _ZThn8_N24QDeclarativeScriptActionD0Ev @ 1744 NONAME ABSENT
+ _ZThn8_N24QDeclarativeScriptActionD1Ev @ 1745 NONAME ABSENT
+ _ZN21QDeclarativeListModelC1EPKS_P32QDeclarativeListModelWorkerAgent @ 1746 NONAME ABSENT
+ _ZN21QDeclarativeListModelC2EPKS_P32QDeclarativeListModelWorkerAgent @ 1747 NONAME ABSENT
+ _ZNK21QDeclarativeListModel14inWorkerThreadEv @ 1748 NONAME ABSENT
+ _ZN23QDeclarativeDebugHelper15getScriptEngineEP18QDeclarativeEngine @ 1749 NONAME ABSENT
+ _ZN23QDeclarativeDebugHelper26setAnimationSlowDownFactorEf @ 1750 NONAME ABSENT
+ _ZN17QDeclarativeTimer10classBeginEv @ 1751 NONAME ABSENT
+ _ZN17QDeclarativeTimer10setRunningEb @ 1752 NONAME ABSENT
+ _ZN17QDeclarativeTimer11qt_metacallEN11QMetaObject4CallEiPPv @ 1753 NONAME ABSENT
+ _ZN17QDeclarativeTimer11qt_metacastEPKc @ 1754 NONAME ABSENT
+ _ZN17QDeclarativeTimer11setIntervalEi @ 1755 NONAME ABSENT
+ _ZN17QDeclarativeTimer12setRepeatingEb @ 1756 NONAME ABSENT
+ _ZN17QDeclarativeTimer13repeatChangedEv @ 1757 NONAME ABSENT
+ _ZN17QDeclarativeTimer14runningChangedEv @ 1758 NONAME ABSENT
+ _ZN17QDeclarativeTimer15intervalChangedEv @ 1759 NONAME ABSENT
+ _ZN17QDeclarativeTimer16staticMetaObjectE @ 1760 NONAME DATA 16 ABSENT
+ _ZN17QDeclarativeTimer17componentCompleteEv @ 1761 NONAME ABSENT
+ _ZN17QDeclarativeTimer19getStaticMetaObjectEv @ 1762 NONAME ABSENT
+ _ZN17QDeclarativeTimer19setTriggeredOnStartEb @ 1763 NONAME ABSENT
+ _ZN17QDeclarativeTimer23triggeredOnStartChangedEv @ 1764 NONAME ABSENT
+ _ZN17QDeclarativeTimer4stopEv @ 1765 NONAME ABSENT
+ _ZN17QDeclarativeTimer5startEv @ 1766 NONAME ABSENT
+ _ZN17QDeclarativeTimer6tickedEv @ 1767 NONAME ABSENT
+ _ZN17QDeclarativeTimer6updateEv @ 1768 NONAME ABSENT
+ _ZN17QDeclarativeTimer7restartEv @ 1769 NONAME ABSENT
+ _ZN17QDeclarativeTimer8finishedEv @ 1770 NONAME ABSENT
+ _ZN17QDeclarativeTimer9triggeredEv @ 1771 NONAME ABSENT
+ _ZN17QDeclarativeTimerC1EP7QObject @ 1772 NONAME ABSENT
+ _ZN17QDeclarativeTimerC2EP7QObject @ 1773 NONAME ABSENT
+ _ZN23QDeclarativeDebugClient13statusChangedENS_6StatusE @ 1774 NONAME ABSENT
+ _ZN23QDeclarativeDebugClientD0Ev @ 1775 NONAME ABSENT
+ _ZN23QDeclarativeDebugClientD1Ev @ 1776 NONAME ABSENT
+ _ZN23QDeclarativeDebugClientD2Ev @ 1777 NONAME ABSENT
+ _ZN23QDeclarativeEngineDebug13statusChangedENS_6StatusE @ 1778 NONAME ABSENT
+ _ZN24QDeclarativeDebugService13statusChangedENS_6StatusE @ 1779 NONAME ABSENT
+ _ZN24QDeclarativeDebugServiceD0Ev @ 1780 NONAME ABSENT
+ _ZN24QDeclarativeDebugServiceD1Ev @ 1781 NONAME ABSENT
+ _ZN24QDeclarativeDebugServiceD2Ev @ 1782 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner10addChangedEv @ 1783 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1784 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner10setSpacingEi @ 1785 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner11moveChangedEv @ 1786 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner11qt_metacallEN11QMetaObject4CallEiPPv @ 1787 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner11qt_metacastEPKc @ 1788 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner14prePositioningEv @ 1789 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner14spacingChangedEv @ 1790 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner16staticMetaObjectE @ 1791 NONAME DATA 16 ABSENT
+ _ZN26QDeclarativeBasePositioner17componentCompleteEv @ 1792 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner19getStaticMetaObjectEv @ 1793 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner22finishApplyTransitionsEv @ 1794 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner29graphicsWidgetGeometryChangedEv @ 1795 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner6setAddEP22QDeclarativeTransition @ 1796 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner7setMoveEP22QDeclarativeTransition @ 1797 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner9positionXEiRKNS_14PositionedItemE @ 1798 NONAME ABSENT
+ _ZN26QDeclarativeBasePositioner9positionYEiRKNS_14PositionedItemE @ 1799 NONAME ABSENT
+ _ZN26QDeclarativeBasePositionerC2ENS_14PositionerTypeEP16QDeclarativeItem @ 1800 NONAME ABSENT
+ _ZN26QDeclarativeBasePositionerC2ER33QDeclarativeBasePositionerPrivateNS_14PositionerTypeEP16QDeclarativeItem @ 1801 NONAME ABSENT
+ _ZN26QDeclarativeBasePositionerD0Ev @ 1802 NONAME ABSENT
+ _ZN26QDeclarativeBasePositionerD1Ev @ 1803 NONAME ABSENT
+ _ZN26QDeclarativeBasePositionerD2Ev @ 1804 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnectionD0Ev @ 1805 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnectionD1Ev @ 1806 NONAME ABSENT
+ _ZN27QDeclarativeDebugConnectionD2Ev @ 1807 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation10classBeginEv @ 1808 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation10setRunningEb @ 1809 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyENS_19TransitionDirectionE @ 1810 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation11currentTimeEv @ 1811 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation11qt_metacallEN11QMetaObject4CallEiPPv @ 1812 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation11qt_metacastEPKc @ 1813 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation13pausedChangedEb @ 1814 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation14runningChangedEb @ 1815 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation14setCurrentTimeEi @ 1816 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation16loopCountChangedEi @ 1817 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation16setDefaultTargetERK20QDeclarativeProperty @ 1818 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation16staticMetaObjectE @ 1819 NONAME DATA 16 ABSENT
+ _ZN29QDeclarativeAbstractAnimation16timelineCompleteEv @ 1820 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation17componentCompleteEv @ 1821 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation17setAlwaysRunToEndEb @ 1822 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation18componentFinalizedEv @ 1823 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation19getStaticMetaObjectEv @ 1824 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation20notifyRunningChangedEb @ 1825 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation21alwaysRunToEndChangedEb @ 1826 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation21setDisableUserControlEv @ 1827 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation4stopEv @ 1828 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation5pauseEv @ 1829 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation5startEv @ 1830 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation6resumeEv @ 1831 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation7restartEv @ 1832 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation7startedEv @ 1833 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation8completeEv @ 1834 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation8setGroupEP26QDeclarativeAnimationGroup @ 1835 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation8setLoopsEi @ 1836 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation9completedEv @ 1837 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation9setPausedEb @ 1838 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1839 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimationC2EP7QObject @ 1840 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimationC2ER36QDeclarativeAbstractAnimationPrivateP7QObject @ 1841 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimationD0Ev @ 1842 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimationD1Ev @ 1843 NONAME ABSENT
+ _ZN29QDeclarativeAbstractAnimationD2Ev @ 1844 NONAME ABSENT
+ _ZNK16QDeclarativeType20attachedPropertiesIdEv @ 1845 NONAME ABSENT
+ _ZNK17QDeclarativeTimer10metaObjectEv @ 1846 NONAME ABSENT
+ _ZNK17QDeclarativeTimer11isRepeatingEv @ 1847 NONAME ABSENT
+ _ZNK17QDeclarativeTimer16triggeredOnStartEv @ 1848 NONAME ABSENT
+ _ZNK17QDeclarativeTimer8intervalEv @ 1849 NONAME ABSENT
+ _ZNK17QDeclarativeTimer9isRunningEv @ 1850 NONAME ABSENT
+ _ZNK23QDeclarativeDebugClient6statusEv @ 1851 NONAME ABSENT
+ _ZNK23QDeclarativeEngineDebug6statusEv @ 1852 NONAME ABSENT
+ _ZNK24QDeclarativeDebugService6statusEv @ 1853 NONAME ABSENT
+ _ZNK26QDeclarativeBasePositioner10metaObjectEv @ 1854 NONAME ABSENT
+ _ZNK26QDeclarativeBasePositioner3addEv @ 1855 NONAME ABSENT
+ _ZNK26QDeclarativeBasePositioner4moveEv @ 1856 NONAME ABSENT
+ _ZNK26QDeclarativeBasePositioner7spacingEv @ 1857 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation10metaObjectEv @ 1858 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation14alwaysRunToEndEv @ 1859 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation5groupEv @ 1860 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation5loopsEv @ 1861 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation8isPausedEv @ 1862 NONAME ABSENT
+ _ZNK29QDeclarativeAbstractAnimation9isRunningEv @ 1863 NONAME ABSENT
+ _ZTI17QDeclarativeTimer @ 1864 NONAME ABSENT
+ _ZTI26QDeclarativeBasePositioner @ 1865 NONAME ABSENT
+ _ZTI29QDeclarativeAbstractAnimation @ 1866 NONAME ABSENT
+ _ZTV17QDeclarativeTimer @ 1867 NONAME ABSENT
+ _ZTV26QDeclarativeBasePositioner @ 1868 NONAME ABSENT
+ _ZTV29QDeclarativeAbstractAnimation @ 1869 NONAME ABSENT
+ _ZThn12_N29QDeclarativeAbstractAnimation10classBeginEv @ 1870 NONAME ABSENT
+ _ZThn12_N29QDeclarativeAbstractAnimation17componentCompleteEv @ 1871 NONAME ABSENT
+ _ZThn12_N29QDeclarativeAbstractAnimationD0Ev @ 1872 NONAME ABSENT
+ _ZThn12_N29QDeclarativeAbstractAnimationD1Ev @ 1873 NONAME ABSENT
+ _ZThn16_N26QDeclarativeBasePositioner17componentCompleteEv @ 1874 NONAME ABSENT
+ _ZThn16_N26QDeclarativeBasePositionerD0Ev @ 1875 NONAME ABSENT
+ _ZThn16_N26QDeclarativeBasePositionerD1Ev @ 1876 NONAME ABSENT
+ _ZThn8_N17QDeclarativeTimer10classBeginEv @ 1877 NONAME ABSENT
+ _ZThn8_N17QDeclarativeTimer17componentCompleteEv @ 1878 NONAME ABSENT
+ _ZThn8_N26QDeclarativeBasePositioner10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 1879 NONAME ABSENT
+ _ZThn8_N26QDeclarativeBasePositionerD0Ev @ 1880 NONAME ABSENT
+ _ZThn8_N26QDeclarativeBasePositionerD1Ev @ 1881 NONAME ABSENT
+ _ZThn8_N29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1882 NONAME ABSENT
+ _ZThn8_N29QDeclarativeAbstractAnimationD0Ev @ 1883 NONAME ABSENT
+ _ZThn8_N29QDeclarativeAbstractAnimationD1Ev @ 1884 NONAME ABSENT
+ _ZN23QDeclarativeDebugHelper15enableDebuggingEv @ 1885 NONAME
+ _ZN27QDeclarativePropertyPrivate7connectEPK7QObjectiS2_iiPi @ 1886 NONAME ABSENT
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 681649c..e2aec1d 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -12094,64 +12094,15 @@ EXPORTS
_ZN18QTapAndHoldGesture7timeoutEv @ 12093 NONAME
_ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12094 NONAME ABSENT
_ZN20QGraphicsItemPrivate14children_clearEP24QDeclarativeListPropertyI15QGraphicsObjectE @ 12095 NONAME
- _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4
+ _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4 ABSENT
_ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME
_ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME
- _ZNK5QFont14lastResortFontEv @ 12099 NONAME
- _ZN11QFontEngine19alphaRGBMapForGlyphEj6QFixediRK10QTransform @ 12100 NONAME
- _ZN11QFontEngine33convertToPostscriptFontFamilyNameERK10QByteArray @ 12101 NONAME
- _ZN18QTextureGlyphCache19fillInPendingGlyphsEv @ 12102 NONAME
- _ZN19QAbstractProxyModel11setItemDataERK11QModelIndexRK4QMapIi8QVariantE @ 12103 NONAME
- _ZN19QAbstractProxyModel4sortEiN2Qt9SortOrderE @ 12104 NONAME
- _ZN19QAbstractProxyModel9fetchMoreERK11QModelIndex @ 12105 NONAME
- _ZN19QApplicationPrivateC1ERiPPcN12QApplication4TypeEi @ 12106 NONAME
- _ZN19QApplicationPrivateC2ERiPPcN12QApplication4TypeEi @ 12107 NONAME
- _ZN19QGraphicsGridLayout10removeItemEP19QGraphicsLayoutItem @ 12108 NONAME
- _ZN23QImageTextureGlyphCache11fillTextureERKN18QTextureGlyphCache5CoordEj6QFixed @ 12109 NONAME
- _ZN6QImage4fillEN2Qt11GlobalColorE @ 12110 NONAME
- _ZN6QImage4fillERK6QColor @ 12111 NONAME
- _ZN7QGlyphs12setPositionsERK7QVectorI7QPointFE @ 12112 NONAME
- _ZN7QGlyphs15setGlyphIndexesERK7QVectorIjE @ 12113 NONAME
- _ZN7QGlyphs5clearEv @ 12114 NONAME
- _ZN7QGlyphs6detachEv @ 12115 NONAME
- _ZN7QGlyphs7setFontERK5QFont @ 12116 NONAME
- _ZN7QGlyphsC1ERKS_ @ 12117 NONAME
- _ZN7QGlyphsC1Ev @ 12118 NONAME
- _ZN7QGlyphsC2ERKS_ @ 12119 NONAME
- _ZN7QGlyphsC2Ev @ 12120 NONAME
- _ZN7QGlyphsD1Ev @ 12121 NONAME
- _ZN7QGlyphsD2Ev @ 12122 NONAME
- _ZN7QGlyphsaSERKS_ @ 12123 NONAME
- _ZN7QGlyphspLERKS_ @ 12124 NONAME
- _ZN8QPainter10drawGlyphsERK7QPointFRK7QGlyphs @ 12125 NONAME
- _ZNK10QTabWidget14heightForWidthEi @ 12126 NONAME
- _ZNK11QFontEngine18createExplicitFontEv @ 12127 NONAME
- _ZNK11QFontEngine26createExplicitFontWithNameERK7QString @ 12128 NONAME
- _ZNK11QTextLayout6glyphsEv @ 12129 NONAME
- _ZNK12QFontMetrics10inFontUcs4Ej @ 12130 NONAME
- _ZNK12QRadioButton15minimumSizeHintEv @ 12131 NONAME
- _ZNK13QFontMetricsF10inFontUcs4Ej @ 12132 NONAME
- _ZNK13QTextFragment6glyphsEv @ 12133 NONAME
- _ZNK14QWidgetPrivate17hasHeightForWidthEv @ 12134 NONAME
- _ZNK16QFileSystemModel5rmdirERK11QModelIndex @ 12135 NONAME
- _ZNK18QTextureGlyphCache18textureMapForGlyphEj6QFixed @ 12136 NONAME
- _ZNK18QTextureGlyphCache20subPixelPositionForXE6QFixed @ 12137 NONAME
- _ZNK18QTextureGlyphCache30calculateSubPixelPositionCountEj @ 12138 NONAME
- _ZNK19QAbstractProxyModel11hasChildrenERK11QModelIndex @ 12139 NONAME
- _ZNK19QAbstractProxyModel12canFetchMoreERK11QModelIndex @ 12140 NONAME
- _ZNK19QAbstractProxyModel20supportedDropActionsEv @ 12141 NONAME
- _ZNK19QAbstractProxyModel4spanERK11QModelIndex @ 12142 NONAME
- _ZNK19QAbstractProxyModel5buddyERK11QModelIndex @ 12143 NONAME
- _ZNK19QAbstractProxyModel8mimeDataERK5QListI11QModelIndexE @ 12144 NONAME
- _ZNK19QAbstractProxyModel9mimeTypesEv @ 12145 NONAME
- _ZNK7QGlyphs12glyphIndexesEv @ 12146 NONAME
- _ZNK7QGlyphs4fontEv @ 12147 NONAME
- _ZNK7QGlyphs9positionsEv @ 12148 NONAME
- _ZNK7QGlyphseqERKS_ @ 12149 NONAME
- _ZNK7QGlyphsneERKS_ @ 12150 NONAME
- _ZNK7QGlyphsplERKS_ @ 12151 NONAME
- _ZNK8QPainter16clipBoundingRectEv @ 12152 NONAME
- _ZNK9QCheckBox15minimumSizeHintEv @ 12153 NONAME
- _ZNK9QTextLine6glyphsEii @ 12154 NONAME
- _Zls6QDebugPK13QSymbianEvent @ 12155 NONAME
+ _ZN19QApplicationPrivate21qmljs_debug_argumentsE @ 12099 NONAME DATA 4
+ _ZN19QApplicationPrivate25qmljsDebugArgumentsStringEv @ 12100 NONAME
+ _ZNK5QFont14lastResortFontEv @ 12101 NONAME
+ _ZN11QFontEngine33convertToPostscriptFontFamilyNameERK10QByteArray @ 12102 NONAME
+ _ZN15QStaticTextItem13setFontEngineEP11QFontEngine @ 12103 NONAME
+ _ZN15QStaticTextItemD1Ev @ 12104 NONAME
+ _ZN15QStaticTextItemD2Ev @ 12105 NONAME
+ _ZN19QEventDispatcherS6031reactivateDeferredActiveObjectsEv @ 12106 NONAME
diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def
index 99942b8..e1828c1 100644
--- a/src/s60installs/eabi/QtOpenVGu.def
+++ b/src/s60installs/eabi/QtOpenVGu.def
@@ -205,4 +205,5 @@ EXPORTS
_ZN13QVGPixmapData20createPixmapForImageER6QImage6QFlagsIN2Qt19ImageConversionFlagEEb @ 204 NONAME
_ZN13QVGPixmapData8fromDataEPKhjPKc6QFlagsIN2Qt19ImageConversionFlagEE @ 205 NONAME
_ZN13QVGPixmapData8fromFileERK7QStringPKc6QFlagsIN2Qt19ImageConversionFlagEE @ 206 NONAME
+ _ZNK14QVGPaintEngine16canVgWritePixelsERK6QImage @ 207 NONAME
diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby
index b6cdce9..2b3be0a 100644
--- a/src/s60installs/qt.iby
+++ b/src/s60installs/qt.iby
@@ -53,10 +53,15 @@ file=ABI_DIR\BUILD_DIR\qaudio.dll SHARED_LIB_DIR\qaudio.dll
file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll
file=ABI_DIR\BUILD_DIR\qglgraphicssystem.dll SHARED_LIB_DIR\qglgraphicssystem.dll
+// bearer
+file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll
+
// S60 version compatibility plugins for 5.0 (3.1 and 3.2 devices are never likely to have this in ROM,
// so don't bother including those plugins
file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll
+file=ABI_DIR\BUILD_DIR\qtactilefeedback.dll SHARED_LIB_DIR\qtactilefeedback.dll
+
S60_APP_RESOURCE(s60main)
// imageformats stubs
@@ -99,6 +104,12 @@ data=\epoc32\data\qt\qtlibspluginstubs\qaudio.qtplugin resource\qt\plugins\audio
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin
+// bearer stub
+data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin
+
+// feedback
+data=\epoc32\data\z\resource\qt\plugins\feedback\qtactilefeedback.qtplugin resource\qt\plugins\feedback\qtactilefeedback.qtplugin
+
// Stub sis file
data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis
data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis
diff --git a/src/s60installs/qtdemoapps.iby b/src/s60installs/qtdemoapps.iby
deleted file mode 100644
index d888135..0000000
--- a/src/s60installs/qtdemoapps.iby
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef QTDEMOAPPS_IBY
-#define QTDEMOAPPS_IBY
-
-// A subset of Qt demo & example applications
-
-// Note that star requires OpenVG and the Qt OpenVG paint engine
-S60_APP_EXE(star)
-S60_APP_RESOURCE(star)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\star_reg.rsc \private\10003a3f\import\apps\star_reg.rsc
-
-S60_APP_EXE(wiggly)
-S60_APP_RESOURCE(wiggly)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\wiggly_reg.rsc \private\10003a3f\import\apps\wiggly_reg.rsc
-
-#endif // QTDEMOAPPS_IBY
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index c73ed06..2b3229e 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -35,7 +35,9 @@ symbian: {
}
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
- qtlibraries.sources = \
+ DESTDIR = $$QMAKE_LIBDIR_QT
+
+ qtlibraries.files = \
$$QMAKE_LIBDIR_QT/QtCore$${QT_LIBINFIX}.dll \
$$QMAKE_LIBDIR_QT/QtXml$${QT_LIBINFIX}.dll \
$$QMAKE_LIBDIR_QT/QtGui$${QT_LIBINFIX}.dll \
@@ -80,11 +82,17 @@ symbian: {
qts60plugindeployment = \
" \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\""
- bearer_plugin.sources = $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll
+ bearer_plugin.files = $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll
bearer_plugin.path = c:$$QT_PLUGINS_BASE_DIR/bearer
DEPLOYMENT += bearer_plugin
}
+ contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) {
+ feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll
+ feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback
+ DEPLOYMENT += feedback_plugin
+ }
+
qtlibraries.pkg_postrules += qts60plugindeployment
qtlibraries.path = c:/sys/bin
@@ -113,25 +121,25 @@ symbian: {
}
qtlibraries.pkg_prerules += "(0x2002af5f), 0, 5, 0, {\"sqlite3\"}"
- !contains(QT_CONFIG, no-jpeg): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qjpeg$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-gif): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qgif$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-mng): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qmng$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-tiff): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qtiff$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-ico): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qico$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-jpeg): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qjpeg$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-gif): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qgif$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-mng): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qmng$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-tiff): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qtiff$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-ico): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qico$${QT_LIBINFIX}.dll
imageformats_plugins.path = c:$$QT_PLUGINS_BASE_DIR/imageformats
- codecs_plugins.sources = $$QT_BUILD_TREE/plugins/codecs/qcncodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qjpcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qtwcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qkrcodecs$${QT_LIBINFIX}.dll
+ codecs_plugins.files = $$QT_BUILD_TREE/plugins/codecs/qcncodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qjpcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qtwcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qkrcodecs$${QT_LIBINFIX}.dll
codecs_plugins.path = c:$$QT_PLUGINS_BASE_DIR/codecs
contains(QT_CONFIG, phonon-backend) {
- phonon_backend_plugins.sources += $$QMAKE_LIBDIR_QT/phonon_mmf$${QT_LIBINFIX}.dll
+ phonon_backend_plugins.files += $$QMAKE_LIBDIR_QT/phonon_mmf$${QT_LIBINFIX}.dll
phonon_backend_plugins.path = c:$$QT_PLUGINS_BASE_DIR/phonon_backend
DEPLOYMENT += phonon_backend_plugins
}
# Support backup & restore for Qt libraries
- qtbackup.sources = backup_registration.xml
+ qtbackup.files = backup_registration.xml
qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,)
DEPLOYMENT += qtlibraries \
@@ -141,35 +149,35 @@ symbian: {
graphicssystems_plugins
contains(QT_CONFIG, svg): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll
- imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qsvg$${QT_LIBINFIX}.dll
- iconengines_plugins.sources = $$QT_BUILD_TREE/plugins/iconengines/qsvgicon$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll
+ imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qsvg$${QT_LIBINFIX}.dll
+ iconengines_plugins.files = $$QT_BUILD_TREE/plugins/iconengines/qsvgicon$${QT_LIBINFIX}.dll
iconengines_plugins.path = c:$$QT_PLUGINS_BASE_DIR/iconengines
DEPLOYMENT += iconengines_plugins
}
contains(QT_CONFIG, phonon): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/phonon$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/phonon$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, script): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtScript$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtScript$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, xmlpatterns): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtXmlPatterns$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtXmlPatterns$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, declarative): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll
- folderlistmodelImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll
- gesturesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/gestures/qmlgesturesplugin$${QT_LIBINFIX}.dll
- particlesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/particles/qmlparticlesplugin$${QT_LIBINFIX}.dll
+ folderlistmodelImport.files = $$QT_BUILD_TREE/imports/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll
+ gesturesImport.files = $$QT_BUILD_TREE/imports/Qt/labs/gestures/qmlgesturesplugin$${QT_LIBINFIX}.dll
+ particlesImport.files = $$QT_BUILD_TREE/imports/Qt/labs/particles/qmlparticlesplugin$${QT_LIBINFIX}.dll
- folderlistmodelImport.sources += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir
- gesturesImport.sources += $$QT_SOURCE_TREE/src/imports/gestures/qmldir
- particlesImport.sources += $$QT_SOURCE_TREE/src/imports/particles/qmldir
+ folderlistmodelImport.files += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir
+ gesturesImport.files += $$QT_SOURCE_TREE/src/imports/gestures/qmldir
+ particlesImport.files += $$QT_SOURCE_TREE/src/imports/particles/qmldir
folderlistmodelImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/folderlistmodel
gesturesImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/gestures
@@ -180,8 +188,8 @@ symbian: {
graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems
contains(QT_CONFIG, openvg) {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll
- graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll
+ graphicssystems_plugins.files += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll
# OpenVG requires Symbian^3 or later
pkg_platform_dependencies -= \
"[0x101F7961],0,0,0,{\"S60ProductID\"}" \
@@ -191,14 +199,13 @@ symbian: {
}
contains(QT_CONFIG, opengl) {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenGL$${QT_LIBINFIX}.dll
- graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qglgraphicssystem$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtOpenGL$${QT_LIBINFIX}.dll
+ graphicssystems_plugins.files += $$QT_BUILD_TREE/plugins/graphicssystems/qglgraphicssystem$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, multimedia){
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
}
BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)"
- BLD_INF_RULES.prj_exports += "qtdemoapps.iby $$CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH(qtdemoapps.iby)"
}
diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro
index 664f155..4c598e2 100644
--- a/src/s60main/s60main.pro
+++ b/src/s60main/s60main.pro
@@ -30,7 +30,7 @@ symbian {
# Having MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA will cause s60main.lib be unlinkable
# against GCCE apps, so remove it
MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA
- linux-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl
+ symbian-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl
} else {
error("$$_FILE_ is intended only for Symbian!")
}
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 2d5e5f4..69abcad 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -808,7 +808,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState *exec, JSC::JSObje
JSC::UString comment;
if (args.size() > 2)
comment = args.at(2).toString(exec);
- QCoreApplication::Encoding encoding = QCoreApplication::CodecForTr;
+ QCoreApplication::Encoding encoding = QCoreApplication::UnicodeUTF8;
if (args.size() > 3) {
JSC::UString encStr = args.at(3).toString(exec);
if (encStr == "CodecForTr")
@@ -824,9 +824,9 @@ JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState *exec, JSC::JSObje
#endif
JSC::UString result;
#ifndef QT_NO_QOBJECT
- result = QCoreApplication::translate(QScript::convertToLatin1(context).constData(),
- QScript::convertToLatin1(text).constData(),
- QScript::convertToLatin1(comment).constData(),
+ result = QCoreApplication::translate(context.UTF8String().c_str(),
+ text.UTF8String().c_str(),
+ comment.UTF8String().c_str(),
encoding, n);
#else
result = text;
@@ -878,10 +878,10 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
#endif
JSC::UString result;
#ifndef QT_NO_QOBJECT
- result = QCoreApplication::translate(QScript::convertToLatin1(context).constData(),
- QScript::convertToLatin1(text).constData(),
- QScript::convertToLatin1(comment).constData(),
- QCoreApplication::CodecForTr, n);
+ result = QCoreApplication::translate(context.UTF8String().c_str(),
+ text.UTF8String().c_str(),
+ comment.UTF8String().c_str(),
+ QCoreApplication::UnicodeUTF8, n);
#else
result = text;
#endif
@@ -907,7 +907,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTrId(JSC::ExecState *exec, JSC::JSObject*,
int n = -1;
if (args.size() > 1)
n = args.at(1).toInt32(exec);
- return JSC::jsString(exec, qtTrId(QScript::convertToLatin1(id).constData(), n));
+ return JSC::jsString(exec, qtTrId(id.UTF8String().c_str(), n));
}
JSC::JSValue JSC_HOST_CALL functionQsTrIdNoOp(JSC::ExecState *, JSC::JSObject*, JSC::JSValue, const JSC::ArgList &args)
diff --git a/src/script/api/qscriptengine.h b/src/script/api/qscriptengine.h
index 830d477..24c8c13 100644
--- a/src/script/api/qscriptengine.h
+++ b/src/script/api/qscriptengine.h
@@ -332,10 +332,7 @@ inline QScriptValue qScriptValueFromValue(QScriptEngine *engine, const T &t)
template <>
inline QScriptValue qScriptValueFromValue<QVariant>(QScriptEngine *engine, const QVariant &v)
{
- QScriptValue result = qScriptValueFromValue_helper(engine, v.userType(), v.data());
- if (!result.isValid())
- result = engine->newVariant(v);
- return result;
+ return qScriptValueFromValue_helper(engine, v.userType(), v.data());
}
inline bool qscriptvalue_cast_helper(const QScriptValue &value, int type, void *ptr)
diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp
index fbd5d96..8cd4057 100644
--- a/src/script/api/qscriptvalue.cpp
+++ b/src/script/api/qscriptvalue.cpp
@@ -1726,10 +1726,12 @@ QScriptValue QScriptValue::construct(const QScriptValueList &args)
JSC::JSValue savedException;
QScriptEnginePrivate::saveException(exec, &savedException);
- JSC::JSObject *result = JSC::construct(exec, callee, constructType, constructData, jscArgs);
+ JSC::JSValue result;
+ JSC::JSObject *newObject = JSC::construct(exec, callee, constructType, constructData, jscArgs);
if (exec->hadException()) {
- result = JSC::asObject(exec->exception());
+ result = exec->exception();
} else {
+ result = newObject;
QScriptEnginePrivate::restoreException(exec, savedException);
}
return d->engine->scriptValueFromJSCValue(result);
@@ -1786,11 +1788,12 @@ QScriptValue QScriptValue::construct(const QScriptValue &arguments)
JSC::JSValue savedException;
QScriptEnginePrivate::saveException(exec, &savedException);
- JSC::JSObject *result = JSC::construct(exec, callee, constructType, constructData, applyArgs);
+ JSC::JSValue result;
+ JSC::JSObject *newObject = JSC::construct(exec, callee, constructType, constructData, applyArgs);
if (exec->hadException()) {
- if (exec->exception().isObject())
- result = JSC::asObject(exec->exception());
+ result = exec->exception();
} else {
+ result = newObject;
QScriptEnginePrivate::restoreException(exec, savedException);
}
return d->engine->scriptValueFromJSCValue(result);
@@ -2023,6 +2026,7 @@ void QScriptValue::setData(const QScriptValue &data)
Q_D(QScriptValue);
if (!d || !d->isObject())
return;
+ QScript::APIShim shim(d->engine);
JSC::JSValue other = d->engine->scriptValueToJSCValue(data);
if (d->jscValue.inherits(&QScriptObject::info)) {
QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
diff --git a/src/script/bridge/qscriptclassobject.cpp b/src/script/bridge/qscriptclassobject.cpp
index 28f7bd1..51c0976 100644
--- a/src/script/bridge/qscriptclassobject.cpp
+++ b/src/script/bridge/qscriptclassobject.cpp
@@ -78,6 +78,12 @@ bool ClassObjectDelegate::getOwnPropertySlot(QScriptObject* object,
scriptObject, scriptName, QScriptClass::HandlesReadAccess, &id);
if (flags & QScriptClass::HandlesReadAccess) {
QScriptValue value = m_scriptClass->property(scriptObject, scriptName, id);
+ if (!value.isValid()) {
+ // The class claims to have the property, but returned an invalid
+ // value. Silently convert to undefined to avoid the invalid value
+ // "escaping" into JS.
+ value = QScriptValue(QScriptValue::UndefinedValue);
+ }
slot.setValue(engine->scriptValueToJSCValue(value));
return true;
}
@@ -119,6 +125,12 @@ bool ClassObjectDelegate::getOwnPropertyDescriptor(QScriptObject *object,
attribs |= pflags & QScriptValue::UserRange;
// Rather than calling the getter, we could return an access descriptor here.
QScriptValue value = m_scriptClass->property(scriptObject, scriptName, id);
+ if (!value.isValid()) {
+ // The class claims to have the property, but returned an invalid
+ // value. Silently convert to undefined to avoid the invalid value
+ // "escaping" into JS.
+ value = QScriptValue(QScriptValue::UndefinedValue);
+ }
descriptor.setDescriptor(engine->scriptValueToJSCValue(value), attribs);
return true;
}
diff --git a/src/script/script.pro b/src/script/script.pro
index 4ee86d7..56d3f7a 100644
--- a/src/script/script.pro
+++ b/src/script/script.pro
@@ -39,10 +39,18 @@ wince* {
LIBS += -lmmtimer
}
-mac {
+!qpa:mac {
DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0
LIBS_PRIVATE += -framework AppKit
}
+qpa:mac {
+ DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0
+ contains(QT_CONFIG, coreservices) {
+ LIBS_PRIVATE += -framework CoreServices
+ } else {
+ LIBS_PRIVATE += -framework CoreFoundation
+ }
+}
include($$WEBKITDIR/JavaScriptCore/JavaScriptCore.pri)
diff --git a/src/scripttools/debugging/qscriptdebuggeragent.cpp b/src/scripttools/debugging/qscriptdebuggeragent.cpp
index 551f6c3..9362639 100644
--- a/src/scripttools/debugging/qscriptdebuggeragent.cpp
+++ b/src/scripttools/debugging/qscriptdebuggeragent.cpp
@@ -116,7 +116,7 @@ QScriptDebuggerAgent::~QScriptDebuggerAgent()
/*!
Instructs the agent to perform a "step into" operation. This
function returns immediately. The agent will report step completion
- at a later time, i.e. when script statements are evaluted.
+ at a later time, i.e. when script statements are evaluated.
*/
void QScriptDebuggerAgent::enterStepIntoMode(int count)
{
@@ -129,7 +129,7 @@ void QScriptDebuggerAgent::enterStepIntoMode(int count)
/*!
Instructs the agent to perform a "step over" operation. This
function returns immediately. The agent will report step completion
- at a later time, i.e. when script statements are evaluted.
+ at a later time, i.e. when script statements are evaluated.
*/
void QScriptDebuggerAgent::enterStepOverMode(int count)
{
@@ -146,7 +146,7 @@ void QScriptDebuggerAgent::enterStepOverMode(int count)
/*!
Instructs the agent to perform a "step out" operation. This
function returns immediately. The agent will report step completion
- at a later time, i.e. when script statements are evaluted.
+ at a later time, i.e. when script statements are evaluated.
*/
void QScriptDebuggerAgent::enterStepOutMode()
{
diff --git a/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp b/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
index 5db012a..d0559c5 100644
--- a/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
+++ b/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
@@ -163,10 +163,10 @@ private:
InputEdit *inputEdit;
};
-class OutputEdit : public QPlainTextEdit
+class QScriptDebuggerConsoleWidgetOutputEdit : public QPlainTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptDebuggerConsoleWidgetOutputEdit(QWidget *parent = 0)
: QPlainTextEdit(parent)
{
setFrameShape(QFrame::NoFrame);
@@ -206,7 +206,7 @@ public:
void _q_onCompletionTaskFinished();
CommandLine *commandLine;
- OutputEdit *outputEdit;
+ QScriptDebuggerConsoleWidgetOutputEdit *outputEdit;
int historyIndex;
QString newInput;
};
@@ -320,7 +320,7 @@ QScriptDebuggerConsoleWidget::QScriptDebuggerConsoleWidget(QWidget *parent)
Q_D(QScriptDebuggerConsoleWidget);
d->commandLine = new CommandLine();
d->commandLine->setPrompt(QString::fromLatin1("qsdb>"));
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptDebuggerConsoleWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setSpacing(0);
vbox->setMargin(0);
diff --git a/src/scripttools/debugging/qscriptdebugoutputwidget.cpp b/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
index 3bca96c..594a9dc 100644
--- a/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
+++ b/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
@@ -51,10 +51,10 @@ QT_BEGIN_NAMESPACE
namespace {
-class OutputEdit : public QPlainTextEdit
+class QScriptDebugOutputWidgetOutputEdit : public QPlainTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptDebugOutputWidgetOutputEdit(QWidget *parent = 0)
: QPlainTextEdit(parent)
{
setReadOnly(true);
@@ -85,7 +85,7 @@ public:
QScriptDebugOutputWidgetPrivate();
~QScriptDebugOutputWidgetPrivate();
- OutputEdit *outputEdit;
+ QScriptDebugOutputWidgetOutputEdit *outputEdit;
};
QScriptDebugOutputWidgetPrivate::QScriptDebugOutputWidgetPrivate()
@@ -100,7 +100,7 @@ QScriptDebugOutputWidget::QScriptDebugOutputWidget(QWidget *parent)
: QScriptDebugOutputWidgetInterface(*new QScriptDebugOutputWidgetPrivate, parent, 0)
{
Q_D(QScriptDebugOutputWidget);
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptDebugOutputWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
vbox->setSpacing(0);
diff --git a/src/scripttools/debugging/qscripterrorlogwidget.cpp b/src/scripttools/debugging/qscripterrorlogwidget.cpp
index 735c546..fd9a939 100644
--- a/src/scripttools/debugging/qscripterrorlogwidget.cpp
+++ b/src/scripttools/debugging/qscripterrorlogwidget.cpp
@@ -52,10 +52,10 @@ QT_BEGIN_NAMESPACE
namespace {
-class OutputEdit : public QTextEdit
+class QScriptErrorLogWidgetOutputEdit : public QTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptErrorLogWidgetOutputEdit(QWidget *parent = 0)
: QTextEdit(parent)
{
setReadOnly(true);
@@ -80,7 +80,7 @@ public:
QScriptErrorLogWidgetPrivate();
~QScriptErrorLogWidgetPrivate();
- OutputEdit *outputEdit;
+ QScriptErrorLogWidgetOutputEdit *outputEdit;
};
QScriptErrorLogWidgetPrivate::QScriptErrorLogWidgetPrivate()
@@ -95,7 +95,7 @@ QScriptErrorLogWidget::QScriptErrorLogWidget(QWidget *parent)
: QScriptErrorLogWidgetInterface(*new QScriptErrorLogWidgetPrivate, parent, 0)
{
Q_D(QScriptErrorLogWidget);
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptErrorLogWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
vbox->setSpacing(0);
diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp
index 6870055..a4614bf 100644
--- a/src/sql/drivers/oci/qsql_oci.cpp
+++ b/src/sql/drivers/oci/qsql_oci.cpp
@@ -93,11 +93,13 @@ enum { QOCIEncoding = 2002 }; // AL16UTF16LE
enum { QOCIEncoding = 2000 }; // AL16UTF16
#endif
+#ifdef OCI_ATTR_CHARSET_FORM
// Always set the OCI_ATTR_CHARSET_FORM to SQLCS_NCHAR is safe
// because Oracle server will deal with the implicit Conversion
// Between CHAR and NCHAR.
// see: http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89857/oci05bnd.htm#422705
static const ub1 qOraCharsetForm = SQLCS_NCHAR;
+#endif
#if defined (OCI_UTF16ID)
static const ub2 qOraCharset = OCI_UTF16ID;
@@ -110,13 +112,23 @@ typedef QVarLengthArray<ub2, 32> SizeArray;
static QByteArray qMakeOraDate(const QDateTime& dt);
static QDateTime qMakeDate(const char* oraDate);
+
+static QByteArray qMakeOCINumber(const qlonglong &ll, OCIError *err);
+static QByteArray qMakeOCINumber(const qulonglong& ull, OCIError* err);
+
+static qlonglong qMakeLongLong(const char* ociNumber, OCIError* err);
+static qulonglong qMakeULongLong(const char* ociNumber, OCIError* err);
+
static QString qOraWarn(OCIError *err, int *errorCode = 0);
+
#ifndef Q_CC_SUN
static // for some reason, Sun CC can't use qOraWarning when it's declared static
#endif
void qOraWarning(const char* msg, OCIError *err);
static QSqlError qMakeError(const QString& errString, QSqlError::ErrorType type, OCIError *err);
+
+
class QOCIRowId: public QSharedData
{
public:
@@ -164,7 +176,6 @@ struct QOCIResultPrivate
int serverVersion;
int prefetchRows, prefetchMem;
- void setCharset(OCIBind* hbnd);
void setStatementAttributes();
int bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
const QVariant &val, dvoid *indPtr, ub2 *tmpSize, QList<QByteArray> &tmpStorage);
@@ -176,6 +187,41 @@ struct QOCIResultPrivate
{ return q->bindValueType(i) & QSql::Out; }
inline bool isBinaryValue(int i) const
{ return q->bindValueType(i) & QSql::Binary; }
+
+ void setCharset(dvoid* handle, ub4 type) const
+ {
+ int r = 0;
+ Q_ASSERT(handle);
+
+#ifdef OCI_ATTR_CHARSET_FORM
+ r = OCIAttrSet(handle,
+ type,
+ // this const cast is safe since OCI doesn't touch
+ // the charset.
+ const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)),
+ 0,
+ OCI_ATTR_CHARSET_FORM,
+ //Strange Oracle bug: some Oracle servers crash the server process with non-zero error handle (mostly for 10g).
+ //So ignore the error message here.
+ 0);
+ #ifdef QOCI_DEBUG
+ if (r != 0)
+ qWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM.");
+ #endif
+#endif
+
+ r = OCIAttrSet(handle,
+ type,
+ // this const cast is safe since OCI doesn't touch
+ // the charset.
+ const_cast<void *>(static_cast<const void *>(&qOraCharset)),
+ 0,
+ OCI_ATTR_CHARSET_ID,
+ err);
+ if (r != 0)
+ qOraWarning("QOCIResultPrivate::setCharsetI Couldn't set OCI_ATTR_CHARSET_ID: ", err);
+
+ }
};
void QOCIResultPrivate::setStatementAttributes()
@@ -208,36 +254,6 @@ void QOCIResultPrivate::setStatementAttributes()
}
}
-void QOCIResultPrivate::setCharset(OCIBind* hbnd)
-{
- int r = 0;
-
- Q_ASSERT(hbnd);
-
- r = OCIAttrSet(hbnd,
- OCI_HTYPE_BIND,
- // this const cast is safe since OCI doesn't touch
- // the charset.
- const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)),
- 0,
- OCI_ATTR_CHARSET_FORM,
- err);
- if (r != 0)
- qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM: ", err);
-
- r = OCIAttrSet(hbnd,
- OCI_HTYPE_BIND,
- // this const cast is safe since OCI doesn't touch
- // the charset.
- const_cast<void *>(static_cast<const void *>(&qOraCharset)),
- 0,
- OCI_ATTR_CHARSET_ID,
- err);
- if (r != 0)
- qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_ID: ", err);
-
-}
-
int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
const QVariant &val, dvoid *indPtr, ub2 *tmpSize, QList<QByteArray> &tmpStorage)
{
@@ -283,6 +299,28 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
sizeof(uint),
SQLT_UIN, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
break;
+ case QVariant::LongLong:
+ {
+ QByteArray ba = qMakeOCINumber(val.toLongLong(), err);
+ r = OCIBindByPos(sql, hbnd, err,
+ pos + 1,
+ ba.data(),
+ ba.size(),
+ SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
+ tmpStorage.append(ba);
+ break;
+ }
+ case QVariant::ULongLong:
+ {
+ QByteArray ba = qMakeOCINumber(val.toULongLong(), err);
+ r = OCIBindByPos(sql, hbnd, err,
+ pos + 1,
+ ba.data(),
+ ba.size(),
+ SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
+ tmpStorage.append(ba);
+ break;
+ }
case QVariant::Double:
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
@@ -325,7 +363,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
(s.length() + 1) * sizeof(QChar),
SQLT_STR, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
if (r == OCI_SUCCESS)
- setCharset(*hbnd);
+ setCharset(*hbnd, OCI_HTYPE_BIND);
break;
}
} // fall through for OUT values
@@ -349,7 +387,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
SQLT_STR, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
}
if (r == OCI_SUCCESS)
- setCharset(*hbnd);
+ setCharset(*hbnd, OCI_HTYPE_BIND);
tmpStorage.append(ba);
break;
} // default case
@@ -378,7 +416,7 @@ int QOCIResultPrivate::bindValues(QVector<QVariant> &values, IndicatorArray &ind
}
// will assign out value and remove its temp storage.
-static void qOraOutValue(QVariant &value, QList<QByteArray> &storage)
+static void qOraOutValue(QVariant &value, QList<QByteArray> &storage, OCIError* err)
{
switch (value.type()) {
case QVariant::Time:
@@ -390,6 +428,12 @@ static void qOraOutValue(QVariant &value, QList<QByteArray> &storage)
case QVariant::DateTime:
value = qMakeDate(storage.takeFirst());
break;
+ case QVariant::LongLong:
+ value = qMakeLongLong(storage.takeFirst(), err);
+ break;
+ case QVariant::ULongLong:
+ value = qMakeULongLong(storage.takeFirst(), err);
+ break;
case QVariant::String:
value = QString(
reinterpret_cast<const QChar *>(storage.takeFirst().constData()));
@@ -407,7 +451,7 @@ void QOCIResultPrivate::outValues(QVector<QVariant> &values, IndicatorArray &ind
if (!isOutValue(i))
continue;
- qOraOutValue(values[i], tmpStorage);
+ qOraOutValue(values[i], tmpStorage, err);
QVariant::Type typ = values.at(i).type();
if (indicators[i] == -1) // NULL
@@ -667,6 +711,56 @@ QByteArray qMakeOraDate(const QDateTime& dt)
return ba;
}
+/*!
+ \internal
+
+ Convert qlonglong to the internal Oracle OCINumber format.
+ */
+QByteArray qMakeOCINumber(const qlonglong& ll, OCIError* err)
+{
+ QByteArray ba(sizeof(OCINumber), 0);
+
+ OCINumberFromInt(err,
+ &ll,
+ sizeof(qlonglong),
+ OCI_NUMBER_SIGNED,
+ reinterpret_cast<OCINumber*>(ba.data()));
+ return ba;
+}
+
+/*!
+ \internal
+
+ Convert qulonglong to the internal Oracle OCINumber format.
+ */
+QByteArray qMakeOCINumber(const qulonglong& ull, OCIError* err)
+{
+ QByteArray ba(sizeof(OCINumber), 0);
+
+ OCINumberFromInt(err,
+ &ull,
+ sizeof(qlonglong),
+ OCI_NUMBER_UNSIGNED,
+ reinterpret_cast<OCINumber*>(ba.data()));
+ return ba;
+}
+
+qlonglong qMakeLongLong(const char* ociNumber, OCIError* err)
+{
+ qlonglong qll = 0;
+ OCINumberToInt(err, reinterpret_cast<const OCINumber *>(ociNumber), sizeof(qlonglong),
+ OCI_NUMBER_SIGNED, &qll);
+ return qll;
+}
+
+qulonglong qMakeULongLong(const char* ociNumber, OCIError* err)
+{
+ qulonglong qull = 0;
+ OCINumberToInt(err, reinterpret_cast<const OCINumber *>(ociNumber), sizeof(qulonglong),
+ OCI_NUMBER_UNSIGNED, &qull);
+ return qull;
+}
+
QDateTime qMakeDate(const char* oraDate)
{
int century = uchar(oraDate[0]);
@@ -688,7 +782,6 @@ class QOCICols
public:
QOCICols(int size, QOCIResultPrivate* dp);
~QOCICols();
- void setCharset(OCIDefine* dfn);
int readPiecewise(QVector<QVariant> &values, int index = 0);
int readLOBs(QVector<QVariant> &values, int index = 0);
int fieldFromDefine(OCIDefine* d);
@@ -890,7 +983,7 @@ QOCICols::QOCICols(int size, QOCIResultPrivate* dp)
&(fieldInf[idx].ind),
0, 0, OCI_DEFAULT);
if (r == 0)
- setCharset(dfn);
+ d->setCharset(dfn, OCI_HTYPE_DEFINE);
}
break;
default:
@@ -950,35 +1043,6 @@ OCILobLocator **QOCICols::createLobLocator(int position, OCIEnv* env)
return &lob;
}
-void QOCICols::setCharset(OCIDefine* dfn)
-{
- int r = 0;
-
- Q_ASSERT(dfn);
-
- r = OCIAttrSet(dfn,
- OCI_HTYPE_DEFINE,
- // this const cast is safe since OCI doesn't touch
- // the charset.
- const_cast<void *>(static_cast<const void *>(&qOraCharsetForm)),
- 0,
- OCI_ATTR_CHARSET_FORM,
- d->err);
- if (r != 0)
- qOraWarning("QOCIResultPrivate::setCharset: Couldn't set OCI_ATTR_CHARSET_FORM: ", d->err);
-
- r = OCIAttrSet(dfn,
- OCI_HTYPE_DEFINE,
- // this const cast is safe since OCI doesn't touch
- // the charset.
- const_cast<void *>(static_cast<const void *>(&qOraCharset)),
- 0,
- OCI_ATTR_CHARSET_ID,
- d->err);
- if (r != 0)
- qOraWarning("QOCICols::setCharset: Couldn't set OCI_ATTR_CHARSET_ID: ", d->err);
-}
-
int QOCICols::readPiecewise(QVector<QVariant> &values, int index)
{
OCIDefine* dfn;
@@ -1281,6 +1345,16 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
col.maxLen = sizeof(uint);
break;
+ case QVariant::LongLong:
+ col.bindAs = SQLT_VNU;
+ col.maxLen = sizeof(OCINumber);
+ break;
+
+ case QVariant::ULongLong:
+ col.bindAs = SQLT_VNU;
+ col.maxLen = sizeof(OCINumber);
+ break;
+
case QVariant::Double:
col.bindAs = SQLT_FLT;
col.maxLen = sizeof(double);
@@ -1352,6 +1426,22 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
*reinterpret_cast<uint*>(dataPtr) = val.toUInt();
break;
+ case QVariant::LongLong:
+ {
+ columns[i].lengths[row] = columns[i].maxLen;
+ const QByteArray ba = qMakeOCINumber(val.toLongLong(), d->err);
+ Q_ASSERT(ba.size() == int(columns[i].maxLen));
+ memcpy(dataPtr, ba.constData(), columns[i].maxLen);
+ break;
+ }
+ case QVariant::ULongLong:
+ {
+ columns[i].lengths[row] = columns[i].maxLen;
+ const QByteArray ba = qMakeOCINumber(val.toULongLong(), d->err);
+ Q_ASSERT(ba.size() == int(columns[i].maxLen));
+ memcpy(dataPtr, ba.constData(), columns[i].maxLen);
+ break;
+ }
case QVariant::Double:
columns[i].lengths[row] = columns[i].maxLen;
*reinterpret_cast<double*>(dataPtr) = val.toDouble();
@@ -1459,7 +1549,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
QVariant::Type tp = boundValues.at(i).type();
if (tp != QVariant::List) {
- qOraOutValue(boundValues[i], tmpStorage);
+ qOraOutValue(boundValues[i], tmpStorage, d->err);
if (*columns[i].indicators == -1)
boundValues[i] = QVariant(tp);
continue;
@@ -1489,6 +1579,21 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
(*list)[r] = *reinterpret_cast<uint*>(data + r * columns[i].maxLen);
break;
+ case SQLT_VNU:
+ {
+ switch (boundValues.at(i).type()) {
+ case QVariant::LongLong:
+ (*list)[r] = qMakeLongLong(data + r * columns[i].maxLen, d->err);
+ break;
+ case QVariant::ULongLong:
+ (*list)[r] = qMakeULongLong(data + r * columns[i].maxLen, d->err);
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+
case SQLT_FLT:
(*list)[r] = *reinterpret_cast<double*>(data + r * columns[i].maxLen);
break;
diff --git a/src/sql/kernel/qsql.qdoc b/src/sql/kernel/qsql.qdoc
index c842e11..65a8594 100644
--- a/src/sql/kernel/qsql.qdoc
+++ b/src/sql/kernel/qsql.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp
index 64fd99c..3d753dc 100644
--- a/src/sql/kernel/qsqldriver.cpp
+++ b/src/sql/kernel/qsqldriver.cpp
@@ -396,7 +396,7 @@ QString QSqlDriver::escapeIdentifier(const QString &identifier, IdentifierType)
\a identifier can either be a table name or field name, dependent
on \a type.
- \warning Because of binary compatability constraints, this function is not virtual.
+ \warning Because of binary compatibility constraints, this function is not virtual.
If you want to provide your own implementation in your QSqlDriver subclass,
reimplement the isIdentifierEscapedImplementation() slot in your subclass instead.
The isIdentifierEscapedFunction() will dynamically detect the slot and call it.
@@ -421,7 +421,7 @@ bool QSqlDriver::isIdentifierEscaped(const QString &identifier, IdentifierType t
and trailing delimiter characters, \a identifier is returned without
modification.
- \warning Because of binary compatability constraints, this function is not virtual,
+ \warning Because of binary compatibility constraints, this function is not virtual,
If you want to provide your own implementation in your QSqlDriver subclass,
reimplement the stripDelimitersImplementation() slot in your subclass instead.
The stripDelimiters() function will dynamically detect the slot and call it.
@@ -871,7 +871,7 @@ QStringList QSqlDriver::subscribedToNotificationsImplementation() const
\a identifier can either be a table name or field name, dependent
on \a type.
- Because of binary compatability constraints, isIdentifierEscaped() function
+ Because of binary compatibility constraints, isIdentifierEscaped() function
(introduced in Qt 4.5) is not virtual. Instead, isIdentifierEscaped() will
dynamically detect and call \e this slot. The default implementation
assumes the escape/delimiter character is a double quote. Reimplement this
@@ -896,7 +896,7 @@ bool QSqlDriver::isIdentifierEscapedImplementation(const QString &identifier, Id
If \a identifier does not have leading and trailing delimiter characters, \a
identifier is returned without modification.
- Because of binary compatability constraints, the stripDelimiters() function
+ Because of binary compatibility constraints, the stripDelimiters() function
(introduced in Qt 4.5) is not virtual. Instead, stripDelimiters() will
dynamically detect and call \e this slot. It generally unnecessary
to reimplement this slot.
diff --git a/src/src.pro b/src/src.pro
index 060f48b..c07d399 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -5,6 +5,7 @@ unset(SRC_SUBDIRS)
win32:SRC_SUBDIRS += src_winmain
symbian:SRC_SUBDIRS += src_s60main
SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib
+nacl: SRC_SUBDIRS -= src_network src_testlib
!symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus
!contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui
!wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support
diff --git a/src/testlib/qsignalspy.qdoc b/src/testlib/qsignalspy.qdoc
index 0e8a4c0..7018c09 100644
--- a/src/testlib/qsignalspy.qdoc
+++ b/src/testlib/qsignalspy.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index aae2786..126c6c1 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -755,6 +755,9 @@ QT_BEGIN_NAMESPACE
QTest::touchEvent to create a QTouchEventSequence instance. Add touch events to
the sequence by calling press(), move(), release() and stationary(), and let the
instance run out of scope to commit the sequence to the event system.
+
+ Example:
+ \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 25
*/
/*!
diff --git a/src/testlib/qtestevent.qdoc b/src/testlib/qtestevent.qdoc
index a76c782..7ca9eb7 100644
--- a/src/testlib/qtestevent.qdoc
+++ b/src/testlib/qtestevent.qdoc
@@ -7,11 +7,11 @@
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in a
-** written agreement between you and Nokia.
+** 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 Free Documentation License
** Alternatively, this file may be used under the terms of the GNU Free
diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro
index a8186d8..c25d23d 100644
--- a/src/testlib/testlib.pro
+++ b/src/testlib/testlib.pro
@@ -70,8 +70,16 @@ wince*::LIBS += libcmt.lib \
coredll.lib \
winsock.lib
mac:LIBS += -framework IOKit \
- -framework ApplicationServices \
-framework Security
+!qpa:mac: LIBS += -framework ApplicationServices
+qpa:mac: {
+ contains(QT_CONFIG, coreservices) {
+ LIBS_PRIVATE += -framework CoreServices
+ } else {
+ LIBS_PRIVATE += -framework CoreFoundation
+ }
+}
+
include(../qbase.pri)
QMAKE_TARGET_PRODUCT = QTestLib
QMAKE_TARGET_DESCRIPTION = Qt \
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index a2bc89d..e6fcd46 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -1096,6 +1096,8 @@ void WriteInitialization::acceptLayoutItem(DomLayoutItem *node)
const int colSpan = node->hasAttributeColSpan() ? node->attributeColSpan() : 1;
addArgs = QString::fromLatin1("%1, %2, %3, %4, %5").arg(itemName).arg(row).arg(col).arg(rowSpan).arg(colSpan);
+ if (!node->attributeAlignment().isEmpty())
+ addArgs += QLatin1String(", ") + node->attributeAlignment();
} else {
if (layout->attributeClass() == QLatin1String("QFormLayout")) {
methodPrefix = QLatin1String("set");
@@ -1105,6 +1107,8 @@ void WriteInitialization::acceptLayoutItem(DomLayoutItem *node)
addArgs = QString::fromLatin1("%1, %2, %3").arg(row).arg(role).arg(itemName);
} else {
addArgs = itemName;
+ if (layout->attributeClass().contains(QLatin1String("Box")) && !node->attributeAlignment().isEmpty())
+ addArgs += QLatin1String(", 0, ") + node->attributeAlignment();
}
}
diff --git a/src/tools/uic/ui4.cpp b/src/tools/uic/ui4.cpp
index 1988696..e094eaf 100644
--- a/src/tools/uic/ui4.cpp
+++ b/src/tools/uic/ui4.cpp
@@ -3673,6 +3673,7 @@ void DomLayoutItem::clear(bool clear_all)
m_attr_rowSpan = 0;
m_has_attr_colSpan = false;
m_attr_colSpan = 0;
+ m_has_attr_alignment = false;
}
m_kind = Unknown;
@@ -3694,6 +3695,7 @@ DomLayoutItem::DomLayoutItem()
m_attr_rowSpan = 0;
m_has_attr_colSpan = false;
m_attr_colSpan = 0;
+ m_has_attr_alignment = false;
m_widget = 0;
m_layout = 0;
m_spacer = 0;
@@ -3727,6 +3729,10 @@ void DomLayoutItem::read(QXmlStreamReader &reader)
setAttributeColSpan(attribute.value().toString().toInt());
continue;
}
+ if (name == QLatin1String("alignment")) {
+ setAttributeAlignment(attribute.value().toString());
+ continue;
+ }
reader.raiseError(QLatin1String("Unexpected attribute ") + name.toString());
}
@@ -3779,6 +3785,8 @@ void DomLayoutItem::read(const QDomElement &node)
setAttributeRowSpan(node.attribute(QLatin1String("rowspan")).toInt());
if (node.hasAttribute(QLatin1String("colspan")))
setAttributeColSpan(node.attribute(QLatin1String("colspan")).toInt());
+ if (node.hasAttribute(QLatin1String("alignment")))
+ setAttributeAlignment(node.attribute(QLatin1String("alignment")));
for (QDomNode n = node.firstChild(); !n.isNull(); n = n.nextSibling()) {
if (!n.isElement())
@@ -3828,6 +3836,9 @@ void DomLayoutItem::write(QXmlStreamWriter &writer, const QString &tagName) cons
if (hasAttributeColSpan())
writer.writeAttribute(QLatin1String("colspan"), QString::number(attributeColSpan()));
+ if (hasAttributeAlignment())
+ writer.writeAttribute(QLatin1String("alignment"), attributeAlignment());
+
switch (kind()) {
case Widget: {
DomWidget* v = elementWidget();
diff --git a/src/tools/uic/ui4.h b/src/tools/uic/ui4.h
index a464a89..836175e 100644
--- a/src/tools/uic/ui4.h
+++ b/src/tools/uic/ui4.h
@@ -1427,6 +1427,11 @@ public:
inline void setAttributeColSpan(int a) { m_attr_colSpan = a; m_has_attr_colSpan = true; }
inline void clearAttributeColSpan() { m_has_attr_colSpan = false; }
+ inline bool hasAttributeAlignment() const { return m_has_attr_alignment; }
+ inline QString attributeAlignment() const { return m_attr_alignment; }
+ inline void setAttributeAlignment(const QString& a) { m_attr_alignment = a; m_has_attr_alignment = true; }
+ inline void clearAttributeAlignment() { m_has_attr_alignment = false; }
+
// child element accessors
enum Kind { Unknown = 0, Widget, Layout, Spacer };
inline Kind kind() const { return m_kind; }
@@ -1460,6 +1465,9 @@ private:
int m_attr_colSpan;
bool m_has_attr_colSpan;
+ QString m_attr_alignment;
+ bool m_has_attr_alignment;
+
// child element data
Kind m_kind;
DomWidget* m_widget;
diff --git a/src/xmlpatterns/data/qabstractfloat.cpp b/src/xmlpatterns/data/qabstractfloat.cpp
index d3384fe..9f0e4e0 100644
--- a/src/xmlpatterns/data/qabstractfloat.cpp
+++ b/src/xmlpatterns/data/qabstractfloat.cpp
@@ -118,7 +118,7 @@ bool AbstractFloat<isDouble>::isEqual(const xsDouble a, const xsDouble b)
return qIsInf(a) && internalSignbit(a) == internalSignbit(b);
else
{
- /* Preferrably, we would use std::numeric_limits<xsDouble>::espilon(), but
+ /* Preferably, we would use std::numeric_limits<xsDouble>::espilon(), but
* we cannot since we cannot depend on the STL. The small xs:double value below,
* was extracted by printing the std::numeric_limits<xsDouble>::epsilon() using
* gdb. */
diff --git a/src/xmlpatterns/data/qatomicvalue.cpp b/src/xmlpatterns/data/qatomicvalue.cpp
index 5bb9a4f..700f7ea 100644
--- a/src/xmlpatterns/data/qatomicvalue.cpp
+++ b/src/xmlpatterns/data/qatomicvalue.cpp
@@ -65,7 +65,7 @@ QT_BEGIN_NAMESPACE
/**
* @file
- * @short Contains the implementation for AtomicValue. The defintion is in qitem_p.h.
+ * @short Contains the implementation for AtomicValue. The definition is in qitem_p.h.
*/
using namespace QPatternist;
diff --git a/src/xmlpatterns/data/qschematime_p.h b/src/xmlpatterns/data/qschematime_p.h
index bd63714..bff065b 100644
--- a/src/xmlpatterns/data/qschematime_p.h
+++ b/src/xmlpatterns/data/qschematime_p.h
@@ -63,7 +63,7 @@ namespace QPatternist
/**
* @short Implements the value instance of the @c xs:time type.
*
- * The header file for this class was orignally called Time.h, but this
+ * The header file for this class was originally called Time.h, but this
* clashed with a system header on MinGW.
*
* @author Frans Englich <frans.englich@nokia.com>
diff --git a/src/xmlpatterns/parser/createTokenLookup.sh b/src/xmlpatterns/parser/createTokenLookup.sh
index e11a3ba..9339568 100755
--- a/src/xmlpatterns/parser/createTokenLookup.sh
+++ b/src/xmlpatterns/parser/createTokenLookup.sh
@@ -55,8 +55,8 @@ license=`cat <<EOF
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
-** contained in the either Technology Preview License Agreement or the
-** Beta Release License Agreement.
+** 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
@@ -66,13 +66,12 @@ license=`cat <<EOF
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
-** In addition, as a special exception, Nokia gives you certain
-** additional rights. These rights are described in the Nokia Qt LGPL
-** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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 are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
**
**
**
diff --git a/src/xmlpatterns/schema/qxsdschemaparser.cpp b/src/xmlpatterns/schema/qxsdschemaparser.cpp
index fd0b95c..585cf12 100644
--- a/src/xmlpatterns/schema/qxsdschemaparser.cpp
+++ b/src/xmlpatterns/schema/qxsdschemaparser.cpp
@@ -914,7 +914,7 @@ void XsdSchemaParser::parseRedefine()
redefinedType->setWxsSuperType(contextType);
// 3) remove the base type resolving job from the resolver as
- // we have set the base type here explicitely
+ // we have set the base type here explicitly
m_parserContext->resolver()->removeSimpleRestrictionBase(redefinedType);
// 4) add the redefined type to the schema
@@ -963,7 +963,7 @@ void XsdSchemaParser::parseRedefine()
redefinedType->setWxsSuperType(contextType);
// 3) remove the base type resolving job from the resolver as
- // we have set the base type here explicitely
+ // we have set the base type here explicitly
m_parserContext->resolver()->removeComplexBaseType(redefinedType);
// 4) add the redefined type to the schema
@@ -5781,7 +5781,7 @@ QString XsdSchemaParser::readNamespaceAttribute(const QString &attributeName, co
SchemaType::DerivationConstraints XsdSchemaParser::readDerivationConstraintAttribute(const SchemaType::DerivationConstraints &allowedConstraints, const char *elementName)
{
- // first convert the flags into strings for easier comparision
+ // first convert the flags into strings for easier comparison
QSet<QString> allowedContent;
if (allowedConstraints & SchemaType::RestrictionConstraint)
allowedContent.insert(QString::fromLatin1("restriction"));
@@ -5844,7 +5844,7 @@ SchemaType::DerivationConstraints XsdSchemaParser::readDerivationConstraintAttri
NamedSchemaComponent::BlockingConstraints XsdSchemaParser::readBlockingConstraintAttribute(const NamedSchemaComponent::BlockingConstraints &allowedConstraints, const char *elementName)
{
- // first convert the flags into strings for easier comparision
+ // first convert the flags into strings for easier comparison
QSet<QString> allowedContent;
if (allowedConstraints & NamedSchemaComponent::RestrictionConstraint)
allowedContent.insert(QString::fromLatin1("restriction"));
diff --git a/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp b/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp
index 88e5f93..dc4730e 100644
--- a/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp
+++ b/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp
@@ -53,7 +53,7 @@ using namespace QPatternist;
* This page describes how to use DFAs for validating that the XML child tags of an
* XML parent tag occur in the right order.
*
- * To validate the occurence of XML tags one need a regular expression that describes
+ * To validate the occurrence of XML tags one need a regular expression that describes
* which tags can appear how often in what context. For example the regular expression
* of the global <em>attribute</em> tag in XML Schema is (annotation?, simpleType?).
* That means the <em>attribute</em> tag can contain an <em>annotation</em> tag followed
diff --git a/src/xmlpatterns/schema/qxsdstatemachine_p.h b/src/xmlpatterns/schema/qxsdstatemachine_p.h
index 294eb50..62c6ab0 100644
--- a/src/xmlpatterns/schema/qxsdstatemachine_p.h
+++ b/src/xmlpatterns/schema/qxsdstatemachine_p.h
@@ -138,7 +138,7 @@ namespace QPatternist
/**
* Continues execution of the machine with the given input @p transition.
*
- * @return @c true if the transition was successfull, @c false otherwise.
+ * @return @c true if the transition was successful, @c false otherwise.
*/
bool proceed(TransitionType transition);
@@ -154,7 +154,7 @@ namespace QPatternist
* @note To use this method, inputEqualsTransition must be implemented
* to find the right transition to use.
*
- * @return @c true if the transition was successfull, @c false otherwise.
+ * @return @c true if the transition was successful, @c false otherwise.
*/
template <typename InputType>
bool proceed(InputType input);
diff --git a/src/xmlpatterns/type/qtypechecker.cpp b/src/xmlpatterns/type/qtypechecker.cpp
index 879fe0e..73f83b7 100644
--- a/src/xmlpatterns/type/qtypechecker.cpp
+++ b/src/xmlpatterns/type/qtypechecker.cpp
@@ -168,7 +168,7 @@ Expression::Ptr TypeChecker::verifyType(const Expression::Ptr &operand,
/* Since we haven't exited yet, it means that the operandType is a super type
* of reqType, and that there hence is a path down to it through the
- * type hierachy -- but that doesn't neccessarily mean that a up-cast(down the
+ * type hierachy -- but that doesn't necessarily mean that a up-cast(down the
* hierarchy) would succeed. */
Expression::Ptr result(operand);
diff --git a/tests/arthur/.gitignore b/tests/arthur/.gitignore
new file mode 100644
index 0000000..7f0c1fa
--- /dev/null
+++ b/tests/arthur/.gitignore
@@ -0,0 +1,2 @@
+bin/shower
+lance/lance
diff --git a/tests/arthur/baselineserver/.gitignore b/tests/arthur/baselineserver/.gitignore
new file mode 100644
index 0000000..cc513e0
--- /dev/null
+++ b/tests/arthur/baselineserver/.gitignore
@@ -0,0 +1,2 @@
+storage
+bin/baselineserver
diff --git a/tests/arthur/baselineserver/bin/runserver b/tests/arthur/baselineserver/bin/runserver
new file mode 100755
index 0000000..48c5c1d
--- /dev/null
+++ b/tests/arthur/baselineserver/bin/runserver
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+logfile=baselineserver.log
+
+while true; do
+ echo >> $logfile
+ echo -n "***RESTARTING*** " >> $logfile
+ date >> $logfile
+
+ ./baselineserver 2>&1 | tee -a $logfile
+
+ sleep 2
+done
diff --git a/tests/arthur/baselineserver/src/baselineserver.cpp b/tests/arthur/baselineserver/src/baselineserver.cpp
new file mode 100644
index 0000000..7679f13
--- /dev/null
+++ b/tests/arthur/baselineserver/src/baselineserver.cpp
@@ -0,0 +1,519 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#define QT_USE_FAST_CONCATENATION
+#define QT_USE_FAST_OPERATOR_PLUS
+
+#include "baselineserver.h"
+#include <QBuffer>
+#include <QFile>
+#include <QDir>
+#include <QCoreApplication>
+#include <QFileInfo>
+#include <QHostInfo>
+#include <QTextStream>
+#include <QProcess>
+
+QString BaselineServer::storage;
+
+
+BaselineServer::BaselineServer(QObject *parent)
+ : QTcpServer(parent)
+{
+ QFileInfo me(QCoreApplication::applicationFilePath());
+ meLastMod = me.lastModified();
+ heartbeatTimer = new QTimer(this);
+ connect(heartbeatTimer, SIGNAL(timeout()), this, SLOT(heartbeat()));
+ heartbeatTimer->start(HEARTBEAT*1000);
+}
+
+QString BaselineServer::storagePath()
+{
+ if (storage.isEmpty()) {
+ storage = QLS(qgetenv("QT_LANCELOT_DIR"));
+ if (storage.isEmpty())
+ storage = QLS("/var/www");
+ }
+ return storage;
+}
+
+QString BaselineServer::baseUrl()
+{
+ return QLS("http://")
+ + QHostInfo::localHostName().toLatin1() + '.'
+ + QHostInfo::localDomainName().toLatin1() + '/';
+}
+
+void BaselineServer::incomingConnection(int socketDescriptor)
+{
+ qDebug() << "Server: New connection!";
+ BaselineThread *thread = new BaselineThread(socketDescriptor, this);
+ connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
+ thread->start();
+}
+
+void BaselineServer::heartbeat()
+{
+ // The idea is to exit to be restarted when modified, as soon as not actually serving
+ QFileInfo me(QCoreApplication::applicationFilePath());
+ if (me.lastModified() == meLastMod)
+ return;
+
+ // (could close() here to avoid accepting new connections, to avoid livelock)
+ // also, could check for a timeout to force exit, to avoid hung threads blocking
+ bool isServing = false;
+ foreach(BaselineThread *thread, findChildren<BaselineThread *>()) {
+ if (thread->isRunning()) {
+ isServing = true;
+ break;
+ }
+ }
+
+ if (!isServing)
+ QCoreApplication::exit();
+}
+
+BaselineThread::BaselineThread(int socketDescriptor, QObject *parent)
+ : QThread(parent), socketDescriptor(socketDescriptor)
+{
+}
+
+void BaselineThread::run()
+{
+ BaselineHandler handler(socketDescriptor);
+ exec();
+}
+
+
+BaselineHandler::BaselineHandler(int socketDescriptor)
+ : QObject(), connectionEstablished(false)
+{
+ runId = QDateTime::currentDateTime().toString(QLS("MMMdd-hhmmss"));
+
+ if (socketDescriptor == -1)
+ return;
+
+ connect(&proto.socket, SIGNAL(readyRead()), this, SLOT(receiveRequest()));
+ connect(&proto.socket, SIGNAL(disconnected()), this, SLOT(receiveDisconnect()));
+ proto.socket.setSocketDescriptor(socketDescriptor);
+}
+
+const char *BaselineHandler::logtime()
+{
+ return 0;
+ //return QTime::currentTime().toString(QLS("mm:ss.zzz"));
+}
+
+void BaselineHandler::receiveRequest()
+{
+ if (!connectionEstablished) {
+ if (!proto.acceptConnection(&plat)) {
+ qWarning() << runId << logtime() << "Accepting new connection from" << proto.socket.peerAddress().toString() << "failed." << proto.errorMessage();
+ proto.socket.disconnectFromHost();
+ return;
+ }
+ QString logMsg;
+ foreach (QString key, plat.keys()) {
+ if (key != PI_HostName && key != PI_HostAddress)
+ logMsg += key + QLS(": '") + plat.value(key) + QLS("', ");
+ }
+ qDebug() << runId << logtime() << "Connection established with" << plat.value(PI_HostName)
+ << "[" << qPrintable(plat.value(PI_HostAddress)) << "]" << logMsg;
+
+ // Filter on branch
+ QString branch = plat.value(PI_PulseGitBranch);
+ if (branch.isEmpty()) {
+ // Not run by Pulse, i.e. ad hoc run: Ok.
+ }
+ else if (branch != QLS("master-integration") || !plat.value(PI_GitCommit).contains(QLS("Merge branch 'master' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into master-integration"))) {
+ qDebug() << runId << logtime() << "Did not pass branch/staging repo filter, disconnecting.";
+ proto.sendBlock(BaselineProtocol::Abort, QByteArray("This branch/staging repo is not assigned to be tested."));
+ proto.socket.disconnectFromHost();
+ return;
+ }
+
+ proto.sendBlock(BaselineProtocol::Ack, QByteArray());
+ connectionEstablished = true;
+ return;
+ }
+
+ QByteArray block;
+ BaselineProtocol::Command cmd;
+ if (!proto.receiveBlock(&cmd, &block)) {
+ qWarning() << runId << logtime() << "Command reception failed. "<< proto.errorMessage();
+ QThread::currentThread()->exit(1);
+ return;
+ }
+
+ switch(cmd) {
+ case BaselineProtocol::RequestBaselineChecksums:
+ provideBaselineChecksums(block);
+ break;
+ case BaselineProtocol::AcceptNewBaseline:
+ storeImage(block, true);
+ break;
+ case BaselineProtocol::AcceptMismatch:
+ storeImage(block, false);
+ break;
+ default:
+ qWarning() << runId << logtime() << "Unknown command received. " << proto.errorMessage();
+ proto.sendBlock(BaselineProtocol::UnknownError, QByteArray());
+ }
+}
+
+
+void BaselineHandler::provideBaselineChecksums(const QByteArray &itemListBlock)
+{
+ ImageItemList itemList;
+ QDataStream ds(itemListBlock);
+ ds >> itemList;
+ qDebug() << runId << logtime() << "Received request for checksums for" << itemList.count() << "items, engine"
+ << itemList.at(0).engineAsString() << "pixel format" << itemList.at(0).formatAsString();
+
+ for (ImageItemList::iterator i = itemList.begin(); i != itemList.end(); ++i) {
+ i->imageChecksums.clear();
+ QString prefix = pathForItem(*i, true);
+ QFile file(prefix + QLS("metadata"));
+ if (file.open(QIODevice::ReadOnly)) {
+ QDataStream checkSums(&file);
+ checkSums >> i->imageChecksums;
+ file.close();
+ i->status = ImageItem::Ok;
+ }
+ if (!i->imageChecksums.count())
+ i->status = ImageItem::BaselineNotFound;
+ }
+
+ // Find and mark blacklisted items
+ QString context = pathForItem(itemList.at(0), true, false).section(QLC('/'), 0, -2);
+ if (itemList.count() > 0) {
+ QFile file(BaselineServer::storagePath() + QLC('/') + context + QLS("/BLACKLIST"));
+ if (file.open(QIODevice::ReadOnly)) {
+ QTextStream in(&file);
+ do {
+ QString scriptName = in.readLine();
+ if (!scriptName.isNull()) {
+ for (ImageItemList::iterator i = itemList.begin(); i != itemList.end(); ++i) {
+ if (i->scriptName == scriptName)
+ i->status = ImageItem::IgnoreItem;
+ }
+ }
+ } while (!in.atEnd());
+ }
+ }
+
+ QByteArray block;
+ QDataStream ods(&block, QIODevice::WriteOnly);
+ ods << itemList;
+ proto.sendBlock(BaselineProtocol::Ack, block);
+ report.start(BaselineServer::storagePath(), runId, plat, context, itemList);
+}
+
+
+void BaselineHandler::storeImage(const QByteArray &itemBlock, bool isBaseline)
+{
+ QDataStream ds(itemBlock);
+ ImageItem item;
+ ds >> item;
+
+ QString prefix = pathForItem(item, isBaseline);
+ qDebug() << runId << logtime() << "Received" << (isBaseline ? "baseline" : "mismatched") << "image for:" << item.scriptName << "Storing in" << prefix;
+
+ QString dir = prefix.section(QLC('/'), 0, -2);
+ QDir cwd;
+ if (!cwd.exists(dir))
+ cwd.mkpath(dir);
+ item.image.save(prefix + QLS(FileFormat), FileFormat);
+
+ //# Could use QSettings or XML or even DB, could use common file for whole dir or even whole storage - but for now, keep it simple
+ QFile file(prefix + QLS("metadata"));
+ file.open(QIODevice::WriteOnly | QIODevice::Truncate);
+ QDataStream checkSums(&file);
+ checkSums << item.imageChecksums;
+ file.close();
+
+ if (!isBaseline)
+ report.addItem(pathForItem(item, true, false) + QLS(FileFormat),
+ pathForItem(item, false, false) + QLS(FileFormat),
+ item);
+
+ QByteArray msg(isBaseline ? "New baseline image stored: " :
+ "Mismatch report: " );
+ msg += BaselineServer::baseUrl();
+ if (isBaseline)
+ msg += pathForItem(item, true, false).toLatin1() + FileFormat;
+ else
+ msg += report.filePath();
+
+ proto.sendBlock(BaselineProtocol::Ack, msg);
+}
+
+
+void BaselineHandler::receiveDisconnect()
+{
+ qDebug() << runId << logtime() << "Client disconnected.";
+ report.end();
+ QThread::currentThread()->exit(0);
+}
+
+
+void BaselineHandler::mapPlatformInfo()
+{
+ mapped = plat;
+
+ // Map hostname
+ QString host = plat.value(PI_HostName).section(QLC('.'), 0, 0); // Filter away domain, if any
+ if (host.isEmpty() || host == QLS("localhost")) {
+ host = plat.value(PI_HostAddress);
+ } else {
+ // remove index postfix typical of vm hostnames
+ host.remove(QRegExp(QLS("\\d+$")));
+ if (host.endsWith(QLC('-')))
+ host.chop(1);
+ }
+ if (host.isEmpty())
+ host = QLS("unknownhost");
+ mapped.insert(PI_HostName, host);
+
+ // Map qmakespec
+ QString mkspec = plat.value(PI_QMakeSpec);
+ mapped.insert(PI_QMakeSpec, mkspec.replace(QLC('/'), QLC('_')));
+
+ // Map Qt version
+ QString ver = plat.value(PI_QtVersion);
+ mapped.insert(PI_QtVersion, ver.prepend(QLS("Qt-"))); //### TBD: remove patch version
+}
+
+QString BaselineHandler::pathForItem(const ImageItem &item, bool isBaseline, bool absolute)
+{
+ if (mapped.isEmpty())
+ mapPlatformInfo();
+
+ QString itemName = item.scriptName;
+ if (itemName.contains(QLC('.')))
+ itemName.replace(itemName.lastIndexOf(QLC('.')), 1, QLC('_'));
+ itemName.append(QLC('_'));
+ itemName.append(QString::number(item.scriptChecksum, 16).rightJustified(4, QLC('0')));
+
+ QStringList path;
+ if (absolute)
+ path += BaselineServer::storagePath();
+ path += QLS(isBaseline ? "baselines" : "mismatches");
+ path += item.engineAsString() + QLC('_') + item.formatAsString();
+ path += mapped.value(PI_QtVersion);
+ path += mapped.value(PI_QMakeSpec);
+ path += mapped.value(PI_HostName);
+ if (!isBaseline)
+ path += runId;
+ path += itemName + QLC('.');
+
+ return path.join(QLS("/"));
+}
+
+
+QString BaselineHandler::updateAllBaselines(const QString &host, const QString &id,
+ const QString &engine, const QString &format)
+{
+#if 0
+ QString basePath(BaselineServer::storagePath());
+ QString srcDir(basePath + host + QLC('/') + itemSubPath(engine, format, false) + id);
+ QString dstDir(basePath + host + QLC('/') + itemSubPath(engine, format));
+
+ QDir dir(srcDir);
+ QStringList nameFilter;
+ nameFilter << "*.metadata" << "*.png";
+ QStringList fileList = dir.entryList(nameFilter, QDir::Files | QDir::NoDotAndDotDot);
+
+ // remove the generated _fuzzycompared.png and _compared.png files from the list
+ QMutableStringListIterator it(fileList);
+ while (it.hasNext()) {
+ it.next();
+ if (it.value().endsWith(QLS("compared.png")))
+ it.remove();
+ }
+
+ QString res;
+ QProcess proc;
+ proc.setWorkingDirectory(srcDir);
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(QLS("cp"), QStringList() << QLS("-f") << fileList << dstDir);
+ proc.waitForFinished();
+ if (proc.exitCode() == 0)
+ res = QLS("Successfully updated baseline for all failed tests.");
+ else
+ res = QString("Error updating baseline: %1<br>"
+ "Command output: <pre>%2</pre>").arg(proc.errorString(), proc.readAll().constData());
+
+ return res;
+#else
+ return QString();
+#endif
+}
+
+QString BaselineHandler::updateSingleBaseline(const QString &oldBaseline, const QString &newBaseline)
+{
+ QString res;
+ QString basePath(BaselineServer::storagePath() + QLC('/'));
+ QString srcBase(basePath + newBaseline.left(newBaseline.length() - 3));
+ QString dstDir(basePath + oldBaseline.left(oldBaseline.lastIndexOf(QLC('/'))));
+
+ QProcess proc;
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(QLS("cp"), QStringList() << QLS("-f") << srcBase + QLS("png") << srcBase + QLS("metadata") << dstDir);
+ proc.waitForFinished();
+ if (proc.exitCode() == 0)
+ res = QString("Successfully updated '%1'").arg(oldBaseline + QLS("/metadata"));
+ else
+ res = QString("Error updating baseline: %1<br>"
+ "Command output: <pre>%2</pre>").arg(proc.errorString(), proc.readAll().constData());
+
+ return res;
+}
+
+QString BaselineHandler::blacklistTest(const QString &context, const QString &itemId, bool removeFromBlacklist)
+{
+ QFile file(BaselineServer::storagePath() + QLC('/') + context + QLS("/BLACKLIST"));
+ QStringList blackList;
+ if (file.open(QIODevice::ReadWrite)) {
+ while (!file.atEnd())
+ blackList.append(file.readLine().trimmed());
+
+ if (removeFromBlacklist)
+ blackList.removeAll(itemId);
+ else if (!blackList.contains(itemId))
+ blackList.append(itemId);
+
+ file.resize(0);
+ foreach (QString id, blackList)
+ file.write(id.toLatin1() + '\n');
+ file.close();
+ return QLS(removeFromBlacklist ? "Whitelisted " : "Blacklisted ") + itemId + QLS(" in context ") + context;
+ } else {
+ return QLS("Unable to update blacklisted tests, failed to open ") + file.fileName();
+ }
+}
+
+
+void BaselineHandler::testPathMapping()
+{
+ qDebug() << "Storage prefix:" << BaselineServer::storagePath();
+
+ QStringList hosts;
+ hosts << QLS("bq-ubuntu910-x86-01")
+ << QLS("bq-ubuntu910-x86-15")
+ << QLS("osl-mac-master-5.test.qt.nokia.com")
+ << QLS("osl-mac-master-6.test.qt.nokia.com")
+ << QLS("sv-xp-vs-010")
+ << QLS("sv-xp-vs-011")
+ << QLS("sv-solaris-sparc-008")
+ << QLS("macbuilder-02.test.troll.no")
+ << QLS("bqvm1164")
+ << QLS("chimera")
+ << QLS("localhost");
+
+ ImageItem item;
+ item.scriptName = QLS("arcs.qps");
+ item.engine = ImageItem::Raster;
+ item.renderFormat = QImage::Format_ARGB32_Premultiplied;
+ item.imageChecksums << 0x0123456789abcdefULL;
+ item.scriptChecksum = 0x0123;
+
+ plat.insert(PI_QtVersion, QLS("4.8.0"));
+ plat.insert(PI_BuildKey, QLS("(nobuildkey)"));
+ plat.insert(PI_QMakeSpec, "linux-g++");
+ foreach(const QString& host, hosts) {
+ mapped.clear();
+ plat.insert(PI_HostName, host);
+ qDebug() << "Baseline from" << host << "->" << pathForItem(item, true);
+ qDebug() << "Mismatch from" << host << "->" << pathForItem(item, false);
+ }
+}
+
+
+QString BaselineHandler::computeMismatchScore(const QImage &baseline, const QImage &rendered)
+{
+ if (baseline.size() != rendered.size() || baseline.format() != rendered.format())
+ return QLS("[No score, incomparable images.]");
+ if (baseline.depth() != 32)
+ return QLS("[Score computation not implemented for format.]");
+
+ int w = baseline.width();
+ int h = baseline.height();
+
+ uint ncd = 0; // number of differing color pixels
+ uint nad = 0; // number of differing alpha pixels
+ uint scd = 0; // sum of color pixel difference
+ uint sad = 0; // sum of alpha pixel difference
+
+ for (int y=0; y<h; ++y) {
+ const QRgb *bl = (const QRgb *) baseline.constScanLine(y);
+ const QRgb *rl = (const QRgb *) rendered.constScanLine(y);
+ for (int x=0; x<w; ++x) {
+ QRgb b = bl[x];
+ QRgb r = rl[x];
+ if (r != b) {
+ int dr = qAbs(qRed(b) - qRed(r));
+ int dg = qAbs(qGreen(b) - qGreen(r));
+ int db = qAbs(qBlue(b) - qBlue(r));
+ int ds = dr + dg + db;
+ int da = qAbs(qAlpha(b) - qAlpha(r));
+ if (ds) {
+ ncd++;
+ scd += ds;
+ }
+ if (da) {
+ nad++;
+ sad += da;
+ }
+ }
+ }
+ }
+
+ double pcd = 100.0 * ncd / (w*h); // percent of pixels that differ
+ double acd = ncd ? double(scd) / (3*ncd) : 0; // avg. difference
+ QString res = QString(QLS("Diffscore: %1% (Num:%2 Avg:%3)")).arg(pcd, 0, 'g', 2).arg(ncd).arg(acd, 0, 'g', 2);
+ if (baseline.hasAlphaChannel()) {
+ double pad = 100.0 * nad / (w*h); // percent of pixels that differ
+ double aad = nad ? double(sad) / (3*nad) : 0; // avg. difference
+ res += QString(QLS(" Alpha-diffscore: %1% (Num:%2 Avg:%3)")).arg(pad, 0, 'g', 2).arg(nad).arg(aad, 0, 'g', 2);
+ }
+ return res;
+}
diff --git a/tests/arthur/baselineserver/src/baselineserver.h b/tests/arthur/baselineserver/src/baselineserver.h
new file mode 100644
index 0000000..d49aedb
--- /dev/null
+++ b/tests/arthur/baselineserver/src/baselineserver.h
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef BASELINESERVER_H
+#define BASELINESERVER_H
+
+#include <QStringList>
+#include <QTcpServer>
+#include <QThread>
+#include <QTcpSocket>
+#include <QScopedPointer>
+#include <QTimer>
+#include <QDateTime>
+
+#include "baselineprotocol.h"
+#include "htmlpage.h"
+
+// #seconds between update checks
+#define HEARTBEAT 10
+
+class BaselineServer : public QTcpServer
+{
+ Q_OBJECT
+
+public:
+ BaselineServer(QObject *parent = 0);
+
+ static QString storagePath();
+ static QString baseUrl();
+
+protected:
+ void incomingConnection(int socketDescriptor);
+
+private slots:
+ void heartbeat();
+
+private:
+ QTimer *heartbeatTimer;
+ QDateTime meLastMod;
+ static QString storage;
+};
+
+
+
+class BaselineThread : public QThread
+{
+ Q_OBJECT
+
+public:
+ BaselineThread(int socketDescriptor, QObject *parent);
+ void run();
+
+private:
+ int socketDescriptor;
+};
+
+
+class BaselineHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ BaselineHandler(int socketDescriptor = -1);
+ void testPathMapping();
+
+ static QString updateAllBaselines(const QString &host, const QString &id,
+ const QString &engine, const QString &format);
+ static QString updateSingleBaseline(const QString &oldBaseline, const QString &newBaseline);
+ static QString blacklistTest(const QString &context, const QString &itemId, bool removeFromBlacklist = false);
+
+private slots:
+ void receiveRequest();
+ void receiveDisconnect();
+
+private:
+ void provideBaselineChecksums(const QByteArray &itemListBlock);
+ void storeImage(const QByteArray &itemBlock, bool isBaseline);
+ void mapPlatformInfo();
+ QString pathForItem(const ImageItem &item, bool isBaseline = true, bool absolute = true);
+ const char *logtime();
+ QString computeMismatchScore(const QImage& baseline, const QImage& rendered);
+
+ BaselineProtocol proto;
+ PlatformInfo plat;
+ PlatformInfo mapped;
+ bool connectionEstablished;
+ QString runId;
+ HTMLPage report;
+};
+
+#endif // BASELINESERVER_H
diff --git a/tests/arthur/baselineserver/src/baselineserver.pro b/tests/arthur/baselineserver/src/baselineserver.pro
new file mode 100644
index 0000000..a7be03d
--- /dev/null
+++ b/tests/arthur/baselineserver/src/baselineserver.pro
@@ -0,0 +1,27 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2010-08-11T11:51:09
+#
+#-------------------------------------------------
+
+QT += core network
+
+# gui needed for QImage
+# QT -= gui
+
+TARGET = baselineserver
+DESTDIR = ../bin
+CONFIG += console
+CONFIG -= app_bundle
+
+TEMPLATE = app
+
+include(../../common/baselineprotocol.pri)
+
+SOURCES += main.cpp \
+ baselineserver.cpp \
+ htmlpage.cpp
+
+HEADERS += \
+ baselineserver.h \
+ htmlpage.h
diff --git a/tests/arthur/baselineserver/src/htmlpage.cpp b/tests/arthur/baselineserver/src/htmlpage.cpp
new file mode 100644
index 0000000..f75da88
--- /dev/null
+++ b/tests/arthur/baselineserver/src/htmlpage.cpp
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "htmlpage.h"
+#include "baselineprotocol.h"
+#include "baselineserver.h"
+#include <QDir>
+#include <QProcess>
+#include <QUrl>
+
+HTMLPage::HTMLPage()
+ : headerWritten(false)
+{
+}
+
+HTMLPage::~HTMLPage()
+{
+ end();
+}
+
+QString HTMLPage::filePath()
+{
+ return path;
+}
+
+void HTMLPage::start(const QString &storagepath, const QString &runId, const PlatformInfo pinfo, const QString &context, const ImageItemList &itemList)
+{
+ end();
+
+ id = runId;
+ plat = pinfo;
+ ctx = context;
+ root = storagepath + QLC('/');
+ imageItems = itemList;
+ QString dir = root + QLS("reports/");
+ QDir cwd;
+ if (!cwd.exists(dir))
+ cwd.mkpath(dir);
+}
+
+
+void HTMLPage::writeHeader(const ImageItem &item)
+{
+ path = QLS("reports/") + id + QLC('_') + item.engineAsString()
+ + QLC('_') + item.formatAsString() + QLS(".html");
+
+ QString pageUrl = BaselineServer::baseUrl() + path;
+
+ file.setFileName(root + path);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
+ qWarning() << "Failed to open report file" << file.fileName();
+ out.setDevice(&file);
+
+ out << "<html><body><h1>Lancelot results from run " << id << "</h1>\n\n";
+ out << "<h3>Platform Info:</h3>\n";
+ out << "<table>\n";
+ foreach (QString key, plat.keys())
+ out << "<tr><td>" << key << "</td><td>" << plat.value(key) << "</td></tr>\n";
+ out << "</table>\n";
+
+#if 0
+ out << "<h3><a href=\"/cgi-bin/server.cgi?cmd=updateAllBaselines&id="<< id << "&host=" << plat.hostName
+ << "&engine=" << item.engineAsString() << "&format=" << item.formatAsString()
+ << "&url=" << pageUrl
+ << "\">Update all baselines</a><br>";
+#endif
+ out << "<table border=\"2\">\n"
+ "<tr>\n"
+ "<td><b>Script</b></td>\n"
+ "<td><b>Baseline</b></td>\n"
+ "<td><b>Rendered</b></td>\n"
+ "<td><b>Comparison</b></td>\n"
+ "<td><b>Info/Action</b></td>\n"
+ "</b></tr><br>";
+}
+
+
+void HTMLPage::writeFooter()
+{
+ out << "</table>\n</body></html>\n";
+}
+
+
+void HTMLPage::addItem(const QString &baseline, const QString &rendered, const ImageItem &item)
+{
+ if (!headerWritten) {
+ writeHeader(item);
+ headerWritten = true;
+ }
+ QString compared = generateCompared(baseline, rendered);
+ QString pageUrl = BaselineServer::baseUrl() + path;
+
+ out << "<tr>\n";
+ out << "<td>" << item.scriptName << "</td>\n";
+ QStringList images = QStringList() << baseline << rendered << compared;
+ foreach(const QString& img, images)
+ out << "<td><a href=\"/" << img << "\"><img src=\"/" << img << "\" width=240 height=240></a></td>\n";
+
+ out << "<td><p><a href=\"/cgi-bin/server.cgi?cmd=updateSingleBaseline&oldBaseline=" << baseline
+ << "&newBaseline=" << rendered << "&url=" << pageUrl << "\">Replace baseline with rendered</a></p>"
+ << "<p><a href=\"/cgi-bin/server.cgi?cmd=blacklist&context=" << ctx
+ << "&itemId=" << item.scriptName << "&url=" << pageUrl << "\">Blacklist this item</a></p>"
+ << "</td>\n";
+ out << "</tr>\n\n";
+
+ QMutableVectorIterator<ImageItem> it(imageItems);
+ while (it.hasNext()) {
+ it.next();
+ if (it.value().scriptName == item.scriptName) {
+ it.remove();
+ break;
+ }
+ }
+}
+
+
+void HTMLPage::end()
+{
+ if (file.isOpen()) {
+ // Add the names of the scripts that passed the test, or were blacklisted
+ QString pageUrl = BaselineServer::baseUrl() + path;
+ for (int i=0; i<imageItems.count(); ++i) {
+ out << "<tr><td>" << imageItems.at(i).scriptName << "</td><td>N/A</td><td>N/A</td><td>N/A</td><td>";
+ if (imageItems.at(i).status == ImageItem::IgnoreItem) {
+ out << "<span style=\"background-color:yellow\">Blacklisted</span> "
+ << "<a href=\"/cgi-bin/server.cgi?cmd=whitelist&context=" << ctx
+ << "&itemId=" << imageItems.at(i).scriptName << "&url=" << pageUrl
+ << "\">Whitelist item</a>";
+ } else {
+ out << "<span style=\"color:green\">Test passed</span>";
+ }
+ out << "</td></tr>\n";
+ }
+
+ writeFooter();
+ out.flush();
+ file.close();
+ path.clear();
+ headerWritten = false;
+ }
+}
+
+
+QString HTMLPage::generateCompared(const QString &baseline, const QString &rendered, bool fuzzy)
+{
+ QString res = rendered;
+ QFileInfo fi(res);
+ res.chop(fi.suffix().length() + 1);
+ res += QLS(fuzzy ? "_fuzzycompared.png" : "_compared.png");
+ QStringList args;
+ if (fuzzy)
+ args << QLS("-fuzz") << QLS("5%");
+ args << root+baseline << root+rendered << root+res;
+ QProcess::execute(QLS("compare"), args);
+ return res;
+}
+
+
+void HTMLPage::handleCGIQuery(const QString &query)
+{
+ QUrl cgiUrl(QLS("http://dummy/cgi-bin/dummy.cgi?") + query);
+ QTextStream s(stdout);
+ s << "Content-Type: text/html\r\n\r\n"
+ << "<HTML>";
+// << "Contents of QUERY_STRING:<br>"
+// << "Full string = " << query << "<br>";
+
+ QString command(cgiUrl.queryItemValue("cmd"));
+
+ if (command == QLS("updateSingleBaseline")) {
+ s << BaselineHandler::updateSingleBaseline(cgiUrl.queryItemValue(QLS("oldBaseline")),
+ cgiUrl.queryItemValue(QLS("newBaseline")));
+ } else if (command == QLS("updateAllBaselines")) {
+ s << BaselineHandler::updateAllBaselines(cgiUrl.queryItemValue(QLS("host")),
+ cgiUrl.queryItemValue(QLS("id")),
+ cgiUrl.queryItemValue(QLS("engine")),
+ cgiUrl.queryItemValue(QLS("format")));
+ } else if (command == QLS("blacklist")) {
+ // blacklist a test
+ s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")),
+ cgiUrl.queryItemValue(QLS("itemId")));
+ } else if (command == QLS("whitelist")) {
+ // whitelist a test
+ s << BaselineHandler::blacklistTest(cgiUrl.queryItemValue(QLS("context")),
+ cgiUrl.queryItemValue(QLS("itemId")), true);
+ } else {
+ s << "Unknown query:<br>" << query << "<br>";
+ }
+ s << "<p><a href=\"" << cgiUrl.queryItemValue(QLS("url")) << "\">Back to report</a>";
+ s << "</HTML>";
+}
diff --git a/tests/arthur/baselineserver/src/htmlpage.h b/tests/arthur/baselineserver/src/htmlpage.h
new file mode 100644
index 0000000..fa4d1ed
--- /dev/null
+++ b/tests/arthur/baselineserver/src/htmlpage.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef HTMLPAGE_H
+#define HTMLPAGE_H
+
+#include "baselineprotocol.h"
+#include <QFile>
+#include <QTextStream>
+
+class HTMLPage
+{
+public:
+ HTMLPage();
+ ~HTMLPage();
+
+ void start(const QString &storagePath, const QString &runId, const PlatformInfo pinfo, const QString &context, const ImageItemList &itemList);
+ void addItem(const QString &baseline, const QString &rendered, const ImageItem &item);
+ void end();
+ QString filePath();
+
+ static void handleCGIQuery(const QString &query);
+
+private:
+ void writeHeader(const ImageItem &item);
+ void writeFooter();
+ QString generateCompared(const QString &baseline, const QString &rendered, bool fuzzy = false);
+
+ QString root;
+ QString path;
+ QFile file;
+ QTextStream out;
+ QString id;
+ PlatformInfo plat;
+ QString ctx;
+ ImageItemList imageItems;
+ bool headerWritten;
+};
+
+#endif // HTMLPAGE_H
diff --git a/tests/arthur/baselineserver/src/main.cpp b/tests/arthur/baselineserver/src/main.cpp
new file mode 100644
index 0000000..a5ec4db
--- /dev/null
+++ b/tests/arthur/baselineserver/src/main.cpp
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore/QCoreApplication>
+#include "baselineserver.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ QString queryString(qgetenv("QUERY_STRING"));
+ if (!queryString.isEmpty()) {
+ // run as CGI script
+ HTMLPage::handleCGIQuery(queryString);
+ return 0;
+ }
+
+ if (a.arguments().contains(QLatin1String("-testmapping"))) {
+ BaselineHandler h;
+ h.testPathMapping();
+ return 0;
+ }
+
+ BaselineServer server;
+ if (!server.listen(QHostAddress::Any, BaselineProtocol::ServerPort)) {
+ qWarning("Failed to listen!");
+ return 1;
+ }
+
+ qDebug() << "\n*****" << argv[0] << "started, ready to serve on port" << BaselineProtocol::ServerPort
+ << "with baseline protocol version" << BaselineProtocol::ProtocolVersion << "*****\n";
+ return a.exec();
+}
diff --git a/tests/arthur/common/baselineprotocol.cpp b/tests/arthur/common/baselineprotocol.cpp
new file mode 100644
index 0000000..6d26e9a
--- /dev/null
+++ b/tests/arthur/common/baselineprotocol.cpp
@@ -0,0 +1,405 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "baselineprotocol.h"
+#include <QLibraryInfo>
+#include <QImage>
+#include <QBuffer>
+#include <QHostInfo>
+#include <QSysInfo>
+#include <QProcess>
+#include <QFileInfo>
+#include <QDir>
+#include <QTime>
+
+#ifndef QMAKESPEC
+#define QMAKESPEC "Unknown"
+#endif
+
+#if defined(Q_OS_WIN)
+#include <QtCore/qt_windows.h>
+#endif
+#if defined(Q_OS_UNIX)
+#include <time.h>
+#endif
+void BaselineProtocol::sysSleep(int ms)
+{
+#if defined(Q_OS_WIN)
+ Sleep(DWORD(ms));
+#else
+ struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
+ nanosleep(&ts, NULL);
+#endif
+}
+
+PlatformInfo::PlatformInfo(bool useLocal)
+ : QMap<QString, QString>()
+{
+ if (useLocal) {
+ insert(PI_HostName, QHostInfo::localHostName());
+ insert(PI_QtVersion, QLS(qVersion()));
+ insert(PI_QMakeSpec, QString(QLS(QMAKESPEC)).remove(QRegExp(QLS("^.*mkspecs/"))));
+ insert(PI_BuildKey, QLibraryInfo::buildKey());
+#if defined(Q_OS_LINUX)
+ insert(PI_OSName, QLS("Linux"));
+ QProcess uname;
+ uname.start(QLS("uname"), QStringList() << QLS("-r"));
+ if (uname.waitForFinished(3000))
+ insert(PI_OSVersion, QString::fromLocal8Bit(uname.readAllStandardOutput().constData()).simplified());
+#elif defined(Q_OS_WINCE)
+ insert(PI_OSName, QLS("WinCE"));
+ insert(PI_OSVersion, QString::number(QSysInfo::windowsVersion()));
+#elif defined(Q_OS_WIN)
+ insert(PI_OSName, QLS("Windows"));
+ insert(PI_OSVersion, QString::number(QSysInfo::windowsVersion()));
+#elif defined(Q_OS_MAC)
+ insert(PI_OSName, QLS("MacOS"));
+ insert(PI_OSVersion, QString::number(qMacVersion()));
+#elif defined(Q_OS_SYMBIAN)
+ insert(PI_OSName, QLS("Symbian"));
+ insert(PI_OSVersion, QString::number(QSysInfo::symbianVersion());
+#else
+ insert(PI_OSName, QLS("Other"));
+#endif
+
+ QProcess git;
+ QString cmd;
+ QStringList args;
+#if defined(Q_OS_WIN)
+ cmd = QLS("cmd.exe");
+ args << QLS("/c") << QLS("git");
+#else
+ cmd = QLS("git");
+#endif
+ args << QLS("log") << QLS("--max-count=1") << QLS("--pretty=%H [%an] [%ad] %s");
+ git.start(cmd, args);
+ git.waitForFinished(3000);
+ if (!git.exitCode())
+ insert(PI_GitCommit, QString::fromLocal8Bit(git.readAllStandardOutput().constData()).simplified());
+ else
+ insert(PI_GitCommit, QLS("Unknown"));
+ }
+
+ QByteArray gb = qgetenv("PULSE_GIT_BRANCH");
+ if (!gb.isEmpty())
+ insert(PI_PulseGitBranch, QString::fromLatin1(gb));
+ QByteArray tb = qgetenv("PULSE_TESTR_BRANCH");
+ if (!tb.isEmpty())
+ insert(PI_PulseTestrBranch, QString::fromLatin1(tb));
+}
+
+
+ImageItem &ImageItem::operator=(const ImageItem &other)
+{
+ scriptName = other.scriptName;
+ scriptChecksum = other.scriptChecksum;
+ status = other.status;
+ renderFormat = other.renderFormat;
+ engine = other.engine;
+ image = other.image;
+ imageChecksums = other.imageChecksums;
+ return *this;
+}
+
+// Defined in lookup3.c:
+void hashword2 (
+const quint32 *k, /* the key, an array of quint32 values */
+size_t length, /* the length of the key, in quint32s */
+quint32 *pc, /* IN: seed OUT: primary hash value */
+quint32 *pb); /* IN: more seed OUT: secondary hash value */
+
+quint64 ImageItem::computeChecksum(const QImage &image)
+{
+ QImage img(image);
+ const int bpl = img.bytesPerLine();
+ const int padBytes = bpl - (img.width() * img.depth() / 8);
+ if (padBytes) {
+ uchar *p = img.bits() + bpl - padBytes;
+ const int h = img.height();
+ for (int y = 0; y < h; ++y) {
+ qMemSet(p, 0, padBytes);
+ p += bpl;
+ }
+ }
+
+ quint32 h1 = 0xfeedbacc;
+ quint32 h2 = 0x21604894;
+ hashword2((const quint32 *)img.constBits(), img.byteCount()/4, &h1, &h2);
+ return (quint64(h1) << 32) | h2;
+}
+
+QString ImageItem::engineAsString() const
+{
+ switch (engine) {
+ case Raster:
+ return QLS("Raster");
+ break;
+ case OpenGL:
+ return QLS("OpenGL");
+ break;
+ default:
+ break;
+ }
+ return QLS("Unknown");
+}
+
+QString ImageItem::formatAsString() const
+{
+ static const int numFormats = 16;
+ static const char *formatNames[numFormats] = {
+ "Invalid",
+ "Mono",
+ "MonoLSB",
+ "Indexed8",
+ "RGB32",
+ "ARGB32",
+ "ARGB32-Premult",
+ "RGB16",
+ "ARGB8565-Premult",
+ "RGB666",
+ "ARGB6666-Premult",
+ "RGB555",
+ "ARGB8555-Premult",
+ "RGB888",
+ "RGB444",
+ "ARGB4444-Premult"
+ };
+ if (renderFormat < 0 || renderFormat >= numFormats)
+ return QLS("UnknownFormat");
+ return QLS(formatNames[renderFormat]);
+}
+
+QDataStream & operator<< (QDataStream &stream, const ImageItem &ii)
+{
+ stream << ii.scriptName << ii.scriptChecksum << quint8(ii.status) << quint8(ii.renderFormat)
+ << quint8(ii.engine) << ii.image << ii.imageChecksums;
+ return stream;
+}
+
+QDataStream & operator>> (QDataStream &stream, ImageItem &ii)
+{
+ quint8 encFormat, encStatus, encEngine;
+ stream >> ii.scriptName >> ii.scriptChecksum >> encStatus >> encFormat
+ >> encEngine >> ii.image >> ii.imageChecksums;
+ ii.renderFormat = QImage::Format(encFormat);
+ ii.status = ImageItem::ItemStatus(encStatus);
+ ii.engine = ImageItem::GraphicsEngine(encEngine);
+ return stream;
+}
+
+BaselineProtocol::~BaselineProtocol()
+{
+ socket.close();
+ if (socket.state() != QTcpSocket::UnconnectedState)
+ socket.waitForDisconnected(Timeout);
+}
+
+
+bool BaselineProtocol::connect(bool *dryrun)
+{
+ errMsg.clear();
+ QByteArray serverName(qgetenv("QT_LANCELOT_SERVER"));
+ if (serverName.isNull())
+ serverName = "lancelot.test.qt.nokia.com";
+
+ socket.connectToHost(serverName, ServerPort);
+ if (!socket.waitForConnected(Timeout)) {
+ sysSleep(Timeout); // Wait a bit and try again, the server might just be restarting
+ if (!socket.waitForConnected(Timeout)) {
+ errMsg += QLS("TCP connectToHost failed. Host:") + serverName + QLS(" port:") + QString::number(ServerPort);
+ return false;
+ }
+ }
+
+ PlatformInfo pi(true);
+ QByteArray block;
+ QDataStream ds(&block, QIODevice::ReadWrite);
+ ds << pi;
+ if (!sendBlock(AcceptPlatformInfo, block)) {
+ errMsg += QLS("Failed to send data to server.");
+ return false;
+ }
+
+ Command cmd = UnknownError;
+ if (!receiveBlock(&cmd, &block)) {
+ errMsg += QLS("Failed to get response from server.");
+ return false;
+ }
+
+ if (cmd == Abort) {
+ errMsg += QLS("Server aborted connection. Reason: ") + QString::fromLatin1(block);
+ return false;
+ }
+
+ if (dryrun)
+ *dryrun = (cmd == DoDryRun);
+
+ if (cmd != Ack && cmd != DoDryRun) {
+ errMsg += QLS("Unexpected response from server.");
+ return false;
+ }
+
+ return true;
+}
+
+
+bool BaselineProtocol::acceptConnection(PlatformInfo *pi)
+{
+ errMsg.clear();
+
+ QByteArray block;
+ Command cmd = AcceptPlatformInfo;
+ if (!receiveBlock(&cmd, &block) || cmd != AcceptPlatformInfo)
+ return false;
+
+ if (pi) {
+ QDataStream ds(block);
+ ds >> *pi;
+ pi->insert(PI_HostAddress, socket.peerAddress().toString());
+ }
+
+ return true;
+}
+
+
+bool BaselineProtocol::requestBaselineChecksums(ImageItemList *itemList)
+{
+ errMsg.clear();
+ if (!itemList)
+ return false;
+ QByteArray block;
+ QDataStream ds(&block, QIODevice::ReadWrite);
+ ds << *itemList;
+ if (!sendBlock(RequestBaselineChecksums, block))
+ return false;
+ Command cmd;
+ if (!receiveBlock(&cmd, &block))
+ return false;
+ ds.device()->seek(0);
+ ds >> *itemList;
+ return true;
+}
+
+
+bool BaselineProtocol::submitNewBaseline(const ImageItem &item, QByteArray *serverMsg)
+{
+ Command cmd;
+ return (sendItem(AcceptNewBaseline, item) && receiveBlock(&cmd, serverMsg) && cmd == Ack);
+}
+
+
+bool BaselineProtocol::submitMismatch(const ImageItem &item, QByteArray *serverMsg)
+{
+ Command cmd;
+ return (sendItem(AcceptMismatch, item) && receiveBlock(&cmd, serverMsg) && cmd == Ack);
+}
+
+
+bool BaselineProtocol::sendItem(Command cmd, const ImageItem &item)
+{
+ errMsg.clear();
+ QBuffer buf;
+ buf.open(QIODevice::WriteOnly);
+ QDataStream ds(&buf);
+ ds << item;
+ if (!sendBlock(cmd, buf.data())) {
+ errMsg.prepend(QLS("Failed to submit image to server. "));
+ return false;
+ }
+ return true;
+}
+
+
+bool BaselineProtocol::sendBlock(Command cmd, const QByteArray &block)
+{
+ QDataStream s(&socket);
+ // TBD: set qds version as a constant
+ s << quint16(ProtocolVersion) << quint16(cmd);
+ s.writeBytes(block.constData(), block.size());
+ return true;
+}
+
+
+bool BaselineProtocol::receiveBlock(Command *cmd, QByteArray *block)
+{
+ while (socket.bytesAvailable() < int(2*sizeof(quint16) + sizeof(quint32))) {
+ if (!socket.waitForReadyRead(Timeout))
+ return false;
+ }
+ QDataStream ds(&socket);
+ quint16 rcvProtocolVersion, rcvCmd;
+ ds >> rcvProtocolVersion >> rcvCmd;
+ if (rcvProtocolVersion != ProtocolVersion) {
+ errMsg = QLS("Baseline protocol version mismatch, received:") + QString::number(rcvProtocolVersion)
+ + QLS(" expected:") + QString::number(ProtocolVersion);
+ return false;
+ }
+ if (cmd)
+ *cmd = Command(rcvCmd);
+
+ QByteArray uMsg;
+ quint32 remaining;
+ ds >> remaining;
+ uMsg.resize(remaining);
+ int got = 0;
+ char* uMsgBuf = uMsg.data();
+ do {
+ got = ds.readRawData(uMsgBuf, remaining);
+ remaining -= got;
+ uMsgBuf += got;
+ } while (remaining && got >= 0 && socket.waitForReadyRead(Timeout));
+
+ if (got < 0)
+ return false;
+
+ if (block)
+ *block = uMsg;
+
+ return true;
+}
+
+
+QString BaselineProtocol::errorMessage()
+{
+ QString ret = errMsg;
+ if (socket.error() >= 0)
+ ret += QLS(" Socket state: ") + socket.errorString();
+ return ret;
+}
diff --git a/tests/arthur/common/baselineprotocol.h b/tests/arthur/common/baselineprotocol.h
new file mode 100644
index 0000000..9f59454
--- /dev/null
+++ b/tests/arthur/common/baselineprotocol.h
@@ -0,0 +1,168 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef BASELINEPROTOCOL_H
+#define BASELINEPROTOCOL_H
+
+#include <QDataStream>
+#include <QTcpSocket>
+#include <QImage>
+#include <QVector>
+#include <QMap>
+
+#define QLS QLatin1String
+#define QLC QLatin1Char
+
+#define FileFormat "png"
+
+const QString PI_HostName(QLS("HostName"));
+const QString PI_HostAddress(QLS("HostAddress"));
+const QString PI_OSName(QLS("OSName"));
+const QString PI_OSVersion(QLS("OSVersion"));
+const QString PI_QtVersion(QLS("QtVersion"));
+const QString PI_BuildKey(QLS("BuildKey"));
+const QString PI_GitCommit(QLS("GitCommit"));
+const QString PI_QMakeSpec(QLS("QMakeSpec"));
+const QString PI_PulseGitBranch(QLS("PulseGitBranch"));
+const QString PI_PulseTestrBranch(QLS("PulseTestrBranch"));
+
+class PlatformInfo : public QMap<QString, QString>
+{
+public:
+ PlatformInfo(bool useLocal = false);
+};
+
+struct ImageItem
+{
+public:
+ ImageItem()
+ : status(Ok), renderFormat(QImage::Format_Invalid), engine(Raster), scriptChecksum(0)
+ {}
+ ImageItem(const ImageItem &other)
+ { *this = other; }
+ ~ImageItem()
+ {}
+ ImageItem &operator=(const ImageItem &other);
+ static quint64 computeChecksum(const QImage& image);
+ QString engineAsString() const;
+ QString formatAsString() const;
+
+ enum ItemStatus {
+ Ok = 0,
+ BaselineNotFound = 1,
+ IgnoreItem = 2
+ };
+
+ enum GraphicsEngine {
+ Raster = 0,
+ OpenGL = 1
+ };
+
+ QString scriptName;
+ ItemStatus status;
+ QImage::Format renderFormat;
+ GraphicsEngine engine;
+ QImage image;
+ QList<quint64> imageChecksums;
+ // tbd: add diffscore
+ quint16 scriptChecksum;
+};
+QDataStream & operator<< (QDataStream &stream, const ImageItem &ii);
+QDataStream & operator>> (QDataStream& stream, ImageItem& ii);
+
+Q_DECLARE_METATYPE(ImageItem);
+
+typedef QVector<ImageItem> ImageItemList;
+
+class BaselineProtocol
+{
+public:
+ BaselineProtocol() {}
+ ~BaselineProtocol();
+
+ // ****************************************************
+ // Important constants here
+ // ****************************************************
+ enum Constant {
+ ProtocolVersion = 2,
+ ServerPort = 54129,
+ Timeout = 5000
+ };
+
+ enum Command {
+ UnknownError = 0,
+ // Queries
+ AcceptPlatformInfo = 1,
+ RequestBaselineChecksums = 2,
+ AcceptNewBaseline = 4,
+ AcceptMismatch = 5,
+ // Responses
+ Ack = 128,
+ Abort = 129,
+ DoDryRun = 130
+ };
+
+ // For client:
+ bool connect(bool *dryrun = 0);
+ bool requestBaselineChecksums(ImageItemList *itemList);
+ bool submitNewBaseline(const ImageItem &item, QByteArray *serverMsg);
+ bool submitMismatch(const ImageItem &item, QByteArray *serverMsg);
+
+ // For server:
+ bool acceptConnection(PlatformInfo *pi);
+
+ QString errorMessage();
+
+private:
+ bool sendItem(Command cmd, const ImageItem &item);
+
+ bool sendBlock(Command cmd, const QByteArray &block);
+ bool receiveBlock(Command *cmd, QByteArray *block);
+ void sysSleep(int ms);
+
+ QString errMsg;
+ QTcpSocket socket;
+
+ friend class BaselineThread;
+ friend class BaselineHandler;
+};
+
+
+#endif // BASELINEPROTOCOL_H
diff --git a/tests/arthur/common/baselineprotocol.pri b/tests/arthur/common/baselineprotocol.pri
new file mode 100644
index 0000000..996f9d5
--- /dev/null
+++ b/tests/arthur/common/baselineprotocol.pri
@@ -0,0 +1,10 @@
+INCLUDEPATH += $$PWD
+
+QT *= network
+
+SOURCES += \
+ $$PWD/baselineprotocol.cpp \
+ $$PWD/lookup3.cpp
+
+HEADERS += \
+ $$PWD/baselineprotocol.h
diff --git a/tests/arthur/common/lookup3.cpp b/tests/arthur/common/lookup3.cpp
new file mode 100644
index 0000000..8cdc64b
--- /dev/null
+++ b/tests/arthur/common/lookup3.cpp
@@ -0,0 +1,786 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+/*
+These functions are based on:
+
+-------------------------------------------------------------------------------
+lookup3.c, by Bob Jenkins, May 2006, Public Domain.
+
+These are functions for producing 32-bit hashes for hash table lookup.
+hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final()
+are externally useful functions. Routines to test the hash are included
+if SELF_TEST is defined. You can use this free for any purpose. It's in
+the public domain. It has no warranty.
+
+You probably want to use hashlittle(). hashlittle() and hashbig()
+hash byte arrays. hashlittle() is is faster than hashbig() on
+little-endian machines. Intel and AMD are little-endian machines.
+On second thought, you probably want hashlittle2(), which is identical to
+hashlittle() except it returns two 32-bit hashes for the price of one.
+You could implement hashbig2() if you wanted but I haven't bothered here.
+
+If you want to find a hash of, say, exactly 7 integers, do
+ a = i1; b = i2; c = i3;
+ mix(a,b,c);
+ a += i4; b += i5; c += i6;
+ mix(a,b,c);
+ a += i7;
+ final(a,b,c);
+then use c as the hash value. If you have a variable length array of
+4-byte integers to hash, use hashword(). If you have a byte array (like
+a character string), use hashlittle(). If you have several byte arrays, or
+a mix of things, see the comments above hashlittle().
+
+Why is this so big? I read 12 bytes at a time into 3 4-byte integers,
+then mix those integers. This is fast (you can do a lot more thorough
+mixing with 12*3 instructions on 3 integers than you can with 3 instructions
+on 1 byte), but shoehorning those bytes into integers efficiently is messy.
+-------------------------------------------------------------------------------
+*/
+
+#include <QtGlobal>
+
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+# define HASH_LITTLE_ENDIAN 0
+# define HASH_BIG_ENDIAN 1
+#else
+# define HASH_LITTLE_ENDIAN 1
+# define HASH_BIG_ENDIAN 0
+#endif
+
+#define hashsize(n) ((quint32)1<<(n))
+#define hashmask(n) (hashsize(n)-1)
+#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
+
+/*
+-------------------------------------------------------------------------------
+mix -- mix 3 32-bit values reversibly.
+
+This is reversible, so any information in (a,b,c) before mix() is
+still in (a,b,c) after mix().
+
+If four pairs of (a,b,c) inputs are run through mix(), or through
+mix() in reverse, there are at least 32 bits of the output that
+are sometimes the same for one pair and different for another pair.
+This was tested for:
+* pairs that differed by one bit, by two bits, in any combination
+ of top bits of (a,b,c), or in any combination of bottom bits of
+ (a,b,c).
+* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed
+ the output delta to a Gray code (a^(a>>1)) so a string of 1's (as
+ is commonly produced by subtraction) look like a single 1-bit
+ difference.
+* the base values were pseudorandom, all zero but one bit set, or
+ all zero plus a counter that starts at zero.
+
+Some k values for my "a-=c; a^=rot(c,k); c+=b;" arrangement that
+satisfy this are
+ 4 6 8 16 19 4
+ 9 15 3 18 27 15
+ 14 9 3 7 17 3
+Well, "9 15 3 18 27 15" didn't quite get 32 bits diffing
+for "differ" defined as + with a one-bit base and a two-bit delta. I
+used http://burtleburtle.net/bob/hash/avalanche.html to choose
+the operations, constants, and arrangements of the variables.
+
+This does not achieve avalanche. There are input bits of (a,b,c)
+that fail to affect some output bits of (a,b,c), especially of a. The
+most thoroughly mixed value is c, but it doesn't really even achieve
+avalanche in c.
+
+This allows some parallelism. Read-after-writes are good at doubling
+the number of bits affected, so the goal of mixing pulls in the opposite
+direction as the goal of parallelism. I did what I could. Rotates
+seem to cost as much as shifts on every machine I could lay my hands
+on, and rotates are much kinder to the top and bottom bits, so I used
+rotates.
+-------------------------------------------------------------------------------
+*/
+#define mix(a,b,c) \
+{ \
+ a -= c; a ^= rot(c, 4); c += b; \
+ b -= a; b ^= rot(a, 6); a += c; \
+ c -= b; c ^= rot(b, 8); b += a; \
+ a -= c; a ^= rot(c,16); c += b; \
+ b -= a; b ^= rot(a,19); a += c; \
+ c -= b; c ^= rot(b, 4); b += a; \
+}
+
+/*
+-------------------------------------------------------------------------------
+final -- final mixing of 3 32-bit values (a,b,c) into c
+
+Pairs of (a,b,c) values differing in only a few bits will usually
+produce values of c that look totally different. This was tested for
+* pairs that differed by one bit, by two bits, in any combination
+ of top bits of (a,b,c), or in any combination of bottom bits of
+ (a,b,c).
+* "differ" is defined as +, -, ^, or ~^. For + and -, I transformed
+ the output delta to a Gray code (a^(a>>1)) so a string of 1's (as
+ is commonly produced by subtraction) look like a single 1-bit
+ difference.
+* the base values were pseudorandom, all zero but one bit set, or
+ all zero plus a counter that starts at zero.
+
+These constants passed:
+ 14 11 25 16 4 14 24
+ 12 14 25 16 4 14 24
+and these came close:
+ 4 8 15 26 3 22 24
+ 10 8 15 26 3 22 24
+ 11 8 15 26 3 22 24
+-------------------------------------------------------------------------------
+*/
+#define final(a,b,c) \
+{ \
+ c ^= b; c -= rot(b,14); \
+ a ^= c; a -= rot(c,11); \
+ b ^= a; b -= rot(a,25); \
+ c ^= b; c -= rot(b,16); \
+ a ^= c; a -= rot(c,4); \
+ b ^= a; b -= rot(a,14); \
+ c ^= b; c -= rot(b,24); \
+}
+
+/*
+--------------------------------------------------------------------
+ This works on all machines. To be useful, it requires
+ -- that the key be an array of quint32's, and
+ -- that the length be the number of quint32's in the key
+
+ The function hashword() is identical to hashlittle() on little-endian
+ machines, and identical to hashbig() on big-endian machines,
+ except that the length has to be measured in quint32s rather than in
+ bytes. hashlittle() is more complicated than hashword() only because
+ hashlittle() has to dance around fitting the key bytes into registers.
+--------------------------------------------------------------------
+*/
+quint32 hashword(
+const quint32 *k, /* the key, an array of quint32 values */
+size_t length, /* the length of the key, in quint32s */
+quint32 initval) /* the previous hash, or an arbitrary value */
+{
+ quint32 a,b,c;
+
+ /* Set up the internal state */
+ a = b = c = 0xdeadbeef + (((quint32)length)<<2) + initval;
+
+ /*------------------------------------------------- handle most of the key */
+ while (length > 3)
+ {
+ a += k[0];
+ b += k[1];
+ c += k[2];
+ mix(a,b,c);
+ length -= 3;
+ k += 3;
+ }
+
+ /*------------------------------------------- handle the last 3 quint32's */
+ switch(length) /* all the case statements fall through */
+ {
+ case 3 : c+=k[2];
+ case 2 : b+=k[1];
+ case 1 : a+=k[0];
+ final(a,b,c);
+ case 0: /* case 0: nothing left to add */
+ break;
+ }
+ /*------------------------------------------------------ report the result */
+ return c;
+}
+
+
+/*
+--------------------------------------------------------------------
+hashword2() -- same as hashword(), but take two seeds and return two
+32-bit values. pc and pb must both be nonnull, and *pc and *pb must
+both be initialized with seeds. If you pass in (*pb)==0, the output
+(*pc) will be the same as the return value from hashword().
+--------------------------------------------------------------------
+*/
+void hashword2 (
+const quint32 *k, /* the key, an array of quint32 values */
+size_t length, /* the length of the key, in quint32s */
+quint32 *pc, /* IN: seed OUT: primary hash value */
+quint32 *pb) /* IN: more seed OUT: secondary hash value */
+{
+ quint32 a,b,c;
+
+ /* Set up the internal state */
+ a = b = c = 0xdeadbeef + ((quint32)(length<<2)) + *pc;
+ c += *pb;
+
+ /*------------------------------------------------- handle most of the key */
+ while (length > 3)
+ {
+ a += k[0];
+ b += k[1];
+ c += k[2];
+ mix(a,b,c);
+ length -= 3;
+ k += 3;
+ }
+
+ /*------------------------------------------- handle the last 3 quint32's */
+ switch(length) /* all the case statements fall through */
+ {
+ case 3 : c+=k[2];
+ case 2 : b+=k[1];
+ case 1 : a+=k[0];
+ final(a,b,c);
+ case 0: /* case 0: nothing left to add */
+ break;
+ }
+ /*------------------------------------------------------ report the result */
+ *pc=c; *pb=b;
+}
+
+
+/*
+-------------------------------------------------------------------------------
+hashlittle() -- hash a variable-length key into a 32-bit value
+ k : the key (the unaligned variable-length array of bytes)
+ length : the length of the key, counting by bytes
+ initval : can be any 4-byte value
+Returns a 32-bit value. Every bit of the key affects every bit of
+the return value. Two keys differing by one or two bits will have
+totally different hash values.
+
+The best hash table sizes are powers of 2. There is no need to do
+mod a prime (mod is sooo slow!). If you need less than 32 bits,
+use a bitmask. For example, if you need only 10 bits, do
+ h = (h & hashmask(10));
+In which case, the hash table should have hashsize(10) elements.
+
+If you are hashing n strings (quint8 **)k, do it like this:
+ for (i=0, h=0; i<n; ++i) h = hashlittle( k[i], len[i], h);
+
+By Bob Jenkins, 2006. bob_jenkins@burtleburtle.net. You may use this
+code any way you wish, private, educational, or commercial. It's free.
+
+Use for hash table lookup, or anything where one collision in 2^^32 is
+acceptable. Do NOT use for cryptographic purposes.
+-------------------------------------------------------------------------------
+*/
+
+quint32 hashlittle( const void *key, size_t length, quint32 initval)
+{
+ quint32 a,b,c; /* internal state */
+ union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */
+
+ /* Set up the internal state */
+ a = b = c = 0xdeadbeef + ((quint32)length) + initval;
+
+ u.ptr = key;
+ if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
+ const quint32 *k = (const quint32 *)key; /* read 32-bit chunks */
+
+ /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += k[0];
+ b += k[1];
+ c += k[2];
+ mix(a,b,c);
+ length -= 12;
+ k += 3;
+ }
+
+ /*----------------------------- handle the last (probably partial) block */
+ /*
+ * "k[2]&0xffffff" actually reads beyond the end of the string, but
+ * then masks off the part it's not allowed to read. Because the
+ * string is aligned, the masked-off tail is in the same word as the
+ * rest of the string. Every machine with memory protection I've seen
+ * does it on word boundaries, so is OK with this. But VALGRIND will
+ * still catch it and complain. The masking trick does make the hash
+ * noticably faster for short strings (like English words).
+ */
+#ifndef VALGRIND
+
+ switch(length)
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
+ case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;
+ case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=k[1]&0xffffff; a+=k[0]; break;
+ case 6 : b+=k[1]&0xffff; a+=k[0]; break;
+ case 5 : b+=k[1]&0xff; a+=k[0]; break;
+ case 4 : a+=k[0]; break;
+ case 3 : a+=k[0]&0xffffff; break;
+ case 2 : a+=k[0]&0xffff; break;
+ case 1 : a+=k[0]&0xff; break;
+ case 0 : return c; /* zero length strings require no mixing */
+ }
+
+#else /* make valgrind happy */
+
+ const quint8 *k8 = (const quint8 *)k;
+ switch(length)
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=((quint32)k8[10])<<16; /* fall through */
+ case 10: c+=((quint32)k8[9])<<8; /* fall through */
+ case 9 : c+=k8[8]; /* fall through */
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=((quint32)k8[6])<<16; /* fall through */
+ case 6 : b+=((quint32)k8[5])<<8; /* fall through */
+ case 5 : b+=k8[4]; /* fall through */
+ case 4 : a+=k[0]; break;
+ case 3 : a+=((quint32)k8[2])<<16; /* fall through */
+ case 2 : a+=((quint32)k8[1])<<8; /* fall through */
+ case 1 : a+=k8[0]; break;
+ case 0 : return c;
+ }
+
+#endif /* !valgrind */
+
+ } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
+ const quint16 *k = (const quint16 *)key; /* read 16-bit chunks */
+ const quint8 *k8;
+
+ /*--------------- all but last block: aligned reads and different mixing */
+ while (length > 12)
+ {
+ a += k[0] + (((quint32)k[1])<<16);
+ b += k[2] + (((quint32)k[3])<<16);
+ c += k[4] + (((quint32)k[5])<<16);
+ mix(a,b,c);
+ length -= 12;
+ k += 6;
+ }
+
+ /*----------------------------- handle the last (probably partial) block */
+ k8 = (const quint8 *)k;
+ switch(length)
+ {
+ case 12: c+=k[4]+(((quint32)k[5])<<16);
+ b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 11: c+=((quint32)k8[10])<<16; /* fall through */
+ case 10: c+=k[4];
+ b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 9 : c+=k8[8]; /* fall through */
+ case 8 : b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 7 : b+=((quint32)k8[6])<<16; /* fall through */
+ case 6 : b+=k[2];
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 5 : b+=k8[4]; /* fall through */
+ case 4 : a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 3 : a+=((quint32)k8[2])<<16; /* fall through */
+ case 2 : a+=k[0];
+ break;
+ case 1 : a+=k8[0];
+ break;
+ case 0 : return c; /* zero length requires no mixing */
+ }
+
+ } else { /* need to read the key one byte at a time */
+ const quint8 *k = (const quint8 *)key;
+
+ /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += k[0];
+ a += ((quint32)k[1])<<8;
+ a += ((quint32)k[2])<<16;
+ a += ((quint32)k[3])<<24;
+ b += k[4];
+ b += ((quint32)k[5])<<8;
+ b += ((quint32)k[6])<<16;
+ b += ((quint32)k[7])<<24;
+ c += k[8];
+ c += ((quint32)k[9])<<8;
+ c += ((quint32)k[10])<<16;
+ c += ((quint32)k[11])<<24;
+ mix(a,b,c);
+ length -= 12;
+ k += 12;
+ }
+
+ /*-------------------------------- last block: affect all 32 bits of (c) */
+ switch(length) /* all the case statements fall through */
+ {
+ case 12: c+=((quint32)k[11])<<24;
+ case 11: c+=((quint32)k[10])<<16;
+ case 10: c+=((quint32)k[9])<<8;
+ case 9 : c+=k[8];
+ case 8 : b+=((quint32)k[7])<<24;
+ case 7 : b+=((quint32)k[6])<<16;
+ case 6 : b+=((quint32)k[5])<<8;
+ case 5 : b+=k[4];
+ case 4 : a+=((quint32)k[3])<<24;
+ case 3 : a+=((quint32)k[2])<<16;
+ case 2 : a+=((quint32)k[1])<<8;
+ case 1 : a+=k[0];
+ break;
+ case 0 : return c;
+ }
+ }
+
+ final(a,b,c);
+ return c;
+}
+
+
+/*
+ * hashlittle2: return 2 32-bit hash values
+ *
+ * This is identical to hashlittle(), except it returns two 32-bit hash
+ * values instead of just one. This is good enough for hash table
+ * lookup with 2^^64 buckets, or if you want a second hash if you're not
+ * happy with the first, or if you want a probably-unique 64-bit ID for
+ * the key. *pc is better mixed than *pb, so use *pc first. If you want
+ * a 64-bit value do something like "*pc + (((uint64_t)*pb)<<32)".
+ */
+void hashlittle2(
+ const void *key, /* the key to hash */
+ size_t length, /* length of the key */
+ quint32 *pc, /* IN: primary initval, OUT: primary hash */
+ quint32 *pb) /* IN: secondary initval, OUT: secondary hash */
+{
+ quint32 a,b,c; /* internal state */
+ union { const void *ptr; size_t i; } u; /* needed for Mac Powerbook G4 */
+
+ /* Set up the internal state */
+ a = b = c = 0xdeadbeef + ((quint32)length) + *pc;
+ c += *pb;
+
+ u.ptr = key;
+ if (HASH_LITTLE_ENDIAN && ((u.i & 0x3) == 0)) {
+ const quint32 *k = (const quint32 *)key; /* read 32-bit chunks */
+
+ /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += k[0];
+ b += k[1];
+ c += k[2];
+ mix(a,b,c);
+ length -= 12;
+ k += 3;
+ }
+
+ /*----------------------------- handle the last (probably partial) block */
+ /*
+ * "k[2]&0xffffff" actually reads beyond the end of the string, but
+ * then masks off the part it's not allowed to read. Because the
+ * string is aligned, the masked-off tail is in the same word as the
+ * rest of the string. Every machine with memory protection I've seen
+ * does it on word boundaries, so is OK with this. But VALGRIND will
+ * still catch it and complain. The masking trick does make the hash
+ * noticably faster for short strings (like English words).
+ */
+#ifndef VALGRIND
+
+ switch(length)
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=k[2]&0xffffff; b+=k[1]; a+=k[0]; break;
+ case 10: c+=k[2]&0xffff; b+=k[1]; a+=k[0]; break;
+ case 9 : c+=k[2]&0xff; b+=k[1]; a+=k[0]; break;
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=k[1]&0xffffff; a+=k[0]; break;
+ case 6 : b+=k[1]&0xffff; a+=k[0]; break;
+ case 5 : b+=k[1]&0xff; a+=k[0]; break;
+ case 4 : a+=k[0]; break;
+ case 3 : a+=k[0]&0xffffff; break;
+ case 2 : a+=k[0]&0xffff; break;
+ case 1 : a+=k[0]&0xff; break;
+ case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
+ }
+
+#else /* make valgrind happy */
+
+ const quint8 *k8 = (const quint8 *)k;
+ switch(length)
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=((quint32)k8[10])<<16; /* fall through */
+ case 10: c+=((quint32)k8[9])<<8; /* fall through */
+ case 9 : c+=k8[8]; /* fall through */
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=((quint32)k8[6])<<16; /* fall through */
+ case 6 : b+=((quint32)k8[5])<<8; /* fall through */
+ case 5 : b+=k8[4]; /* fall through */
+ case 4 : a+=k[0]; break;
+ case 3 : a+=((quint32)k8[2])<<16; /* fall through */
+ case 2 : a+=((quint32)k8[1])<<8; /* fall through */
+ case 1 : a+=k8[0]; break;
+ case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
+ }
+
+#endif /* !valgrind */
+
+ } else if (HASH_LITTLE_ENDIAN && ((u.i & 0x1) == 0)) {
+ const quint16 *k = (const quint16 *)key; /* read 16-bit chunks */
+ const quint8 *k8;
+
+ /*--------------- all but last block: aligned reads and different mixing */
+ while (length > 12)
+ {
+ a += k[0] + (((quint32)k[1])<<16);
+ b += k[2] + (((quint32)k[3])<<16);
+ c += k[4] + (((quint32)k[5])<<16);
+ mix(a,b,c);
+ length -= 12;
+ k += 6;
+ }
+
+ /*----------------------------- handle the last (probably partial) block */
+ k8 = (const quint8 *)k;
+ switch(length)
+ {
+ case 12: c+=k[4]+(((quint32)k[5])<<16);
+ b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 11: c+=((quint32)k8[10])<<16; /* fall through */
+ case 10: c+=k[4];
+ b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 9 : c+=k8[8]; /* fall through */
+ case 8 : b+=k[2]+(((quint32)k[3])<<16);
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 7 : b+=((quint32)k8[6])<<16; /* fall through */
+ case 6 : b+=k[2];
+ a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 5 : b+=k8[4]; /* fall through */
+ case 4 : a+=k[0]+(((quint32)k[1])<<16);
+ break;
+ case 3 : a+=((quint32)k8[2])<<16; /* fall through */
+ case 2 : a+=k[0];
+ break;
+ case 1 : a+=k8[0];
+ break;
+ case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
+ }
+
+ } else { /* need to read the key one byte at a time */
+ const quint8 *k = (const quint8 *)key;
+
+ /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += k[0];
+ a += ((quint32)k[1])<<8;
+ a += ((quint32)k[2])<<16;
+ a += ((quint32)k[3])<<24;
+ b += k[4];
+ b += ((quint32)k[5])<<8;
+ b += ((quint32)k[6])<<16;
+ b += ((quint32)k[7])<<24;
+ c += k[8];
+ c += ((quint32)k[9])<<8;
+ c += ((quint32)k[10])<<16;
+ c += ((quint32)k[11])<<24;
+ mix(a,b,c);
+ length -= 12;
+ k += 12;
+ }
+
+ /*-------------------------------- last block: affect all 32 bits of (c) */
+ switch(length) /* all the case statements fall through */
+ {
+ case 12: c+=((quint32)k[11])<<24;
+ case 11: c+=((quint32)k[10])<<16;
+ case 10: c+=((quint32)k[9])<<8;
+ case 9 : c+=k[8];
+ case 8 : b+=((quint32)k[7])<<24;
+ case 7 : b+=((quint32)k[6])<<16;
+ case 6 : b+=((quint32)k[5])<<8;
+ case 5 : b+=k[4];
+ case 4 : a+=((quint32)k[3])<<24;
+ case 3 : a+=((quint32)k[2])<<16;
+ case 2 : a+=((quint32)k[1])<<8;
+ case 1 : a+=k[0];
+ break;
+ case 0 : *pc=c; *pb=b; return; /* zero length strings require no mixing */
+ }
+ }
+
+ final(a,b,c);
+ *pc=c; *pb=b;
+}
+
+
+
+/*
+ * hashbig():
+ * This is the same as hashword() on big-endian machines. It is different
+ * from hashlittle() on all machines. hashbig() takes advantage of
+ * big-endian byte ordering.
+ */
+quint32 hashbig( const void *key, size_t length, quint32 initval)
+{
+ quint32 a,b,c;
+ union { const void *ptr; size_t i; } u; /* to cast key to (size_t) happily */
+
+ /* Set up the internal state */
+ a = b = c = 0xdeadbeef + ((quint32)length) + initval;
+
+ u.ptr = key;
+ if (HASH_BIG_ENDIAN && ((u.i & 0x3) == 0)) {
+ const quint32 *k = (const quint32 *)key; /* read 32-bit chunks */
+
+ /*------ all but last block: aligned reads and affect 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += k[0];
+ b += k[1];
+ c += k[2];
+ mix(a,b,c);
+ length -= 12;
+ k += 3;
+ }
+
+ /*----------------------------- handle the last (probably partial) block */
+ /*
+ * "k[2]<<8" actually reads beyond the end of the string, but
+ * then shifts out the part it's not allowed to read. Because the
+ * string is aligned, the illegal read is in the same word as the
+ * rest of the string. Every machine with memory protection I've seen
+ * does it on word boundaries, so is OK with this. But VALGRIND will
+ * still catch it and complain. The masking trick does make the hash
+ * noticably faster for short strings (like English words).
+ */
+#ifndef VALGRIND
+
+ switch(length)
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=k[2]&0xffffff00; b+=k[1]; a+=k[0]; break;
+ case 10: c+=k[2]&0xffff0000; b+=k[1]; a+=k[0]; break;
+ case 9 : c+=k[2]&0xff000000; b+=k[1]; a+=k[0]; break;
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=k[1]&0xffffff00; a+=k[0]; break;
+ case 6 : b+=k[1]&0xffff0000; a+=k[0]; break;
+ case 5 : b+=k[1]&0xff000000; a+=k[0]; break;
+ case 4 : a+=k[0]; break;
+ case 3 : a+=k[0]&0xffffff00; break;
+ case 2 : a+=k[0]&0xffff0000; break;
+ case 1 : a+=k[0]&0xff000000; break;
+ case 0 : return c; /* zero length strings require no mixing */
+ }
+
+#else /* make valgrind happy */
+
+ const quint8 *k8 = (const quint8 *)k;
+ switch(length) /* all the case statements fall through */
+ {
+ case 12: c+=k[2]; b+=k[1]; a+=k[0]; break;
+ case 11: c+=((quint32)k8[10])<<8; /* fall through */
+ case 10: c+=((quint32)k8[9])<<16; /* fall through */
+ case 9 : c+=((quint32)k8[8])<<24; /* fall through */
+ case 8 : b+=k[1]; a+=k[0]; break;
+ case 7 : b+=((quint32)k8[6])<<8; /* fall through */
+ case 6 : b+=((quint32)k8[5])<<16; /* fall through */
+ case 5 : b+=((quint32)k8[4])<<24; /* fall through */
+ case 4 : a+=k[0]; break;
+ case 3 : a+=((quint32)k8[2])<<8; /* fall through */
+ case 2 : a+=((quint32)k8[1])<<16; /* fall through */
+ case 1 : a+=((quint32)k8[0])<<24; break;
+ case 0 : return c;
+ }
+
+#endif /* !VALGRIND */
+
+ } else { /* need to read the key one byte at a time */
+ const quint8 *k = (const quint8 *)key;
+
+ /*--------------- all but the last block: affect some 32 bits of (a,b,c) */
+ while (length > 12)
+ {
+ a += ((quint32)k[0])<<24;
+ a += ((quint32)k[1])<<16;
+ a += ((quint32)k[2])<<8;
+ a += ((quint32)k[3]);
+ b += ((quint32)k[4])<<24;
+ b += ((quint32)k[5])<<16;
+ b += ((quint32)k[6])<<8;
+ b += ((quint32)k[7]);
+ c += ((quint32)k[8])<<24;
+ c += ((quint32)k[9])<<16;
+ c += ((quint32)k[10])<<8;
+ c += ((quint32)k[11]);
+ mix(a,b,c);
+ length -= 12;
+ k += 12;
+ }
+
+ /*-------------------------------- last block: affect all 32 bits of (c) */
+ switch(length) /* all the case statements fall through */
+ {
+ case 12: c+=k[11];
+ case 11: c+=((quint32)k[10])<<8;
+ case 10: c+=((quint32)k[9])<<16;
+ case 9 : c+=((quint32)k[8])<<24;
+ case 8 : b+=k[7];
+ case 7 : b+=((quint32)k[6])<<8;
+ case 6 : b+=((quint32)k[5])<<16;
+ case 5 : b+=((quint32)k[4])<<24;
+ case 4 : a+=k[3];
+ case 3 : a+=((quint32)k[2])<<8;
+ case 2 : a+=((quint32)k[1])<<16;
+ case 1 : a+=((quint32)k[0])<<24;
+ break;
+ case 0 : return c;
+ }
+ }
+
+ final(a,b,c);
+ return c;
+}
diff --git a/tests/arthur/common/paintcommands.cpp b/tests/arthur/common/paintcommands.cpp
index c4f09a4..dc1b008 100644
--- a/tests/arthur/common/paintcommands.cpp
+++ b/tests/arthur/common/paintcommands.cpp
@@ -185,6 +185,7 @@ int PaintCommands::translateEnum(const char *table[], const QString &pattern, in
QList<PaintCommands::PaintCommandInfos> PaintCommands::s_commandInfoTable = QList<PaintCommands::PaintCommandInfos>();
QList<QPair<QString,QStringList> > PaintCommands::s_enumsTable = QList<QPair<QString,QStringList> >();
+QMultiHash<QString, int> PaintCommands::s_commandHash;
#define DECL_PAINTCOMMAND(identifier, method, regexp, syntax, sample) \
s_commandInfoTable << PaintCommandInfos(QLatin1String(identifier), &PaintCommands::method, QRegExp(regexp), \
@@ -627,6 +628,15 @@ void PaintCommands::staticInit()
"\n - where vertices 1 to 4 defines the source quad and 5 to 8 the destination quad",
"mapQuadToQuad 0.0 0.0 1.0 1.0 0.0 0.0 -1.0 -1.0");
+ // populate the command lookup hash
+ for (int i=0; i<s_commandInfoTable.size(); i++) {
+ if (s_commandInfoTable.at(i).isSectionHeader() ||
+ s_commandInfoTable.at(i).identifier == QLatin1String("comment") ||
+ s_commandInfoTable.at(i).identifier == QLatin1String("noop"))
+ continue;
+ s_commandHash.insert(s_commandInfoTable.at(i).identifier, i);
+ }
+
// populate the enums list
ADD_ENUMLIST("brush styles", brushStyleTable);
ADD_ENUMLIST("pen styles", penStyleTable);
@@ -686,12 +696,23 @@ void PaintCommands::insertAt(int commandIndex, const QStringList &newCommands)
**********************************************************************************/
void PaintCommands::runCommand(const QString &scriptLine)
{
- staticInit();
- foreach (PaintCommandInfos command, s_commandInfoTable)
- if (!command.isSectionHeader() && command.regExp.indexIn(scriptLine) >= 0) {
+ if (scriptLine.isEmpty()) {
+ command_noop(QRegExp());
+ return;
+ }
+ if (scriptLine.startsWith('#')) {
+ command_comment(QRegExp());
+ return;
+ }
+ QString firstWord = scriptLine.section(QRegExp("\\s"), 0, 0);
+ QList<int> indices = s_commandHash.values(firstWord);
+ foreach(int idx, indices) {
+ const PaintCommandInfos &command = s_commandInfoTable.at(idx);
+ if (command.regExp.indexIn(scriptLine) >= 0) {
(this->*(command.paintMethod))(command.regExp);
return;
}
+ }
qWarning("ERROR: unknown command or argument syntax error in \"%s\"", qPrintable(scriptLine));
}
@@ -1357,6 +1378,8 @@ void PaintCommands::command_qt3_drawArc(QRegExp re)
/***************************************************************************************************/
void PaintCommands::command_drawText(QRegExp re)
{
+ if (!m_shouldDrawText)
+ return;
QStringList caps = re.capturedTexts();
int x = convertToInt(caps.at(1));
int y = convertToInt(caps.at(2));
diff --git a/tests/arthur/common/paintcommands.h b/tests/arthur/common/paintcommands.h
index aed4840..ebd882b 100644
--- a/tests/arthur/common/paintcommands.h
+++ b/tests/arthur/common/paintcommands.h
@@ -48,6 +48,7 @@
#include <qstringlist.h>
#include <qpixmap.h>
#include <qbrush.h>
+#include <qhash.h>
QT_FORWARD_DECLARE_CLASS(QPainter)
QT_FORWARD_DECLARE_CLASS(QRegExp)
@@ -89,6 +90,7 @@ public:
, m_verboseMode(false)
, m_type(WidgetType)
, m_checkers_background(true)
+ , m_shouldDrawText(true)
{ staticInit(); }
public:
@@ -114,6 +116,7 @@ public:
void setControlPoints(const QVector<QPointF> &points) { staticInit(); m_controlPoints = points; }
void setVerboseMode(bool v) { staticInit(); m_verboseMode = v; }
void insertAt(int commandIndex, const QStringList &newCommands);
+ void setShouldDrawText(bool drawText) { m_shouldDrawText = drawText; }
// run
void runCommands();
@@ -279,6 +282,7 @@ private:
bool m_verboseMode;
DeviceType m_type;
bool m_checkers_background;
+ bool m_shouldDrawText;
QVector<QPointF> m_controlPoints;
@@ -329,6 +333,7 @@ public:
static QList<PaintCommandInfos> s_commandInfoTable;
static QList<QPair<QString,QStringList> > s_enumsTable;
+ static QMultiHash<QString, int> s_commandHash;
};
#endif // PAINTCOMMANDS_H
diff --git a/tests/arthur/lance/lance.pro b/tests/arthur/lance/lance.pro
index 3692f21..56b7f25 100644
--- a/tests/arthur/lance/lance.pro
+++ b/tests/arthur/lance/lance.pro
@@ -13,7 +13,7 @@ contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, o
contains(QT_CONFIG, qt3support):QT += qt3support
symbian*: {
- testData.sources = $$QT_BUILD_TREE/tests/arthur/data/qps
+ testData.files = $$QT_BUILD_TREE/tests/arthur/data/qps
testData.path = .
DEPLOYMENT += testData
}
diff --git a/tests/auto/checkxmlfiles/checkxmlfiles.pro b/tests/auto/checkxmlfiles/checkxmlfiles.pro
index 319ba9b..ab932f5 100644
--- a/tests/auto/checkxmlfiles/checkxmlfiles.pro
+++ b/tests/auto/checkxmlfiles/checkxmlfiles.pro
@@ -8,7 +8,7 @@ include (../xmlpatterns.pri)
wince*|symbian: {
QT += network
-addFiles.sources = \
+addFiles.files = \
$$QT_SOURCE_TREE/examples/sql/masterdetail/albumdetails.xml \
$$QT_SOURCE_TREE/examples/xmlpatterns/xquery/globalVariables/globals.gccxml \
$$QT_SOURCE_TREE/doc/src/diagrams/stylesheet/treeview.svg \
diff --git a/tests/auto/collections/collections.pro b/tests/auto/collections/collections.pro
index 876e903..8601ff8 100644
--- a/tests/auto/collections/collections.pro
+++ b/tests/auto/collections/collections.pro
@@ -1,3 +1,4 @@
load(qttest_p4)
SOURCES += tst_collections.cpp
QT = core
+CONFIG += parallel_test
diff --git a/tests/auto/collections/tst_collections.cpp b/tests/auto/collections/tst_collections.cpp
index 82ec0fa..8a0ca3e 100644
--- a/tests/auto/collections/tst_collections.cpp
+++ b/tests/auto/collections/tst_collections.cpp
@@ -166,6 +166,9 @@ private slots:
void forwardDeclared();
void alignment();
void QTBUG13079_collectionInsideCollection();
+
+ void foreach_2();
+ void insert_remove_loop();
};
struct LargeStatic {
@@ -3707,5 +3710,214 @@ void tst_Collections::QTBUG13079_collectionInsideCollection()
#endif
}
+template<class Container> void foreach_test_arrays(const Container &container)
+{
+ typedef typename Container::value_type T;
+ int i = 0;
+ QSet <T> set;
+ foreach(const T & val, container) {
+ QVERIFY( val == container[i] );
+ set << val;
+ i++;
+ }
+ QCOMPARE(set.count(), container.count());
+
+ //modify the container while iterating.
+ Container c2 = container;
+ Container c3;
+ i = 0;
+ foreach (T val, c2) {
+ c3 << val;
+ c2.insert((i * 89) % c2.size(), T() );
+ QVERIFY( val == container.at(i) );
+ val = T();
+ i++;
+ }
+ QVERIFY(c3 == container);
+}
+
+
+void tst_Collections::foreach_2()
+{
+ QStringList strlist = QString::fromLatin1("a,b,c,d,e,f,g,h,ih,kl,mn,op,qr,st,uvw,xyz").split(",");
+ foreach_test_arrays(strlist);
+ foreach_test_arrays(QList<QString>(strlist));
+ foreach_test_arrays(strlist.toVector());
+
+ QList<int> intlist;
+ intlist << 1 << 2 << 3 << 4 <<5 << 6 << 7 << 8 << 9;
+ foreach_test_arrays(intlist);
+ foreach_test_arrays(intlist.toVector());
+
+ QVarLengthArray<int> varl1;
+ QVarLengthArray<int, 3> varl2;
+ QVarLengthArray<int, 10> varl3;
+ foreach(int i, intlist) {
+ varl1 << i;
+ varl2 << i;
+ varl3 << i;
+ }
+ QCOMPARE(varl1.count(), intlist.count());
+ QCOMPARE(varl2.count(), intlist.count());
+ QCOMPARE(varl3.count(), intlist.count());
+ foreach_test_arrays(varl1);
+ foreach_test_arrays(varl2);
+ foreach_test_arrays(varl3);
+
+ QVarLengthArray<QString> varl4;
+ QVarLengthArray<QString, 3> varl5;
+ QVarLengthArray<QString, 18> varl6;
+ foreach(const QString &str, strlist) {
+ varl4 << str;
+ varl5 << str;
+ varl6 << str;
+ }
+ QCOMPARE(varl4.count(), strlist.count());
+ QCOMPARE(varl5.count(), strlist.count());
+ QCOMPARE(varl6.count(), strlist.count());
+ foreach_test_arrays(varl4);
+ foreach_test_arrays(varl5);
+ foreach_test_arrays(varl6);
+}
+
+struct IntOrString
+{
+ int val;
+ IntOrString(int v) : val(v) { }
+ IntOrString(const QString &v) : val(v.toInt()) { }
+ operator int() { return val; }
+ operator QString() { return QString::number(val); }
+#ifndef QT_NO_STL
+ operator std::string() { return QString::number(val).toStdString(); }
+ IntOrString(const std::string &v) : val(QString::fromStdString(v).toInt()) { }
+#endif
+};
+
+template<class Container> void insert_remove_loop_impl()
+{
+ typedef typename Container::value_type T;
+ Container t;
+ t.append(T(IntOrString(1)));
+ t << (T(IntOrString(2)));
+ t += (T(IntOrString(3)));
+ t.prepend(T(IntOrString(4)));
+ t.insert(2, 3 , T(IntOrString(5)));
+ t.insert(4, T(IntOrString(6)));
+ t.insert(t.begin() + 2, T(IntOrString(7)));
+ t.insert(t.begin() + 5, 3, T(IntOrString(8)));
+ int expect1[] = { 4 , 1 , 7, 5 , 5 , 8, 8, 8, 6, 5, 2 , 3 };
+ QCOMPARE(size_t(t.count()), sizeof(expect1)/sizeof(int));
+ for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(t[i], T(IntOrString(expect1[i])));
+ }
+
+ Container compare_test1 = t;
+ t.replace(5, T(IntOrString(9)));
+ Container compare_test2 = t;
+ QVERIFY(!(compare_test1 == t));
+ QVERIFY( (compare_test1 != t));
+ QVERIFY( (compare_test2 == t));
+ QVERIFY(!(compare_test2 != t));
+ t.remove(7);
+ t.remove(2, 3);
+ int expect2[] = { 4 , 1 , 9, 8, 6, 5, 2 , 3 };
+ QCOMPARE(size_t(t.count()), sizeof(expect2)/sizeof(int));
+ for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(t[i], T(IntOrString(expect2[i])));
+ }
+
+ for (typename Container::iterator it = t.begin(); it != t.end(); ) {
+ if ( int(IntOrString(*it)) % 2 )
+ ++it;
+ else
+ it = t.erase(it);
+ }
+
+ int expect3[] = { 1 , 9, 5, 3 };
+ QCOMPARE(size_t(t.count()), sizeof(expect3)/sizeof(int));
+ for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(t[i], T(IntOrString(expect3[i])));
+ }
+
+ t.erase(t.begin() + 1, t.end() - 1);
+
+ int expect4[] = { 1 , 3 };
+ QCOMPARE(size_t(t.count()), sizeof(expect4)/sizeof(int));
+ for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(t[i], T(IntOrString(expect4[i])));
+ }
+
+ t << T(IntOrString(10)) << T(IntOrString(11)) << T(IntOrString(12)) << T(IntOrString(13));
+ t << T(IntOrString(14)) << T(IntOrString(15)) << T(IntOrString(16)) << T(IntOrString(17));
+ t << T(IntOrString(18)) << T(IntOrString(19)) << T(IntOrString(20)) << T(IntOrString(21));
+ for (typename Container::iterator it = t.begin(); it != t.end(); ++it) {
+ int iv = int(IntOrString(*it));
+ if ( iv % 2 ) {
+ it = t.insert(it, T(IntOrString(iv * iv)));
+ it = t.insert(it + 2, T(IntOrString(iv * iv + 1)));
+ }
+ }
+
+ int expect5[] = { 1, 1, 2, 3*3, 3, 3*3+1, 10, 11*11, 11, 11*11+1, 12 , 13*13, 13, 13*13+1, 14,
+ 15*15, 15, 15*15+1, 16 , 17*17, 17, 17*17+1 ,18 , 19*19, 19, 19*19+1, 20, 21*21, 21, 21*21+1 };
+ QCOMPARE(size_t(t.count()), sizeof(expect5)/sizeof(int));
+ for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(t[i], T(IntOrString(expect5[i])));
+ }
+}
+
+
+//Add insert(int, int, T) so it has the same interface as QVector and QVarLengthArray for the test.
+template<typename T>
+struct ExtList : QList<T> {
+ using QList<T>::insert;
+ void insert(int before, int n, const T&x) {
+ while (n--) {
+ this->insert(before, x );
+ }
+ }
+ void insert(typename QList<T>::iterator before, int n, const T&x) {
+ while (n--) {
+ before = this->insert(before, x);
+ }
+ }
+
+ void remove(int i) {
+ this->removeAt(i);
+ }
+ void remove(int i, int n) {
+ while (n--) {
+ this->removeAt(i);
+ }
+ }
+};
+
+void tst_Collections::insert_remove_loop()
+{
+ insert_remove_loop_impl<ExtList<int> >();
+ insert_remove_loop_impl<ExtList<QString> >();
+ insert_remove_loop_impl<QVector<int> >();
+ insert_remove_loop_impl<QVector<QString> >();
+ insert_remove_loop_impl<QVarLengthArray<int> >();
+ insert_remove_loop_impl<QVarLengthArray<QString> >();
+ insert_remove_loop_impl<QVarLengthArray<int, 10> >();
+ insert_remove_loop_impl<QVarLengthArray<QString, 10> >();
+ insert_remove_loop_impl<QVarLengthArray<int, 3> >();
+ insert_remove_loop_impl<QVarLengthArray<QString, 3> >();
+ insert_remove_loop_impl<QVarLengthArray<int, 15> >();
+ insert_remove_loop_impl<QVarLengthArray<QString, 15> >();
+
+#ifndef QT_NO_STL
+ insert_remove_loop_impl<ExtList<std::string> >();
+ insert_remove_loop_impl<QVector<std::string> >();
+ insert_remove_loop_impl<QVarLengthArray<std::string> >();
+ insert_remove_loop_impl<QVarLengthArray<std::string, 10> >();
+ insert_remove_loop_impl<QVarLengthArray<std::string, 3> >();
+ insert_remove_loop_impl<QVarLengthArray<std::string, 15> >();
+#endif
+}
+
+
+
QTEST_APPLESS_MAIN(tst_Collections)
#include "tst_collections.moc"
diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro
index 1a0dc55..97f02af 100644
--- a/tests/auto/declarative/examples/examples.pro
+++ b/tests/auto/declarative/examples/examples.pro
@@ -7,7 +7,7 @@ SOURCES += tst_examples.cpp
include(../../../../tools/qml/qml.pri)
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/examples/tst_examples.cpp b/tests/auto/declarative/examples/tst_examples.cpp
index cff0b46..0c7f8fb 100644
--- a/tests/auto/declarative/examples/tst_examples.cpp
+++ b/tests/auto/declarative/examples/tst_examples.cpp
@@ -86,6 +86,7 @@ tst_examples::tst_examples()
// Add directories you want excluded here
excludedDirs << "doc/src/snippets/declarative/visualdatamodel_rootindex";
+ excludedDirs << "doc/src/snippets/declarative/qtbinding";
#ifdef QT_NO_WEBKIT
excludedDirs << "examples/declarative/modelviews/webview";
diff --git a/tests/auto/declarative/moduleqt47/moduleqt47.pro b/tests/auto/declarative/moduleqt47/moduleqt47.pro
index 711e24c..ff773e8 100644
--- a/tests/auto/declarative/moduleqt47/moduleqt47.pro
+++ b/tests/auto/declarative/moduleqt47/moduleqt47.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_moduleqt47.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/parserstress/parserstress.pro b/tests/auto/declarative/parserstress/parserstress.pro
index 17f297b..6ef2432 100644
--- a/tests/auto/declarative/parserstress/parserstress.pro
+++ b/tests/auto/declarative/parserstress/parserstress.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_parserstress.cpp
symbian: {
- importFiles.sources = ..\\..\\qscriptjstestsuite\\tests
+ importFiles.files = ..\\..\\qscriptjstestsuite\\tests
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
index 6295079..f09e8d9 100644
--- a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
+++ b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeanchors.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
index 8c2259a..3d040a6 100644
--- a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
+++ b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qdeclarativeanimatedimage.cpp ../shared/testhttpserver.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
index 578f37b..d00d51a 100644
--- a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
+++ b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeanimations.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml b/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
index 9fca5c3..56ac216 100644
--- a/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
+++ b/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
@@ -7,9 +7,9 @@ Rectangle {
objectName: "MyRect"
width: 100; height: 100; color: "green"
Behavior on x {
+ id: myBehavior
objectName: "MyBehavior"
NumberAnimation {id: na1; duration: 200 }
- NumberAnimation {id: na2; duration: 1000 }
}
}
MouseArea {
@@ -24,4 +24,9 @@ Rectangle {
x: 200
}
}
+
+ NumberAnimation {id: na2; duration: 1000 }
+ Component.onCompleted: {
+ myBehavior.animation = na2;
+ }
}
diff --git a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
index 7ba3a7d..7416827 100644
--- a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
+++ b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativebehaviors.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
index 0cdaada..fe12635 100644
--- a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
+++ b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativebinding.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
index 0e41c13..a7463e8 100644
--- a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
+++ b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativeborderimage.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
index 33d81ba..6f9550d 100644
--- a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
+++ b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeconnection.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
index e6a81b8..45bb10e 100644
--- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
+++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
@@ -59,6 +59,7 @@
#include <private/qdeclarativerectangle_p.h>
#include <private/qdeclarativemetatype_p.h>
#include <private/qdeclarativeproperty_p.h>
+#include <private/qdeclarativedebughelper_p.h>
#include "../../../shared/util.h"
#include "../shared/debugutil_p.h"
@@ -112,6 +113,7 @@ private slots:
void tst_QDeclarativeDebugContextReference();
void tst_QDeclarativeDebugPropertyReference();
+ void setBindingForObject();
void setMethodBody();
};
@@ -278,8 +280,10 @@ void tst_QDeclarativeDebug::initTestCase()
{
qRegisterMetaType<QDeclarativeDebugWatch::State>();
- QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768...");
+ QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!");
+ QDeclarativeDebugHelper::enableDebugging();
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768...");
m_engine = new QDeclarativeEngine(this);
QList<QByteArray> qml;
@@ -894,6 +898,78 @@ void tst_QDeclarativeDebug::tst_QDeclarativeDebugPropertyReference()
compareProperties(r, ref);
}
+
+void tst_QDeclarativeDebug::setBindingForObject()
+{
+ QDeclarativeDebugObjectReference rootObject = findRootObject();
+ QVERIFY(rootObject.debugId() != -1);
+ QDeclarativeDebugPropertyReference widthPropertyRef = findProperty(rootObject.properties(), "width");
+
+ QCOMPARE(widthPropertyRef.value(), QVariant(10));
+ QCOMPARE(widthPropertyRef.binding(), QString());
+
+ //
+ // set literal
+ //
+ m_dbg->setBindingForObject(rootObject.debugId(), "width", "15", true);
+
+ rootObject = findRootObject();
+ widthPropertyRef = findProperty(rootObject.properties(), "width");
+
+ QCOMPARE(widthPropertyRef.value(), QVariant(15));
+ QCOMPARE(widthPropertyRef.binding(), QString());
+
+ //
+ // set expression
+ //
+ m_dbg->setBindingForObject(rootObject.debugId(), "width", "height", false);
+
+ rootObject = findRootObject();
+ widthPropertyRef = findProperty(rootObject.properties(), "width");
+
+ QCOMPARE(widthPropertyRef.value(), QVariant(20));
+ QCOMPARE(widthPropertyRef.binding(), QString("height"));
+
+ //
+ // reset
+ //
+ m_dbg->resetBindingForObject(rootObject.debugId(), "width");
+
+ rootObject = findRootObject();
+ widthPropertyRef = findProperty(rootObject.properties(), "width");
+
+ // QCOMPARE(widthPropertyRef.value(), QVariant(0)); // TODO: Shouldn't this work?
+ QCOMPARE(widthPropertyRef.binding(), QString());
+
+ //
+ // set handler
+ //
+ rootObject = findRootObject();
+ QCOMPARE(rootObject.children().size(), 3);
+ QDeclarativeDebugObjectReference mouseAreaObject = rootObject.children().at(2);
+ QDeclarativeDebugObjectQuery *q_obj = m_dbg->queryObjectRecursive(mouseAreaObject, this);
+ waitForQuery(q_obj);
+ mouseAreaObject = q_obj->object();
+
+ QCOMPARE(mouseAreaObject.className(), QString("MouseArea"));
+
+ QDeclarativeDebugPropertyReference onEnteredRef = findProperty(mouseAreaObject.properties(), "onEntered");
+
+ QCOMPARE(onEnteredRef.name(), QString("onEntered"));
+ QCOMPARE(onEnteredRef.value(), QVariant("{ console.log('hello') }"));
+
+ m_dbg->setBindingForObject(mouseAreaObject.debugId(), "onEntered", "{console.log('hello, world') }", false) ;
+
+ rootObject = findRootObject();
+ mouseAreaObject = rootObject.children().at(2);
+ q_obj = m_dbg->queryObjectRecursive(mouseAreaObject, this);
+ waitForQuery(q_obj);
+ mouseAreaObject = q_obj->object();
+ onEnteredRef = findProperty(mouseAreaObject.properties(), "onEntered");
+ QCOMPARE(onEnteredRef.name(), QString("onEntered"));
+ QCOMPARE(onEnteredRef.value(), QVariant("{console.log('hello, world') }"));
+}
+
int main(int argc, char *argv[])
{
int _argc = argc + 1;
diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
index 80241ba..64afd4e 100644
--- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
+++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
@@ -51,6 +51,7 @@
#include <private/qdeclarativeenginedebug_p.h>
#include <private/qdeclarativedebugclient_p.h>
#include <private/qdeclarativedebugservice_p.h>
+#include <private/qdeclarativedebughelper_p.h>
#include "../../../shared/util.h"
#include "../shared/debugutil_p.h"
@@ -72,8 +73,10 @@ private slots:
void tst_QDeclarativeDebugClient::initTestCase()
{
- QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770...");
+ QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!");
+ QDeclarativeDebugHelper::enableDebugging();
+ QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770...");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
diff --git a/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h b/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h
index c9cb839..edfc58f 100644
--- a/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h
+++ b/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h
@@ -58,6 +58,10 @@ class Q_DECLARATIVE_EXPORT QDeclarativeDebugHelper
public:
static QScriptEngine *getScriptEngine(QDeclarativeEngine *engine);
static void setAnimationSlowDownFactor(qreal factor);
+
+ // Enables remote debugging functionality
+ // Only use this for debugging in a safe environment!
+ static void enableDebugging();
};
QT_END_NAMESPACE
diff --git a/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp b/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp
index 36f2222..60aec9d 100644
--- a/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp
+++ b/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp
@@ -54,6 +54,7 @@ class tst_qdeclarativedebughelper : public QObject {
private slots:
void getScriptEngine();
void setAnimationSlowDownFactor();
+ void enableDebugging();
};
class TestAnimation : public QAbstractAnimation {
@@ -109,6 +110,12 @@ void tst_qdeclarativedebughelper::setAnimationSlowDownFactor()
QVERIFY(animation.updateCalled > 1);
}
+void tst_qdeclarativedebughelper::enableDebugging()
+{
+ QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!");
+ QDeclarativeDebugHelper::enableDebugging();
+}
+
QTEST_MAIN(tst_qdeclarativedebughelper)
#include "tst_qdeclarativedebughelper.moc"
diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
index 538129c..30629f9 100644
--- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
+++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
@@ -46,6 +46,7 @@
#include <QThread>
#include <QtDeclarative/qdeclarativeengine.h>
+#include <private/qdeclarativedebughelper_p.h>
#include <private/qdeclarativedebug_p.h>
#include <private/qdeclarativeenginedebug_p.h>
@@ -75,6 +76,9 @@ private slots:
void tst_QDeclarativeDebugService::initTestCase()
{
+ QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!");
+ QDeclarativeDebugHelper::enableDebugging();
+
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3769...");
new QDeclarativeEngine(this);
diff --git a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
index 1866a43..8ac69aa 100644
--- a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
+++ b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativedom.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/ConstantsOverrideBindings.qml b/tests/auto/declarative/qdeclarativeecmascript/data/ConstantsOverrideBindings.qml
index b4a702b..07bb16b 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/ConstantsOverrideBindings.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/ConstantsOverrideBindings.qml
@@ -3,4 +3,10 @@ import Qt.test 1.0
MyQmlObject {
property int c1: 0
property int c2: c1
+ property alias c3: inner.ic1
+
+ objectProperty: MyQmlObject {
+ id: inner
+ property int ic1: c1
+ }
}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/constantsOverrideBindings.4.qml b/tests/auto/declarative/qdeclarativeecmascript/data/constantsOverrideBindings.4.qml
new file mode 100644
index 0000000..5a2091f
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/constantsOverrideBindings.4.qml
@@ -0,0 +1,11 @@
+import Qt.test 1.0
+
+MyQmlObject {
+ property alias c1: myConstants.c1
+ property alias c3: myConstants.c3
+
+ objectProperty: ConstantsOverrideBindings {
+ id: myConstants
+ c3: 10
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml b/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml
new file mode 100644
index 0000000..ca8c90d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+QtObject {
+ objectName: "hello"
+
+ property string test1: objectName
+ property string test2: objectName.substr(1, 3)
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/outerBindingOverridesInnerBinding.qml b/tests/auto/declarative/qdeclarativeecmascript/data/outerBindingOverridesInnerBinding.qml
index 0a933e8..090c948 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/outerBindingOverridesInnerBinding.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/outerBindingOverridesInnerBinding.qml
@@ -1,13 +1,14 @@
import Qt.test 1.0
MyQmlObject {
+ id: obj
property alias c1: myConstants.c1
property alias c2: myConstants.c2
property int c3: 0
objectProperty: ConstantsOverrideBindings {
id: myConstants
- c2: c3
+ c2: obj.c3
}
}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/propertySplicing.qml b/tests/auto/declarative/qdeclarativeecmascript/data/propertySplicing.qml
new file mode 100644
index 0000000..7deb84a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/propertySplicing.qml
@@ -0,0 +1,10 @@
+import Qt.test 1.0
+import QtQuick 1.0
+
+MyDerivedObject {
+ property bool test: false
+
+ Component.onCompleted: {
+ test = intProperty()
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml
index 95f34d8..9555b7f 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml
@@ -2,7 +2,7 @@ import QtQuick 1.0
Item {
property int a: 0
- property int b: 0
+ property int b: 14
function b() { return 11; }
function c() { return 33; }
@@ -21,7 +21,7 @@ Item {
id: nested
property int a: 1
property int test: a.value
- property int test2: b()
+ property int test2: b
property int test3: c.value
}
@@ -30,8 +30,8 @@ Item {
property int test1: a.value
property alias test2: nested.test
- // methods takes precedence over local, and root properties
- property int test3: b()
+ // properties takes precedence over local, and root methods
+ property int test3: b
property alias test4: nested.test2
// id takes precedence over methods
diff --git a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
index 2eb333a..69d25a4 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
+++ b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
@@ -13,7 +13,7 @@ INCLUDEPATH += ../shared
# LIBS += -lgcov
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
index 810a0f7..94135f9 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
@@ -109,6 +109,7 @@ void registerTypes()
qmlRegisterExtendedType<MyBaseExtendedObject, BaseExtensionObject>("Qt.test", 1,0, "MyBaseExtendedObject");
qmlRegisterExtendedType<MyExtendedObject, ExtensionObject>("Qt.test", 1,0, "MyExtendedObject");
qmlRegisterType<MyTypeObject>("Qt.test", 1,0, "MyTypeObject");
+ qmlRegisterType<MyDerivedObject>("Qt.test", 1,0, "MyDerivedObject");
qmlRegisterType<NumberAssignment>("Qt.test", 1,0, "NumberAssignment");
qmlRegisterExtendedType<DefaultPropertyExtendedObject, DefaultPropertyExtensionObject>("Qt.test", 1,0, "DefaultPropertyExtendedObject");
qmlRegisterType<OverrideDefaultPropertyObject>("Qt.test", 1,0, "OverrideDefaultPropertyObject");
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
index 220318d..15c310f 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
@@ -92,7 +92,7 @@ class MyQmlObject : public QObject
Q_PROPERTY(QDeclarativeListProperty<QObject> objectListProperty READ objectListProperty CONSTANT)
Q_PROPERTY(int resettableProperty READ resettableProperty WRITE setResettableProperty RESET resetProperty)
Q_PROPERTY(QRegExp regExp READ regExp WRITE setRegExp)
- Q_PROPERTY(int nonscriptable READ nonscriptable WRITE setNonscriptable SCRIPTABLE false);
+ Q_PROPERTY(int nonscriptable READ nonscriptable WRITE setNonscriptable SCRIPTABLE false)
public:
MyQmlObject(): myinvokableObject(0), m_methodCalled(false), m_methodIntCalled(false), m_object(0), m_value(0), m_resetProperty(13) {}
@@ -562,8 +562,27 @@ signals:
};
Q_DECLARE_OPERATORS_FOR_FLAGS(MyTypeObject::MyFlags)
+class MyDerivedObject : public MyTypeObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE bool intProperty() const {
+ return true;
+ }
+};
+
Q_DECLARE_METATYPE(QScriptValue);
-class MyInvokableObject : public QObject
+class MyInvokableBaseObject : public QObject
+{
+ Q_OBJECT
+public:
+ inline ~MyInvokableBaseObject() = 0;
+
+ Q_INVOKABLE inline void method_inherited(int a);
+ Q_INVOKABLE inline void method_overload();
+};
+
+class MyInvokableObject : public MyInvokableBaseObject
{
Q_OBJECT
Q_ENUMS(TestEnum)
@@ -599,16 +618,34 @@ public:
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; }
+ Q_INVOKABLE void method_overload(QString a) { invoke(18); m_actuals << a; }
- Q_INVOKABLE void method_with_enum(TestEnum e) { invoke(18); m_actuals << (int)e; }
+ Q_INVOKABLE void method_with_enum(TestEnum e) { invoke(19); m_actuals << (int)e; }
+
+ Q_INVOKABLE int method_default(int a, int b = 19) { invoke(20); m_actuals << a << b; return b; }
private:
+ friend class MyInvokableBaseObject;
void invoke(int idx) { if (m_invoked != -1) m_invokedError = true; m_invoked = idx;}
int m_invoked;
bool m_invokedError;
QVariantList m_actuals;
};
+MyInvokableBaseObject::~MyInvokableBaseObject() {}
+
+void MyInvokableBaseObject::method_inherited(int a)
+{
+ static_cast<MyInvokableObject *>(this)->invoke(-3);
+ static_cast<MyInvokableObject *>(this)->m_actuals << a;
+}
+
+// This is a hidden overload of the MyInvokableObject::method_overload() method
+void MyInvokableBaseObject::method_overload()
+{
+ static_cast<MyInvokableObject *>(this)->invoke(-2);
+}
+
class NumberAssignment : public QObject
{
Q_OBJECT
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 4feb630..652404c 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -139,6 +139,7 @@ private slots:
void strictlyEquals();
void compiled();
void numberAssignment();
+ void propertySplicing();
void bug1();
void bug2();
@@ -162,6 +163,7 @@ private slots:
void deleteLater();
void in();
void sharedAttachedObject();
+ void objectName();
void include();
@@ -731,6 +733,21 @@ void tst_qdeclarativeecmascript::constantsOverrideBindings()
QCOMPARE(object->property("c2").toInt(), 13);
}
#endif
+
+ // Using an alias
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("constantsOverrideBindings.4.qml"));
+ MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("c1").toInt(), 0);
+ QEXPECT_FAIL("", "QTBUG-13719", Continue);
+ QCOMPARE(object->property("c3").toInt(), 10);
+ object->setProperty("c1", QVariant(9));
+ QCOMPARE(object->property("c1").toInt(), 9);
+ QEXPECT_FAIL("", "QTBUG-13719", Continue);
+ QCOMPARE(object->property("c3").toInt(), 10);
+ }
}
/*
@@ -801,8 +818,8 @@ void tst_qdeclarativeecmascript::scope()
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("test3").toInt(), 14);
+ QCOMPARE(object->property("test4").toInt(), 14);
QCOMPARE(object->property("test5").toInt(), 24);
QCOMPARE(object->property("test6").toInt(), 24);
}
@@ -1549,7 +1566,7 @@ void tst_qdeclarativeecmascript::callQtInvokables()
o.reset();
{
- QString expected = "MyInvokableObject(0x" + QString::number((intptr_t)&o, 16) + ")";
+ QString expected = "MyInvokableObject(0x" + QString::number((quintptr)&o, 16) + ")";
QCOMPARE(engine->evaluate("object.method_QString(object)").isUndefined(), true);
QCOMPARE(o.error(), false);
QCOMPARE(o.invoked(), 11);
@@ -1708,7 +1725,6 @@ void tst_qdeclarativeecmascript::callQtInvokables()
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);
@@ -1716,10 +1732,11 @@ void tst_qdeclarativeecmascript::callQtInvokables()
QCOMPARE(o.actuals().count(), 0);
o.reset();
- QCOMPARE(engine->evaluate("object.method_overload(10)").isError(), true);
+ QCOMPARE(engine->evaluate("object.method_overload(10)").isUndefined(), true);
QCOMPARE(o.error(), false);
- QCOMPARE(o.invoked(), -1);
- QCOMPARE(o.actuals().count(), 0);
+ QCOMPARE(o.invoked(), 16);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
o.reset();
QCOMPARE(engine->evaluate("object.method_overload(10, 11)").isUndefined(), true);
@@ -1730,10 +1747,40 @@ void tst_qdeclarativeecmascript::callQtInvokables()
QCOMPARE(o.actuals().at(1), QVariant(11));
o.reset();
- QCOMPARE(engine->evaluate("object.method_with_enum(9)").isUndefined(), true);
+ QCOMPARE(engine->evaluate("object.method_overload(\"Hello\")").isUndefined(), true);
QCOMPARE(o.error(), false);
QCOMPARE(o.invoked(), 18);
QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(QString("Hello")));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_with_enum(9)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 19);
+ QCOMPARE(o.actuals().count(), 1);
+ QCOMPARE(o.actuals().at(0), QVariant(9));
+
+ o.reset();
+ QVERIFY(engine->evaluate("object.method_default(10)").strictlyEquals(QScriptValue(19)));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 20);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
+ QCOMPARE(o.actuals().at(1), QVariant(19));
+
+ o.reset();
+ QVERIFY(engine->evaluate("object.method_default(10, 13)").strictlyEquals(QScriptValue(13)));
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), 20);
+ QCOMPARE(o.actuals().count(), 2);
+ QCOMPARE(o.actuals().at(0), QVariant(10));
+ QCOMPARE(o.actuals().at(1), QVariant(13));
+
+ o.reset();
+ QCOMPARE(engine->evaluate("object.method_inherited(9)").isUndefined(), true);
+ QCOMPARE(o.error(), false);
+ QCOMPARE(o.invoked(), -3);
+ QCOMPARE(o.actuals().count(), 1);
QCOMPARE(o.actuals().at(0), QVariant(9));
}
@@ -2174,6 +2221,18 @@ void tst_qdeclarativeecmascript::numberAssignment()
delete object;
}
+void tst_qdeclarativeecmascript::propertySplicing()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("propertySplicing.qml"));
+
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test").toBool(), true);
+
+ delete object;
+}
+
// Test that assigning a null object works
// Regressed with: df1788b4dbbb2826ae63f26bdf166342595343f4
void tst_qdeclarativeecmascript::nullObjectBinding()
@@ -2594,6 +2653,24 @@ void tst_qdeclarativeecmascript::sharedAttachedObject()
delete o;
}
+// QTBUG-13999
+void tst_qdeclarativeecmascript::objectName()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("objectName.qml"));
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test1").toString(), QString("hello"));
+ QCOMPARE(o->property("test2").toString(), QString("ell"));
+
+ o->setObjectName("world");
+
+ QCOMPARE(o->property("test1").toString(), QString("world"));
+ QCOMPARE(o->property("test2").toString(), QString("orl"));
+
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativeecmascript)
#include "tst_qdeclarativeecmascript.moc"
diff --git a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
index 3f8b5e9..c176e07 100644
--- a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
+++ b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeflickable.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
index cb42418..3b6d19a 100644
--- a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
+++ b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeflipable.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml b/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml
new file mode 100644
index 0000000..1784202
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml
@@ -0,0 +1,24 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 400; height: 400
+
+ property bool showRect: false
+ onShowRectChanged: if (showRect) rect.visible = true
+ property bool noFocus: !fs2.activeFocus
+
+ FocusScope {
+ id: fs1
+ focus: true
+ }
+ Rectangle {
+ id: rect
+ visible: false
+ FocusScope {
+ id: fs2
+ Rectangle {
+ focus: true
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
index 3724a78..eab983f 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
+++ b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativefocusscope.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
index ec8f048..1645dac 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
+++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
@@ -70,6 +70,7 @@ private slots:
void forceFocus();
void noParentFocus();
void signalEmission();
+ void qtBug13380();
};
/*
@@ -397,6 +398,37 @@ void tst_qdeclarativefocusscope::signalEmission()
QCOMPARE(item3->property("color"), blue);
QCOMPARE(item4->property("color"), red);
+ item4->setFocus(false);
+ QCOMPARE(item1->property("color"), blue);
+ QCOMPARE(item2->property("color"), red);
+ QCOMPARE(item3->property("color"), blue);
+ QCOMPARE(item4->property("color"), blue);
+
+ delete view;
+}
+
+void tst_qdeclarativefocusscope::qtBug13380()
+{
+ QDeclarativeView *view = new QDeclarativeView;
+ view->setSource(QUrl::fromLocalFile(SRCDIR "/data/qtBug13380.qml"));
+
+ view->show();
+ QVERIFY(view->rootObject());
+ qApp->setActiveWindow(view);
+ qApp->processEvents();
+
+#ifdef Q_WS_X11
+ // to be safe and avoid failing setFocus with window managers
+ qt_x11_wait_for_window_manager(view);
+#endif
+
+ QVERIFY(view->hasFocus());
+ QVERIFY(view->scene()->hasFocus());
+ QVERIFY(view->rootObject()->property("noFocus").toBool());
+
+ view->rootObject()->setProperty("showRect", true);
+ QVERIFY(view->rootObject()->property("noFocus").toBool());
+
delete view;
}
diff --git a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
index 3299786..b7e5e5f 100644
--- a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
+++ b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativefolderlistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
index fbd2550..357268b 100644
--- a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
+++ b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativefontloader.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview-noCurrent.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview-noCurrent.qml
new file mode 100644
index 0000000..1189649
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativegridview/data/gridview-noCurrent.qml
@@ -0,0 +1,52 @@
+import QtQuick 1.0
+
+Rectangle {
+ property int current: grid.currentIndex
+ 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: -1
+ cellWidth: 80
+ cellHeight: 60
+ delegate: myDelegate
+ model: testModel
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativegridview/data/header.qml b/tests/auto/declarative/qdeclarativegridview/data/header.qml
new file mode 100644
index 0000000..99baacd
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativegridview/data/header.qml
@@ -0,0 +1,32 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ width: 80
+ height: 60
+ border.color: "blue"
+ Text {
+ text: index
+ }
+ color: GridView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+ GridView {
+ id: grid
+ objectName: "grid"
+ width: 240
+ height: 320
+ cellWidth: 80
+ cellHeight: 60
+ model: testModel
+ delegate: myDelegate
+ header: Text { objectName: "header"; text: "Header"; height: 30 }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
index 4ea1e47..bc196fb 100644
--- a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
+++ b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativegridview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
index 975cf8f..327bba2 100644
--- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
+++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
@@ -71,6 +71,7 @@ private slots:
void moved();
void changeFlow();
void currentIndex();
+ void noCurrentIndex();
void defaultValues();
void properties();
void propertyChanges();
@@ -82,6 +83,7 @@ private slots:
void QTBUG_8456();
void manualHighlight();
void footer();
+ void header();
private:
QDeclarativeView *createView();
@@ -695,9 +697,51 @@ void tst_QDeclarativeGridView::currentIndex()
model.insertItem(0, "Foo", "1111");
QTRY_COMPARE(canvas->rootObject()->property("current").toInt(), 29);
+ // check removing highlight by setting currentIndex to -1;
+ gridview->setCurrentIndex(-1);
+
+ QCOMPARE(gridview->currentIndex(), -1);
+ QVERIFY(!gridview->highlightItem());
+ QVERIFY(!gridview->currentItem());
+
delete canvas;
}
+void tst_QDeclarativeGridView::noCurrentIndex()
+{
+ TestModel model;
+ for (int i = 0; i < 60; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i));
+
+ QDeclarativeView *canvas = new QDeclarativeView(0);
+ canvas->setFixedSize(240,320);
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ QString filename(SRCDIR "/data/gridview-noCurrent.qml");
+ canvas->setSource(QUrl::fromLocalFile(filename));
+
+ qApp->processEvents();
+
+ QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid");
+ QVERIFY(gridview != 0);
+
+ QDeclarativeItem *contentItem = gridview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ // current index should be -1
+ QCOMPARE(gridview->currentIndex(), -1);
+ QVERIFY(!gridview->currentItem());
+ QVERIFY(!gridview->highlightItem());
+ QCOMPARE(gridview->contentY(), 0.0);
+
+ gridview->setCurrentIndex(5);
+ QCOMPARE(gridview->currentIndex(), 5);
+ QVERIFY(gridview->currentItem());
+ QVERIFY(gridview->highlightItem());
+}
+
void tst_QDeclarativeGridView::changeFlow()
{
QDeclarativeView *canvas = createView();
@@ -1214,6 +1258,40 @@ void tst_QDeclarativeGridView::footer()
QTRY_COMPARE(footer->y(), 0.0);
}
+void tst_QDeclarativeGridView::header()
+{
+ QDeclarativeView *canvas = createView();
+
+ TestModel model;
+ for (int i = 0; i < 7; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml"));
+ qApp->processEvents();
+
+ QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid");
+ QTRY_VERIFY(gridview != 0);
+
+ QDeclarativeItem *contentItem = gridview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+
+ QDeclarativeText *header = findItem<QDeclarativeText>(contentItem, "header");
+ QVERIFY(header);
+
+ QCOMPARE(header->y(), 0.0);
+ QCOMPARE(gridview->contentY(), 0.0);
+
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->y(), 30.0);
+
+ model.clear();
+ QTRY_COMPARE(header->y(), 0.0);
+}
+
QDeclarativeView *tst_QDeclarativeGridView::createView()
{
diff --git a/tests/auto/declarative/qdeclarativeimage/data/rect.png b/tests/auto/declarative/qdeclarativeimage/data/rect.png
new file mode 100644
index 0000000..d564a2d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeimage/data/rect.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
index e5db298..a22c8b5 100644
--- a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
+++ b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativeimage.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
index 8f9b2ea..bf779ad 100644
--- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
+++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
@@ -80,10 +80,13 @@ private slots:
void preserveAspectRatio();
void smooth();
void svg();
+ void geometry();
+ void geometry_data();
void big();
void tiling_QTBUG_6716();
void noLoading();
void paintedWidthHeight();
+ void sourceSize_QTBUG_14303();
private:
template<typename T>
@@ -287,6 +290,78 @@ void tst_qdeclarativeimage::svg()
delete obj;
}
+void tst_qdeclarativeimage::geometry_data()
+{
+ QTest::addColumn<QString>("fillMode");
+ QTest::addColumn<bool>("explicitWidth");
+ QTest::addColumn<bool>("explicitHeight");
+ QTest::addColumn<double>("itemWidth");
+ QTest::addColumn<double>("paintedWidth");
+ QTest::addColumn<double>("boundingWidth");
+ QTest::addColumn<double>("itemHeight");
+ QTest::addColumn<double>("paintedHeight");
+ QTest::addColumn<double>("boundingHeight");
+
+ // tested image has width 200, height 100
+
+ // bounding rect and item rect are equal with fillMode PreserveAspectFit, painted rect may be smaller if the aspect ratio doesn't match
+ QTest::newRow("PreserveAspectFit") << "PreserveAspectFit" << false << false << 200.0 << 200.0 << 200.0 << 100.0 << 100.0 << 100.0;
+ QTest::newRow("PreserveAspectFit explicit width 300") << "PreserveAspectFit" << true << false << 300.0 << 200.0 << 300.0 << 100.0 << 100.0 << 100.0;
+ QTest::newRow("PreserveAspectFit explicit height 400") << "PreserveAspectFit" << false << true << 200.0 << 200.0 << 200.0 << 400.0 << 100.0 << 400.0;
+ QTest::newRow("PreserveAspectFit explicit width 300, height 400") << "PreserveAspectFit" << true << true << 300.0 << 300.0 << 300.0 << 400.0 << 150.0 << 400.0;
+
+ // bounding rect and painted rect are equal with fillMode PreserveAspectCrop, item rect may be smaller if the aspect ratio doesn't match
+ QTest::newRow("PreserveAspectCrop") << "PreserveAspectCrop" << false << false << 200.0 << 200.0 << 200.0 << 100.0 << 100.0 << 100.0;
+ QTest::newRow("PreserveAspectCrop explicit width 300") << "PreserveAspectCrop" << true << false << 300.0 << 300.0 << 300.0 << 100.0 << 150.0 << 150.0;
+ QTest::newRow("PreserveAspectCrop explicit height 400") << "PreserveAspectCrop" << false << true << 200.0 << 800.0 << 800.0 << 400.0 << 400.0 << 400.0;
+ QTest::newRow("PreserveAspectCrop explicit width 300, height 400") << "PreserveAspectCrop" << true << true << 300.0 << 800.0 << 800.0 << 400.0 << 400.0 << 400.0;
+
+ // bounding rect, painted rect and item rect are equal in stretching and tiling images
+ QStringList fillModes;
+ fillModes << "Stretch" << "Tile" << "TileVertically" << "TileHorizontally";
+ foreach (QString fillMode, fillModes) {
+ QTest::newRow(fillMode.toLatin1()) << fillMode << false << false << 200.0 << 200.0 << 200.0 << 100.0 << 100.0 << 100.0;
+ QTest::newRow(QString(fillMode + " explicit width 300").toLatin1()) << fillMode << true << false << 300.0 << 300.0 << 300.0 << 100.0 << 100.0 << 100.0;
+ QTest::newRow(QString(fillMode + " explicit height 400").toLatin1()) << fillMode << false << true << 200.0 << 200.0 << 200.0 << 400.0 << 400.0 << 400.0;
+ QTest::newRow(QString(fillMode + " explicit width 300, height 400").toLatin1()) << fillMode << true << true << 300.0 << 300.0 << 300.0 << 400.0 << 400.0 << 400.0;
+ }
+}
+
+void tst_qdeclarativeimage::geometry()
+{
+ QFETCH(QString, fillMode);
+ QFETCH(bool, explicitWidth);
+ QFETCH(bool, explicitHeight);
+ QFETCH(double, itemWidth);
+ QFETCH(double, itemHeight);
+ QFETCH(double, paintedWidth);
+ QFETCH(double, paintedHeight);
+ QFETCH(double, boundingWidth);
+ QFETCH(double, boundingHeight);
+
+ QString src = QUrl::fromLocalFile(SRCDIR "/data/rect.png").toString();
+ QString componentStr = "import QtQuick 1.0\nImage { source: \"" + src + "\"; fillMode: Image." + fillMode + "; ";
+
+ if (explicitWidth)
+ componentStr.append("width: 300; ");
+ if (explicitHeight)
+ componentStr.append("height: 400; ");
+ componentStr.append("}");
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+ QVERIFY(obj != 0);
+
+ QCOMPARE(obj->width(), itemWidth);
+ QCOMPARE(obj->paintedWidth(), paintedWidth);
+ QCOMPARE(obj->boundingRect().width(), boundingWidth);
+
+ QCOMPARE(obj->height(), itemHeight);
+ QCOMPARE(obj->paintedHeight(), paintedHeight);
+ QCOMPARE(obj->boundingRect().height(), boundingHeight);
+ delete obj;
+}
+
void tst_qdeclarativeimage::big()
{
// If the JPEG loader does not implement scaling efficiently, it would
@@ -377,7 +452,7 @@ void tst_qdeclarativeimage::noLoading()
QTRY_COMPARE(statusSpy.count(), 0);
// Loading remote file
- ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/oldcolors.png");
+ ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/heart200.png");
QTRY_VERIFY(obj->status() == QDeclarativeImage::Loading);
QTRY_VERIFY(obj->progress() == 0.0);
QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
@@ -388,7 +463,7 @@ void tst_qdeclarativeimage::noLoading()
// Loading remote file again - should not go through 'Loading' state.
ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
- ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/oldcolors.png");
+ ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/heart200.png");
QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
QTRY_VERIFY(obj->progress() == 1.0);
QTRY_COMPARE(sourceSpy.count(), 4);
@@ -436,6 +511,35 @@ void tst_qdeclarativeimage::paintedWidthHeight()
}
}
+void tst_qdeclarativeimage::sourceSize_QTBUG_14303()
+{
+ QString componentStr = "import QtQuick 1.0\nImage { source: srcImage }";
+ QDeclarativeContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/heart200.png"));
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+
+ QSignalSpy sourceSizeSpy(obj, SIGNAL(sourceSizeChanged()));
+
+ QTRY_VERIFY(obj != 0);
+ QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
+
+ QTRY_COMPARE(obj->sourceSize().width(), 200);
+ QTRY_COMPARE(obj->sourceSize().height(), 200);
+ QTRY_COMPARE(sourceSizeSpy.count(), 0);
+
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
+ QTRY_COMPARE(obj->sourceSize().width(), 120);
+ QTRY_COMPARE(obj->sourceSize().height(), 120);
+ QTRY_COMPARE(sourceSizeSpy.count(), 1);
+
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/heart200.png"));
+ QTRY_COMPARE(obj->sourceSize().width(), 200);
+ QTRY_COMPARE(obj->sourceSize().height(), 200);
+ QTRY_COMPARE(sourceSizeSpy.count(), 2);
+}
+
/*
Find an item with the specified objectName. If index is supplied then the
item must also evaluate the {index} expression equal to index
diff --git a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
index 188ea23..423390f 100644
--- a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
+++ b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeinfo.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeitem/data/keystest.qml b/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
index 3927f42..9af6e9f 100644
--- a/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
+++ b/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
@@ -17,6 +17,7 @@ Item {
Item {
id: item2
+ visible: forwardeeVisible
Keys.onPressed: keysTestObject.forwardedKey(event.key)
Keys.onReleased: keysTestObject.forwardedKey(event.key)
}
diff --git a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
index 26bd624..d8007a0 100644
--- a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
+++ b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeitem.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
index bbbf73e..711bf00 100644
--- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
+++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
@@ -204,6 +204,7 @@ void tst_QDeclarativeItem::keys()
canvas->rootContext()->setContextProperty("keysTestObject", testObject);
canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(true));
+ canvas->rootContext()->setContextProperty("forwardeeVisible", QVariant(true));
canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/keystest.qml"));
canvas->show();
@@ -287,6 +288,17 @@ void tst_QDeclarativeItem::keys()
testObject->reset();
+ canvas->rootContext()->setContextProperty("forwardeeVisible", QVariant(false));
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "A", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mForwardedKey, 0);
+ QCOMPARE(testObject->mText, QLatin1String("A"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(!key.isAccepted());
+
+ testObject->reset();
+
canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(false));
QCOMPARE(canvas->rootObject()->property("isEnabled").toBool(), false);
@@ -674,6 +686,8 @@ void tst_QDeclarativeItem::propertyChanges()
QSignalSpy focusSpy(item, SIGNAL(focusChanged(bool)));
QSignalSpy wantsFocusSpy(parentItem, SIGNAL(activeFocusChanged(bool)));
QSignalSpy childrenChangedSpy(parentItem, SIGNAL(childrenChanged()));
+ QSignalSpy xSpy(item, SIGNAL(xChanged()));
+ QSignalSpy ySpy(item, SIGNAL(yChanged()));
item->setParentItem(parentItem);
item->setWidth(100.0);
@@ -719,6 +733,14 @@ void tst_QDeclarativeItem::propertyChanges()
QCOMPARE(parentItem->hasFocus(), false);
QCOMPARE(wantsFocusSpy.count(),0);
+ item->setX(10.0);
+ QCOMPARE(item->x(), 10.0);
+ QCOMPARE(xSpy.count(), 1);
+
+ item->setY(10.0);
+ QCOMPARE(item->y(), 10.0);
+ QCOMPARE(ySpy.count(), 1);
+
delete canvas;
}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/AliasPropertyChangeSignalsType.qml b/tests/auto/declarative/qdeclarativelanguage/data/AliasPropertyChangeSignalsType.qml
new file mode 100644
index 0000000..0bc2025
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/AliasPropertyChangeSignalsType.qml
@@ -0,0 +1,20 @@
+import QtQuick 1.0
+
+QtObject {
+ id: root
+
+ signal sig1
+ signal sig2
+ signal sig3
+ signal sig4
+
+ property alias aliasProperty: root.realProperty
+
+ property int realProperty: 0
+
+ property bool test: false
+
+ Component.onCompleted: {
+ root.realProperty = 10;
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml b/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml
new file mode 100644
index 0000000..bf6352e
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias valueAlias: root.rectProperty
+
+ rectProperty: "10,11,9x8"
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml b/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml
new file mode 100644
index 0000000..fbd50d9
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+
+ property alias aliasProperty: root.rectProperty.x
+ rectProperty: "19,13,100x120"
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.2.qml
new file mode 100644
index 0000000..a15a718
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.2.qml
@@ -0,0 +1,10 @@
+import QtQuick 1.0
+
+AliasPropertyChangeSignalsType {
+ id: root
+ onAliasPropertyChanged: root.test = true
+
+ function blah() {}
+ property int a
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml b/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml
new file mode 100644
index 0000000..247f527
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml
@@ -0,0 +1,5 @@
+import QtQuick 1.0
+import com.Nokia.installedtest 1.0
+
+QtObject {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt
new file mode 100644
index 0000000..3813680
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt
@@ -0,0 +1,2 @@
+3:1:Type IncorrectCaseType unavailable
+-1:-1:File name case mismatch
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt
new file mode 100644
index 0000000..abed1a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt
@@ -0,0 +1 @@
+3:1:IncorrectCaseType is not a type
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml
new file mode 100644
index 0000000..d11000b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml
@@ -0,0 +1,4 @@
+import QtQuick 1.0
+
+IncorrectCaseType {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml
new file mode 100644
index 0000000..cf32b45
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml
@@ -0,0 +1,4 @@
+import QtQuick 1.0
+
+QtObject {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.errors.txt
new file mode 100644
index 0000000..651009c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.errors.txt
@@ -0,0 +1 @@
+9:5:Expected a qualified name id
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.qml
new file mode 100644
index 0000000..4e561b4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/insertedSemicolon.1.qml
@@ -0,0 +1,10 @@
+import Test 1.0
+
+MyQmlObject {
+ function foo()
+ {
+ return
+ }
+
+ 1223
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt
new file mode 100644
index 0000000..93652a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml
new file mode 100644
index 0000000..3ff7b16
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.rectProperty.blah
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
index 7260be4..fbf1b58 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
@@ -1 +1 @@
-5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
+5:23:Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
index cc71753..a363373 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
@@ -2,5 +2,5 @@ import Test 1.0
MyTypeObject {
id: root
- property alias a: root.rectProperty.x
+ property alias a: root.rectProperty.x.y
}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
index 7260be4..fbf1b58 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
@@ -1 +1 @@
-5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
+5:23:Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt
new file mode 100644
index 0000000..93652a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml
new file mode 100644
index 0000000..4faa52d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.imaginary.x
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt
new file mode 100644
index 0000000..93652a7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml
new file mode 100644
index 0000000..f183912
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.floatProperty.x
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt
new file mode 100644
index 0000000..beae562
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt
@@ -0,0 +1 @@
+5:10:Cannot assign multiple values to a singular property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml
new file mode 100644
index 0000000..2fd7fd2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+QtObject {
+ property QtObject a
+ a: [ QtObject {}, QtObject {} ]
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt
new file mode 100644
index 0000000..beae562
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt
@@ -0,0 +1 @@
+5:10:Cannot assign multiple values to a singular property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml
new file mode 100644
index 0000000..da56cb8
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml
@@ -0,0 +1,6 @@
+import QtQuick 1.0
+
+QtObject {
+ property variant a
+ a: [ QtObject {}, QtObject {} ]
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
index d702082..cae85a7 100644
--- a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
+++ b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
@@ -12,7 +12,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml b/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml
new file mode 100644
index 0000000..0b054d0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml
@@ -0,0 +1,2 @@
+import QtQuick 1.0
+Rectangle { }
diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
index 2b23a49..f8d785c 100644
--- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h
+++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
@@ -112,7 +112,7 @@ class MyQmlObject : public QObject, public MyInterface
Q_PROPERTY(MyCustomVariantType customType READ customType WRITE setCustomType)
Q_PROPERTY(MyQmlObject *qmlobjectProperty READ qmlobject WRITE setQmlobject)
Q_PROPERTY(int propertyWithNotify READ propertyWithNotify WRITE setPropertyWithNotify NOTIFY oddlyNamedNotifySignal)
- Q_PROPERTY(int nonScriptable READ nonScriptable WRITE setNonScriptable SCRIPTABLE false);
+ Q_PROPERTY(int nonScriptable READ nonScriptable WRITE setNonScriptable SCRIPTABLE false)
Q_INTERFACES(MyInterface)
public:
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 9a8c944..50463b7 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -86,6 +86,9 @@ private slots:
void errors_data();
void errors();
+ void insertedSemicolon_data();
+ void insertedSemicolon();
+
void simpleObject();
void simpleContainer();
void interfaceProperty();
@@ -144,6 +147,7 @@ private slots:
void importsInstalled();
void importsOrder_data();
void importsOrder();
+ void importIncorrectCase();
void qmlAttachedPropertiesObjectMethod();
void customOnProperty();
@@ -210,6 +214,31 @@ void tst_qdeclarativelanguage::cleanupTestCase()
QVERIFY(QFile::remove(TEST_FILE(QString::fromUtf8("I18nType\303\201\303\242\303\243\303\244\303\245.qml")).toLocalFile()));
}
+void tst_qdeclarativelanguage::insertedSemicolon_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("errorFile");
+ QTest::addColumn<bool>("create");
+
+ QTest::newRow("insertedSemicolon.1") << "insertedSemicolon.1.qml" << "insertedSemicolon.1.errors.txt" << false;
+}
+
+void tst_qdeclarativelanguage::insertedSemicolon()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, errorFile);
+ QFETCH(bool, create);
+
+ QDeclarativeComponent component(&engine, TEST_FILE(file));
+
+ if(create) {
+ QObject *object = component.create();
+ QVERIFY(object == 0);
+ }
+
+ VERIFY_ERRORS(errorFile.toLatin1().constData());
+}
+
void tst_qdeclarativelanguage::errors_data()
{
QTest::addColumn<QString>("file");
@@ -348,6 +377,9 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidAlias.5") << "invalidAlias.5.qml" << "invalidAlias.5.errors.txt" << false;
QTest::newRow("invalidAlias.6") << "invalidAlias.6.qml" << "invalidAlias.6.errors.txt" << false;
QTest::newRow("invalidAlias.7") << "invalidAlias.7.qml" << "invalidAlias.7.errors.txt" << false;
+ QTest::newRow("invalidAlias.8") << "invalidAlias.8.qml" << "invalidAlias.8.errors.txt" << false;
+ QTest::newRow("invalidAlias.9") << "invalidAlias.9.qml" << "invalidAlias.9.errors.txt" << false;
+ QTest::newRow("invalidAlias.10") << "invalidAlias.10.qml" << "invalidAlias.10.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;
@@ -380,6 +412,15 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidProperty") << "invalidProperty.qml" << "invalidProperty.errors.txt" << false;
QTest::newRow("nonScriptableProperty") << "nonScriptableProperty.qml" << "nonScriptableProperty.errors.txt" << false;
QTest::newRow("notAvailable") << "notAvailable.qml" << "notAvailable.errors.txt" << false;
+ QTest::newRow("singularProperty") << "singularProperty.qml" << "singularProperty.errors.txt" << false;
+ QTest::newRow("singularProperty.2") << "singularProperty.2.qml" << "singularProperty.2.errors.txt" << false;
+ QTest::newRow("incorrectCase") << "incorrectCase.qml"
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ << "incorrectCase.errors.insensitive.txt"
+#else
+ << "incorrectCase.errors.sensitive.txt"
+#endif
+ << false;
}
@@ -1054,6 +1095,47 @@ void tst_qdeclarativelanguage::aliasProperties()
delete object;
}
+
+ // Valuetype alias
+ // Simple "int" alias
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("alias.10.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(10, 11, 9, 8));
+ object->setProperty("rectProperty", QVariant(QRect(33, 12, 99, 100)));
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(33, 12, 99, 100));
+
+ // Write throught alias
+ object->setProperty("valueAlias", QVariant(QRect(3, 3, 4, 9)));
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(3, 3, 4, 9));
+ QCOMPARE(object->property("rectProperty").toRect(), QRect(3, 3, 4, 9));
+
+ delete object;
+ }
+
+ // Valuetype sub-alias
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("alias.11.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ QCOMPARE(object->property("aliasProperty").toInt(), 19);
+ object->setProperty("rectProperty", QVariant(QRect(33, 8, 102, 111)));
+ QCOMPARE(object->property("aliasProperty").toInt(), 33);
+
+ // Write throught alias
+ object->setProperty("aliasProperty", QVariant(4));
+ QCOMPARE(object->property("aliasProperty").toInt(), 4);
+ QCOMPARE(object->property("rectProperty").toRect(), QRect(4, 8, 102, 111));
+
+ delete object;
+ }
}
// QTBUG-13374 Test that alias properties and signals can coexist
@@ -1515,6 +1597,7 @@ void tst_qdeclarativelanguage::basicRemote_data()
QString serverdir = "http://127.0.0.1:14447/qtest/declarative/qmllanguage/";
QTest::newRow("no need for qmldir") << QUrl(serverdir+"Test.qml") << "" << "";
+ QTest::newRow("absent qmldir") << QUrl(serverdir+"/noqmldir/Test.qml") << "" << "";
QTest::newRow("need qmldir") << QUrl(serverdir+"TestLocal.qml") << "" << "";
}
@@ -1722,6 +1805,22 @@ void tst_qdeclarativelanguage::importsOrder()
testType(qml,type,error);
}
+void tst_qdeclarativelanguage::importIncorrectCase()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("importIncorrectCase.qml"));
+
+ QList<QDeclarativeError> errors = component.errors();
+ QCOMPARE(errors.count(), 1);
+
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ QString expectedError = QLatin1String("cannot load module \"com.Nokia.installedtest\": File name case mismatch for \"") + QFileInfo(__FILE__).absoluteDir().filePath("data/lib/com/Nokia/installedtest/qmldir") + QLatin1String("\"");
+#else
+ QString expectedError = QLatin1String("module \"com.Nokia.installedtest\" is not installed");
+#endif
+
+ QCOMPARE(errors.at(0).description(), expectedError);
+}
+
void tst_qdeclarativelanguage::qmlAttachedPropertiesObjectMethod()
{
QObject object;
@@ -1819,15 +1918,30 @@ void tst_qdeclarativelanguage::initTestCase()
void tst_qdeclarativelanguage::aliasPropertyChangeSignals()
{
- QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyChangeSignals.qml"));
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyChangeSignals.qml"));
- VERIFY_ERRORS(0);
- QObject *o = component.create();
- QVERIFY(o != 0);
+ VERIFY_ERRORS(0);
+ QObject *o = component.create();
+ QVERIFY(o != 0);
- QCOMPARE(o->property("test").toBool(), true);
+ QCOMPARE(o->property("test").toBool(), true);
- delete o;
+ delete o;
+ }
+
+ // QTCREATORBUG-2769
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyChangeSignals.2.qml"));
+
+ VERIFY_ERRORS(0);
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test").toBool(), true);
+
+ delete o;
+ }
}
QTEST_MAIN(tst_qdeclarativelanguage)
diff --git a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
index b74ea98..d89f16c 100644
--- a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
+++ b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelayoutitem.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
index d1146b1..b5c5cf2 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
+++ b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index be77f8e..4b8d772 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -320,11 +320,16 @@ void tst_qdeclarativelistmodel::dynamic()
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+ QSignalSpy spyCount(&model, SIGNAL(countChanged()));
+
int actual = e.evaluate().toInt();
if (e.hasError())
qDebug() << e.error(); // errors not expected
QCOMPARE(actual,result);
+
+ if (model.count() > 0)
+ QVERIFY(spyCount.count() > 0);
}
void tst_qdeclarativelistmodel::dynamic_worker_data()
@@ -351,6 +356,8 @@ void tst_qdeclarativelistmodel::dynamic_worker()
QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
QVERIFY(item != 0);
+ QSignalSpy spyCount(&model, SIGNAL(countChanged()));
+
if (script[0] == QLatin1Char('{') && script[script.length()-1] == QLatin1Char('}'))
script = script.mid(1, script.length() - 2);
QVariantList operations;
@@ -367,6 +374,9 @@ void tst_qdeclarativelistmodel::dynamic_worker()
waitForWorker(item);
QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
+ if (model.count() > 0)
+ QVERIFY(spyCount.count() > 0);
+
delete item;
qApp->processEvents();
}
diff --git a/tests/auto/declarative/qdeclarativelistview/data/listview-noCurrent.qml b/tests/auto/declarative/qdeclarativelistview/data/listview-noCurrent.qml
new file mode 100644
index 0000000..1997010
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelistview/data/listview-noCurrent.qml
@@ -0,0 +1,50 @@
+import QtQuick 1.0
+
+Rectangle {
+ property int current: list.currentIndex
+ 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: -1
+ width: 240
+ height: 320
+ delegate: myDelegate
+ highlightMoveSpeed: 1000
+ model: testModel
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelistview/data/sizelessthan1.qml b/tests/auto/declarative/qdeclarativelistview/data/sizelessthan1.qml
new file mode 100644
index 0000000..77bfef8
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelistview/data/sizelessthan1.qml
@@ -0,0 +1,26 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ height: 0.5
+ width: 240
+ color: ((index % 2) == 1 ? "red" : "blue")
+ }
+ }
+ ListView {
+ id: list
+ objectName: "list"
+ focus: true
+ width: 240
+ height: 320
+ model: testModel
+ delegate: myDelegate
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
index f26a71e..468474a 100644
--- a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
+++ b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelistview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index 6452bae..a4b4f21 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -85,6 +85,7 @@ private slots:
void itemList();
void currentIndex();
+ void noCurrentIndex();
void enforceRange();
void spacing();
void sections();
@@ -99,6 +100,7 @@ private slots:
void QTBUG_11105();
void footer();
void resizeView();
+ void sizeLessThan1();
private:
template <class T> void items();
@@ -672,6 +674,15 @@ void tst_QDeclarativeListView::removed(bool animated)
QTRY_COMPARE(item->y(),80+i*20.0);
}
+ model.removeItems(1, 17);
+// QTest::qWait(300);
+
+ model.removeItems(2, 1);
+ model.addItem("New", "1");
+
+ QTRY_VERIFY(name = findItem<QDeclarativeText>(contentItem, "textName", model.count()-1));
+ QCOMPARE(name->text(), QString("New"));
+
delete canvas;
}
@@ -937,6 +948,8 @@ void tst_QDeclarativeListView::sections()
QCOMPARE(next->text().toInt(), (i+1)/5);
}
+ QSignalSpy currentSectionChangedSpy(listview, SIGNAL(currentSectionChanged()));
+
// Remove section boundary
model.removeItem(5);
@@ -972,13 +985,25 @@ void tst_QDeclarativeListView::sections()
listview->setContentY(140);
QTRY_COMPARE(listview->currentSection(), QString("1"));
+ QTRY_COMPARE(currentSectionChangedSpy.count(), 1);
+
listview->setContentY(20);
QTRY_COMPARE(listview->currentSection(), QString("0"));
+ QTRY_COMPARE(currentSectionChangedSpy.count(), 2);
+
item = findItem<QDeclarativeItem>(contentItem, "wrapper", 1);
QTRY_VERIFY(item);
QTRY_COMPARE(item->height(), 20.0);
+ // check that headers change when item changes
+ listview->setContentY(0);
+ model.modifyItem(0, "changed", "2");
+
+ item = findItem<QDeclarativeItem>(contentItem, "wrapper", 1);
+ QTRY_VERIFY(item);
+ QTRY_COMPARE(item->height(), 40.0);
+
delete canvas;
}
@@ -1073,9 +1098,52 @@ void tst_QDeclarativeListView::currentIndex()
model.insertItem(0, "Foo", "1111");
QTRY_COMPARE(canvas->rootObject()->property("current").toInt(), 29);
+ // check removing highlight by setting currentIndex to -1;
+ listview->setCurrentIndex(-1);
+
+ QCOMPARE(listview->currentIndex(), -1);
+ QVERIFY(!listview->highlightItem());
+ QVERIFY(!listview->currentItem());
+
delete canvas;
}
+void tst_QDeclarativeListView::noCurrentIndex()
+{
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), QString::number(i));
+
+ QDeclarativeView *canvas = new QDeclarativeView(0);
+ canvas->setFixedSize(240,320);
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ QString filename(SRCDIR "/data/listview-noCurrent.qml");
+ canvas->setSource(QUrl::fromLocalFile(filename));
+
+ qApp->processEvents();
+
+ QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "list");
+ QTRY_VERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+
+ // current index should be -1 at startup
+ // and we should not have a currentItem or highlightItem
+ QCOMPARE(listview->currentIndex(), -1);
+ QCOMPARE(listview->contentY(), 0.0);
+ QVERIFY(!listview->highlightItem());
+ QVERIFY(!listview->currentItem());
+
+ listview->setCurrentIndex(2);
+ QCOMPARE(listview->currentIndex(), 2);
+ QVERIFY(listview->highlightItem());
+ QVERIFY(listview->currentItem());
+}
+
void tst_QDeclarativeListView::itemList()
{
QDeclarativeView *canvas = createView();
@@ -1665,6 +1733,41 @@ void tst_QDeclarativeListView::resizeView()
QCOMPARE(heightRatio.toReal(), 0.25);
}
+void tst_QDeclarativeListView::sizeLessThan1()
+{
+ QDeclarativeView *canvas = createView();
+
+ TestModel model;
+ for (int i = 0; i < 30; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/sizelessthan1.qml"));
+ qApp->processEvents();
+
+ QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "list");
+ QTRY_VERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QTRY_VERIFY(item);
+ QTRY_COMPARE(item->y(), i*0.5);
+ }
+
+ delete canvas;
+}
+
void tst_QDeclarativeListView::qListModelInterface_items()
{
items<TestModel>();
diff --git a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
index 29b9eb9..1ede509 100644
--- a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
+++ b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
@@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativeloader.cpp \
../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml b/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml
new file mode 100644
index 0000000..a21ece7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml
@@ -0,0 +1,4 @@
+import com.nokia.WrongCase 1.0
+
+MyPluginType { value: 123 }
+
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir b/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir
new file mode 100644
index 0000000..6c87874
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir
@@ -0,0 +1 @@
+plugin PluGin
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp
new file mode 100644
index 0000000..5e91f4e
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QStringList>
+#include <QtDeclarative/qdeclarativeextensionplugin.h>
+#include <QtDeclarative/qdeclarative.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;
+};
+
+
+class MyPlugin : public QDeclarativeExtensionPlugin
+{
+ Q_OBJECT
+public:
+ MyPlugin()
+ {
+ qWarning("plugin created");
+ }
+
+ void registerTypes(const char *uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == "com.nokia.WrongCase");
+ qmlRegisterType<MyPluginType>(uri, 1, 0, "MyPluginType");
+ }
+};
+
+#include "plugin.moc"
+
+Q_EXPORT_PLUGIN2(plugin, MyPlugin);
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro
new file mode 100644
index 0000000..c7337ca
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro
@@ -0,0 +1,10 @@
+TEMPLATE = lib
+CONFIG += plugin
+SOURCES = plugin.cpp
+QT = core declarative
+TARGET = Plugin
+DESTDIR = ../imports/com/nokia/WrongCase
+
+symbian: {
+ TARGET.EPOCALLOWDLLDATA=1
+}
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro b/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
index 824b402..221e465 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
@@ -1,6 +1,6 @@
QT = core
TEMPLATE = subdirs
-SUBDIRS = plugin
+SUBDIRS = plugin pluginWrongCase
tst_qdeclarativemoduleplugin_pro.depends += plugin
SUBDIRS += tst_qdeclarativemoduleplugin.pro
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
index e1022e0..85fa718 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
@@ -54,6 +54,7 @@ public:
private slots:
void importsPlugin();
+ void incorrectPluginCase();
};
#ifdef Q_OS_SYMBIAN
@@ -120,6 +121,30 @@ void tst_qdeclarativemoduleplugin::importsPlugin()
delete object;
}
+void tst_qdeclarativemoduleplugin::incorrectPluginCase()
+{
+ QDeclarativeEngine engine;
+ engine.addImportPath(QLatin1String(SRCDIR) + QDir::separator() + QLatin1String("imports"));
+
+ QDeclarativeComponent component(&engine, TEST_FILE("data/incorrectCase.qml"));
+
+ QList<QDeclarativeError> errors = component.errors();
+ QCOMPARE(errors.count(), 1);
+
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+#if defined(Q_OS_MAC)
+ QString libname = "libPluGin.dylib";
+#elif defined(Q_OS_WIN32)
+ QString libname = "PluGin.dll";
+#endif
+ QString expectedError = QLatin1String("plugin cannot be loaded for module \"com.nokia.WrongCase\": File name case mismatch for \"") + QFileInfo(__FILE__).absoluteDir().filePath("imports/com/nokia/WrongCase/" + libname) + QLatin1String("\"");
+#else
+ QString expectedError = QLatin1String("module \"com.nokia.WrongCase\" plugin \"PluGin\" not found");
+#endif
+
+ QCOMPARE(errors.at(0).description(), expectedError);
+}
+
QTEST_MAIN(tst_qdeclarativemoduleplugin)
#include "tst_qdeclarativemoduleplugin.moc"
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
index 36dbb83..2e8aa75 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
@@ -4,7 +4,7 @@ QT += declarative
CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml b/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml
new file mode 100644
index 0000000..c6b1f89
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml
@@ -0,0 +1,16 @@
+import QtQuick 1.0
+
+Item {
+ id: root
+ property int clicked: 0
+ property int pressed: 0
+ property int released: 0
+
+ MouseArea {
+ width: 200; height: 200
+ onPressed: { root.pressed++ }
+ onClicked: { root.clicked++ }
+ onReleased: { root.released++ }
+ }
+}
+
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
index 2348444..55b0812 100644
--- a/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
+++ b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
@@ -4,11 +4,13 @@ Item {
id: root
property int clicked: 0
property int doubleClicked: 0
+ property int released: 0
MouseArea {
width: 200; height: 200
onClicked: { root.clicked++ }
onDoubleClicked: { root.doubleClicked++ }
+ onReleased: { root.released++ }
}
}
diff --git a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
index fec73c5..ed9313f 100644
--- a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
+++ b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativemousearea.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index 5e88450..57a58e9 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -63,6 +63,7 @@ private slots:
void noOnClickedWithPressAndHold();
void onMousePressRejected();
void doubleClick();
+ void clickTwice();
private:
QDeclarativeView *createView();
@@ -413,14 +414,60 @@ void tst_QDeclarativeMouseArea::doubleClick()
releaseEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(scene, &releaseEvent);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
+
QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
dblClickEvent.setScenePos(QPointF(100, 100));
dblClickEvent.setButton(Qt::LeftButton);
dblClickEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(scene, &dblClickEvent);
+ QApplication::sendEvent(scene, &releaseEvent);
+
QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 1);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 2);
+
+}
+
+// QTBUG-14832
+void tst_QDeclarativeMouseArea::clickTwice()
+{
+ QDeclarativeView *canvas = createView();
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/clicktwice.qml"));
+ canvas->show();
+ canvas->setFocus();
+ QVERIFY(canvas->rootObject() != 0);
+
+ QGraphicsScene *scene = canvas->scene();
+ QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress);
+ pressEvent.setScenePos(QPointF(100, 100));
+ pressEvent.setButton(Qt::LeftButton);
+ pressEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &pressEvent);
+
+ QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease);
+ releaseEvent.setScenePos(QPointF(100, 100));
+ releaseEvent.setButton(Qt::LeftButton);
+ releaseEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &releaseEvent);
+
+ QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 1);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
+ QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
+
+ QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+ dblClickEvent.setScenePos(QPointF(100, 100));
+ dblClickEvent.setButton(Qt::LeftButton);
+ dblClickEvent.setButtons(Qt::LeftButton);
+ QApplication::sendEvent(scene, &dblClickEvent);
+
+ QApplication::sendEvent(scene, &pressEvent);
+ QApplication::sendEvent(scene, &releaseEvent);
+
+ QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 2);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 2);
+ QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 2);
}
QTEST_MAIN(tst_QDeclarativeMouseArea)
diff --git a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
index 9762b7c..2cf8268 100644
--- a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
+++ b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeparticles.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
index 3270c5e..e0404c5 100644
--- a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
+++ b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativepathview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
index 2e2c6bc..88871e9 100644
--- a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
+++ b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
@@ -10,7 +10,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
index b20d8ec..50d0731 100644
--- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
+++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
@@ -74,7 +74,7 @@ private slots:
void massive();
void cancelcrash();
void shrinkcache();
-
+ void networkCrash();
private:
QDeclarativeEngine engine;
QUrl thisfile;
@@ -335,6 +335,7 @@ public:
: QDeclarativeImageProvider(Pixmap) {}
virtual QPixmap requestPixmap(const QString &d, QSize *, const QSize &) {
+ Q_UNUSED(d)
QPixmap pix(800, 600);
pix.fill(Qt::red);
return pix;
@@ -353,6 +354,30 @@ void tst_qdeclarativepixmapcache::shrinkcache()
}
}
+void createNetworkServer()
+{
+ QEventLoop eventLoop;
+ TestHTTPServer server(14453);
+ server.serveDirectory(SRCDIR "/data/http");
+ QTimer::singleShot(100, &eventLoop, SLOT(quit()));
+ eventLoop.exec();
+}
+
+// QT-3957
+void tst_qdeclarativepixmapcache::networkCrash()
+{
+ QFuture<void> future = QtConcurrent::run(createNetworkServer);
+ QDeclarativeEngine engine;
+ for (int ii = 0; ii < 100 ; ++ii) {
+ QDeclarativePixmap* pixmap = new QDeclarativePixmap;
+ pixmap->load(&engine, QUrl(QString("http://127.0.0.1:14453/exists.png")));
+ QTest::qSleep(1);
+ pixmap->clear();
+ delete pixmap;
+ }
+ future.cancel();
+}
+
QTEST_MAIN(tst_qdeclarativepixmapcache)
#include "tst_qdeclarativepixmapcache.moc"
diff --git a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
index f2c9eee..27e5948 100644
--- a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
+++ b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativepositioners.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
index 504a371..1750860 100644
--- a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
+++ b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeproperty.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
index 775f445..71ff8a8 100644
--- a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
+++ b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeqt.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
index 0f3773c..5230f69 100644
--- a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
+++ b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativerepeater.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
index 8a63355..171f308 100644
--- a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
+++ b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
@@ -9,7 +9,7 @@ INCLUDEPATH += ../shared
# LIBS += -lgcov
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
index e770d46..1e77d6e 100644
--- a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
+++ b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativesmoothedanimation.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
index 07bcbe7..da477fc 100644
--- a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
+++ b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativespringanimation.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
index 400512d..0d335a5 100644
--- a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
+++ b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativesqldatabase.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativestates/data/QTBUG-14830.qml b/tests/auto/declarative/qdeclarativestates/data/QTBUG-14830.qml
new file mode 100644
index 0000000..7f9ddbf
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativestates/data/QTBUG-14830.qml
@@ -0,0 +1,29 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 1024
+ height: 768
+
+ Item {
+ id: area
+ objectName: "area"
+ property int numx: 6
+ property int cellwidth: 1024/numx
+
+ onWidthChanged: {
+ width = width>1024?1024:width;
+ }
+
+ state: 'minimal'
+ states: [
+ State {
+ name: 'minimal'
+ PropertyChanges {
+ target: area
+ width: cellwidth
+ }
+ }
+ ]
+
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
index cb3e0fe..4a0cc24 100644
--- a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
+++ b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativestates.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
index 0d10c10..b8409a5 100644
--- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
+++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp
@@ -143,6 +143,7 @@ private slots:
void returnToBase();
void extendsBug();
void editProperties();
+ void QTBUG_14830();
};
void tst_qdeclarativestates::initTestCase()
@@ -1375,6 +1376,18 @@ void tst_qdeclarativestates::editProperties()
QCOMPARE(childRect->height(), qreal(40));
}
+void tst_qdeclarativestates::QTBUG_14830()
+{
+ QDeclarativeEngine engine;
+
+ QDeclarativeComponent c(&engine, SRCDIR "/data/QTBUG-14830.qml");
+ QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create());
+ QVERIFY(rect != 0);
+ QDeclarativeItem *item = rect->findChild<QDeclarativeItem*>("area");
+
+ QCOMPARE(item->width(), qreal(171));
+}
+
QTEST_MAIN(tst_qdeclarativestates)
#include "tst_qdeclarativestates.moc"
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png b/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
index b5c6bba..cf6199a 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png b/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
index c9ffcc1..f81ccb4 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png b/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
index eda0d25..9ba6412 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
index 28a9fcd..290cda3 100644
--- a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
+++ b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
@@ -10,7 +10,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
index 8606eb0..aaf753e 100644
--- a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
+++ b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
@@ -6,7 +6,7 @@ SOURCES += tst_qdeclarativetextedit.cpp ../shared/testhttpserver.cpp
HEADERS += ../shared/testhttpserver.h
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
index 472c5ef..a7971cc 100644
--- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
+++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
@@ -56,6 +56,8 @@
#include <QDir>
#include <QStyle>
#include <QInputContext>
+#include <QClipboard>
+#include <QMimeData>
#include <private/qapplication_p.h>
#include <private/qtextcontrol_p.h>
@@ -119,6 +121,8 @@ private slots:
void openInputPanelOnClick();
void openInputPanelOnFocus();
void geometrySignals();
+ void pastingRichText_QTBUG_14003();
+
private:
void simulateKey(QDeclarativeView *, int key);
QDeclarativeView *createView(const QString &filename);
@@ -1174,6 +1178,27 @@ void tst_qdeclarativetextedit::geometrySignals()
delete o;
}
+void tst_qdeclarativetextedit::pastingRichText_QTBUG_14003()
+{
+#ifndef QT_NO_CLIPBOARD
+ QString componentStr = "import QtQuick 1.0\nTextEdit { textFormat: TextEdit.PlainText }";
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeTextEdit *obj = qobject_cast<QDeclarativeTextEdit*>(component.create());
+
+ QTRY_VERIFY(obj != 0);
+ QTRY_VERIFY(obj->textFormat() == QDeclarativeTextEdit::PlainText);
+
+ QMimeData *mData = new QMimeData;
+ mData->setHtml("<font color=\"red\">Hello</font>");
+ QApplication::clipboard()->setMimeData(mData);
+
+ obj->paste();
+ QTRY_VERIFY(obj->text() == "");
+ QTRY_VERIFY(obj->textFormat() == QDeclarativeTextEdit::PlainText);
+#endif
+}
+
QTEST_MAIN(tst_qdeclarativetextedit)
#include "tst_qdeclarativetextedit.moc"
diff --git a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
index 7d178d7..0fee1c9 100644
--- a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
+++ b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativetextinput.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
index 56c3cd4..59b3526 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
+++ b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
@@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativevaluetypes.cpp \
testtypes.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
index 2f0a474..fc4790d 100644
--- a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
+++ b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
index 08adf26..a94992b 100644
--- a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
+++ b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
@@ -7,7 +7,7 @@ include(../../../../tools/qml/qml.pri)
SOURCES += tst_qdeclarativeviewer.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties.qml
new file mode 100644
index 0000000..8cd5763
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties.qml
@@ -0,0 +1,17 @@
+import QtQuick 1.0
+
+ListView {
+ model: myModel
+ delegate: Item {
+ objectName: "delegate"
+ property variant test1: name
+ property variant test2: model.name
+ property variant test3: modelData
+ property variant test4: model.modelData
+ property variant test5: modelData.name
+ property variant test6: model
+ property variant test7: index
+ property variant test8: model.index
+ property variant test9: model.modelData.name
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties2.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties2.qml
new file mode 100644
index 0000000..67721c9
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/modelproperties2.qml
@@ -0,0 +1,17 @@
+import QtQuick 1.0
+
+ListView {
+ model: myModel
+ delegate: Item {
+ objectName: "delegate"
+ property variant test1: display
+ property variant test2: model.display
+ property variant test3: modelData
+ property variant test4: model.modelData
+ property variant test5: modelData.display
+ property variant test6: model
+ property variant test7: index
+ property variant test8: model.index
+ property variant test9: model.modelData.display
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
index d0d9b36..fe3d794 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativevisualdatamodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
index d73a872..29a065c 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
@@ -120,6 +120,8 @@ private slots:
void childChanged();
void objectListModel();
void singleRole();
+ void modelProperties();
+ void noDelegate();
private:
QDeclarativeEngine engine;
@@ -364,6 +366,136 @@ void tst_qdeclarativevisualdatamodel::singleRole()
}
}
+void tst_qdeclarativevisualdatamodel::modelProperties()
+{
+ {
+ QDeclarativeView view;
+
+ SingleRoleModel model;
+
+ QDeclarativeContext *ctxt = view.rootContext();
+ ctxt->setContextProperty("myModel", &model);
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/modelproperties.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeItem *delegate = findItem<QDeclarativeItem>(contentItem, "delegate", 1);
+ QCOMPARE(delegate->property("test1").toString(),QString("two"));
+ QCOMPARE(delegate->property("test2").toString(),QString("two"));
+ QCOMPARE(delegate->property("test3").toString(),QString("two"));
+ QCOMPARE(delegate->property("test4").toString(),QString("two"));
+ QVERIFY(!delegate->property("test9").isValid());
+ QCOMPARE(delegate->property("test5").toString(),QString(""));
+ QVERIFY(delegate->property("test6").value<QObject*>() != 0);
+ QCOMPARE(delegate->property("test7").toInt(),1);
+ QCOMPARE(delegate->property("test8").toInt(),1);
+ }
+
+ {
+ QDeclarativeView view;
+
+ QList<QObject*> dataList;
+ dataList.append(new DataObject("Item 1", "red"));
+ dataList.append(new DataObject("Item 2", "green"));
+ dataList.append(new DataObject("Item 3", "blue"));
+ dataList.append(new DataObject("Item 4", "yellow"));
+
+ QDeclarativeContext *ctxt = view.rootContext();
+ ctxt->setContextProperty("myModel", QVariant::fromValue(dataList));
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/modelproperties.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeItem *delegate = findItem<QDeclarativeItem>(contentItem, "delegate", 1);
+ QCOMPARE(delegate->property("test1").toString(),QString("Item 2"));
+ QEXPECT_FAIL("", "QTBUG-13576", Continue);
+ QCOMPARE(delegate->property("test2").toString(),QString("Item 2"));
+ QVERIFY(qobject_cast<DataObject*>(delegate->property("test3").value<QObject*>()) != 0);
+ QVERIFY(qobject_cast<DataObject*>(delegate->property("test4").value<QObject*>()) != 0);
+ QCOMPARE(delegate->property("test5").toString(),QString("Item 2"));
+ QCOMPARE(delegate->property("test9").toString(),QString("Item 2"));
+ QVERIFY(delegate->property("test6").value<QObject*>() != 0);
+ QCOMPARE(delegate->property("test7").toInt(),1);
+ QCOMPARE(delegate->property("test8").toInt(),1);
+ }
+
+ {
+ QDeclarativeView view;
+
+ QStandardItemModel model;
+ initStandardTreeModel(&model);
+
+ view.rootContext()->setContextProperty("myModel", &model);
+
+ QUrl source(QUrl::fromLocalFile(SRCDIR "/data/modelproperties2.qml"));
+
+ //3 items, 3 warnings each
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":11: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":11: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":11: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":9: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":9: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":9: ReferenceError: Can't find variable: modelData");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":15: TypeError: Result of expression 'model.modelData' [undefined] is not an object.");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":15: TypeError: Result of expression 'model.modelData' [undefined] is not an object.");
+ QTest::ignoreMessage(QtWarningMsg, source.toString().toLatin1() + ":15: TypeError: Result of expression 'model.modelData' [undefined] is not an object.");
+
+ view.setSource(source);
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeItem *delegate = findItem<QDeclarativeItem>(contentItem, "delegate", 1);
+ QCOMPARE(delegate->property("test1").toString(),QString("Row 2 Item"));
+ QCOMPARE(delegate->property("test2").toString(),QString("Row 2 Item"));
+ QVERIFY(!delegate->property("test3").isValid());
+ QVERIFY(!delegate->property("test4").isValid());
+ QVERIFY(!delegate->property("test5").isValid());
+ QVERIFY(!delegate->property("test9").isValid());
+ QVERIFY(delegate->property("test6").value<QObject*>() != 0);
+ QCOMPARE(delegate->property("test7").toInt(),1);
+ QCOMPARE(delegate->property("test8").toInt(),1);
+ }
+
+ //### should also test QStringList and QVariantList
+}
+
+void tst_qdeclarativevisualdatamodel::noDelegate()
+{
+ QDeclarativeView view;
+
+ QStandardItemModel model;
+ initStandardTreeModel(&model);
+
+ view.rootContext()->setContextProperty("myModel", &model);
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/datalist.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeVisualDataModel *vdm = listview->findChild<QDeclarativeVisualDataModel*>("visualModel");
+ QVERIFY(vdm != 0);
+ QCOMPARE(vdm->count(), 3);
+
+ vdm->setDelegate(0);
+ QCOMPARE(vdm->count(), 0);
+}
+
+
template<typename T>
T *tst_qdeclarativevisualdatamodel::findItem(QGraphicsObject *parent, const QString &objectName, int index)
{
diff --git a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
index 2ab27a1..af13d33 100644
--- a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
+++ b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativewebview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
index 9d4e0ed..e20c3e6 100644
--- a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
+++ b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeworkerscript.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
index bfd47c5..8aefb8e 100644
--- a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
+++ b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
@@ -9,7 +9,7 @@ SOURCES += tst_qdeclarativexmlhttprequest.cpp \
../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
index f4b25b5..c74b8fb 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
@@ -9,7 +9,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativexmllistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT += importFiles
} else {
diff --git a/tests/auto/declarative/qmlvisual/ListView/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/basic1.qml
index d55c997..8c1b56e 100644
--- a/tests/auto/declarative/qmlvisual/ListView/basic1.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/basic1.qml
@@ -11,16 +11,19 @@ Rectangle {
color: "red"
width: 100
height: 100
- Text {
- text: name
+ Rectangle {
+ anchors.centerIn: parent
+ width: 60
+ height: 60
+ color: name
}
}
model: ListModel {
ListElement {
- name: "January"
+ name: "palegoldenrod"
}
ListElement {
- name: "February"
+ name: "lightsteelblue"
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/basic2.qml
index 31c802d..9d26c73 100644
--- a/tests/auto/declarative/qmlvisual/ListView/basic2.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/basic2.qml
@@ -11,8 +11,11 @@ Rectangle {
color: "red"
width: 100
height: 100
- Text {
- text: name
+ Rectangle {
+ anchors.centerIn: parent
+ width: 60
+ height: 60
+ color: name
}
}
}
@@ -21,10 +24,10 @@ Rectangle {
delegate: delegate
model: ListModel {
ListElement {
- name: "January"
+ name: "palegoldenrod"
}
ListElement {
- name: "February"
+ name: "lightsteelblue"
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/basic3.qml
index be39ca1..982df9a 100644
--- a/tests/auto/declarative/qmlvisual/ListView/basic3.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/basic3.qml
@@ -8,10 +8,10 @@ Rectangle {
ListModel {
id: model
ListElement {
- name: "January"
+ name: "palegoldenrod"
}
ListElement {
- name: "February"
+ name: "lightsteelblue"
}
}
ListView {
@@ -21,8 +21,11 @@ Rectangle {
color: "red"
width: 100
height: 100
- Text {
- text: name
+ Rectangle {
+ anchors.centerIn: parent
+ width: 60
+ height: 60
+ color: name
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/basic4.qml
index 906af63..2c5d1e3 100644
--- a/tests/auto/declarative/qmlvisual/ListView/basic4.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/basic4.qml
@@ -8,10 +8,10 @@ Rectangle {
ListModel {
id: model
ListElement {
- name: "January"
+ name: "palegoldenrod"
}
ListElement {
- name: "February"
+ name: "lightsteelblue"
}
}
Component {
@@ -20,8 +20,11 @@ Rectangle {
color: "red"
width: 100
height: 100
- Text {
- text: name
+ Rectangle {
+ anchors.centerIn: parent
+ width: 60
+ height: 60
+ color: name
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml
deleted file mode 100644
index 3373247..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml
+++ /dev/null
@@ -1,159 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 32
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 48
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 64
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 80
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 96
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 112
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 128
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 144
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 160
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 176
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 192
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 208
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 224
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 240
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 256
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 272
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 288
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 304
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 320
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 336
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 352
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 368
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 384
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 400
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 416
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 432
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 448
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 464
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 480
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 496
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 512
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 528
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 544
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 560
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 576
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml
deleted file mode 100644
index 20b889d..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml
+++ /dev/null
@@ -1,187 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 32
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 48
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 64
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 80
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 96
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 112
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 128
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 144
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 160
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 176
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 192
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 208
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 224
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 240
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 256
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 272
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 288
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 304
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 320
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 336
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 352
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 368
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 384
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 400
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 416
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 432
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 448
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 464
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 480
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 496
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 512
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 528
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 544
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 560
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 576
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 592
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 608
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 624
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 640
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 656
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 672
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 688
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml
deleted file mode 100644
index f49de2f..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml
+++ /dev/null
@@ -1,147 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 32
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 48
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 64
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 80
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 96
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 112
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 128
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 144
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 160
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 176
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 192
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 208
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 224
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 240
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 256
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 272
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 288
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 304
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 320
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 336
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 352
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 368
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 384
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 400
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 416
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 432
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 448
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 464
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 480
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 496
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 512
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 528
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml
deleted file mode 100644
index 1ea5547..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml
+++ /dev/null
@@ -1,171 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 32
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 48
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 64
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 80
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 96
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 112
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 128
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 144
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 160
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 176
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 192
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 208
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 224
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 240
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 256
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 272
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 288
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 304
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 320
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 336
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 352
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 368
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 384
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 400
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 416
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 432
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 448
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 464
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 480
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 496
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 512
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 528
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 544
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 560
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 576
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 592
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 608
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
- Frame {
- msec: 624
- hash: "895c70434a24da42144e60e6d8dcf323"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png
deleted file mode 100644
index 13b280c..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png
deleted file mode 100644
index 402872b..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png
deleted file mode 100644
index afd0830..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png
deleted file mode 100644
index 7c15f61..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png
deleted file mode 100644
index afd0830..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png
deleted file mode 100644
index fddf1cb..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png
deleted file mode 100644
index 13b280c..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml
deleted file mode 100644
index 829fbb3..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml
+++ /dev/null
@@ -1,2203 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 32
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 48
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 64
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 80
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 96
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 112
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 128
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 144
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 160
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 176
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 192
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 208
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 224
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 240
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 256
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 272
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 288
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 304
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 320
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 336
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 352
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 368
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 384
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 400
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 416
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 432
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 448
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 464
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 480
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 496
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 512
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 528
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 544
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 560
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 576
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 592
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 608
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 624
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 640
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 656
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 672
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 688
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 704
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 720
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 736
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 752
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 768
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 784
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 800
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 816
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 832
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 848
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 864
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 880
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 896
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 912
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 928
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 944
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 960
- image: "itemlist.0.png"
- }
- Frame {
- msec: 976
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 992
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1008
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1024
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1040
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1056
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1072
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1088
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1104
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1120
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1136
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1152
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1168
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1184
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1200
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1216
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1232
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1248
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1264
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1280
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1296
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1312
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1328
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1344
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1360
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1376
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1392
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1408
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1424
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1440
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1456
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1472
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1488
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1504
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1520
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1536
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1552
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1568
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1584
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1600
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1616
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1632
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 1648
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 192; y: 111
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1664
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 191; y: 111
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1680
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 190; y: 112
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 187; y: 113
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1696
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 184; y: 113
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 180; y: 113
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1712
- hash: "a68b1bc6c2963ee92c3a45f500667b3b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 174; y: 114
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 167; y: 115
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1728
- hash: "7cda93e59466b3348e7ffe3895f89e86"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 160; y: 117
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1744
- hash: "06e0008c78e919f7270402938d9d764b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 140; y: 121
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 132; y: 122
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1760
- hash: "9d8da9199efebb95f56e5d4ebc9a585e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 114; y: 126
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 98; y: 132
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1776
- hash: "54a60a4279911ba4a8a5741bcadfa783"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 91; y: 132
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 91; y: 132
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 1792
- hash: "a1a19370a1a8ed78e475f0d0eb12311c"
- }
- Frame {
- msec: 1808
- hash: "196a3b127cf7065614c34856bf8d8bca"
- }
- Frame {
- msec: 1824
- hash: "5fbefbd7c7be4374382cc4c8b86ac78a"
- }
- Frame {
- msec: 1840
- hash: "d6a544c622e504c1b931e1a8a1310a6e"
- }
- Frame {
- msec: 1856
- hash: "20e76f0eb4ec5f691999faf8ad313370"
- }
- Frame {
- msec: 1872
- hash: "7f84a3545907c754ae8a6a30ef61c98d"
- }
- Frame {
- msec: 1888
- hash: "b544901eae32903ad054e8cdfed715eb"
- }
- Frame {
- msec: 1904
- hash: "a010ed1e3312f4ca9f429b7e32cdcef9"
- }
- Frame {
- msec: 1920
- image: "itemlist.1.png"
- }
- Frame {
- msec: 1936
- hash: "93a731dc6f71b6ff5400bf74c87e6c46"
- }
- Frame {
- msec: 1952
- hash: "c73f63d1a024ba956e693487b3ccc761"
- }
- Frame {
- msec: 1968
- hash: "539d3d00fce2d0128cd697d86d237fe7"
- }
- Frame {
- msec: 1984
- hash: "52752d7d6f2d0e085f7132313907b72b"
- }
- Frame {
- msec: 2000
- hash: "f46dd5803a6075e979e0fc733d503bfb"
- }
- Frame {
- msec: 2016
- hash: "b8734698a6bad00ecf019f85328c2c21"
- }
- Frame {
- msec: 2032
- hash: "1cfc499ca756023430cc5b2fa95a599d"
- }
- Frame {
- msec: 2048
- hash: "63a816548837c19f8f0494c137fc0174"
- }
- Frame {
- msec: 2064
- hash: "1bce9b85235e9a1a472c079dfec70ec5"
- }
- Frame {
- msec: 2080
- hash: "6677863e7f74c12648409883f73adbe2"
- }
- Frame {
- msec: 2096
- hash: "98e707a3e39a5f7bd4a101c2ed83535c"
- }
- Frame {
- msec: 2112
- hash: "c1f6d8842d14a9394d4b7797314f50e8"
- }
- Frame {
- msec: 2128
- hash: "579758b477bcd2112b305a5aac7df338"
- }
- Frame {
- msec: 2144
- hash: "4a7bb81090db246db53e2dbc56f710ea"
- }
- Frame {
- msec: 2160
- hash: "074995cdd8a70817d1c8a7bb0ad4c542"
- }
- Frame {
- msec: 2176
- hash: "bd8d7bda4d2e9ad1fba2895d568f36cc"
- }
- Frame {
- msec: 2192
- hash: "40cce3d2d80ac470af44fc334cec1d5b"
- }
- Frame {
- msec: 2208
- hash: "15cbc226b032d5a97199735ea7a1408b"
- }
- Frame {
- msec: 2224
- hash: "12b296aea9b058a5402d0d0a620f8edc"
- }
- Frame {
- msec: 2240
- hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
- }
- Frame {
- msec: 2256
- hash: "589a58ef76ea709dc8d80390c9044f99"
- }
- Frame {
- msec: 2272
- hash: "c009924bfa30153f22ab168b539494e9"
- }
- Frame {
- msec: 2288
- hash: "4b83674a7c2daa68d735901ad40be2bd"
- }
- Frame {
- msec: 2304
- hash: "0525908c0302ada989e28990bac3f2ca"
- }
- Frame {
- msec: 2320
- hash: "89eb13976ba3ba4413cafeb0cc91c01b"
- }
- Frame {
- msec: 2336
- hash: "75c1295ef99680784b2e11fb88fa1423"
- }
- Frame {
- msec: 2352
- hash: "93d89165cf6a97c76ae6e7f75678a3cd"
- }
- Frame {
- msec: 2368
- hash: "53064c1938f08a55603a99b0db225174"
- }
- Frame {
- msec: 2384
- hash: "31db5684466c0c32128a9a8c7b1835e1"
- }
- Frame {
- msec: 2400
- hash: "99d9e58697736198e0a00443d237e85b"
- }
- Frame {
- msec: 2416
- hash: "6c1e860aef983367365d53f5849ad441"
- }
- Frame {
- msec: 2432
- hash: "6c1e860aef983367365d53f5849ad441"
- }
- Frame {
- msec: 2448
- hash: "6c1e860aef983367365d53f5849ad441"
- }
- Frame {
- msec: 2464
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2480
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2496
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2512
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2528
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2544
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2560
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2576
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2592
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2608
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2624
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2640
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2656
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2672
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2688
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2704
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2720
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2736
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2752
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2768
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2784
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2800
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2816
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2832
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2848
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 2864
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 181; y: 104
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2880
- image: "itemlist.2.png"
- }
- Frame {
- msec: 2896
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 179; y: 105
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 177; y: 106
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2912
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 174; y: 108
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 170; y: 110
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2928
- hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 166; y: 112
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 160; y: 115
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2944
- hash: "b10a6206830a876017799ef2fcf61b1a"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 154; y: 117
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 140; y: 123
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2960
- hash: "b2e24759ba10afd6cff90f4b1e04b496"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 124; y: 127
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 124; y: 127
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2976
- hash: "ccbcd6f45cb529c2db71504c0f69d73e"
- }
- Frame {
- msec: 2992
- hash: "7b31c6d5931677f1aa1e8c7d48a4ff22"
- }
- Frame {
- msec: 3008
- hash: "c52f691a0a6cf155118bdfea2dfea623"
- }
- Frame {
- msec: 3024
- hash: "dd639d1df3d4a9b8f06718def63d588f"
- }
- Frame {
- msec: 3040
- hash: "39d767b09a648ef6295cec2848f9226f"
- }
- Frame {
- msec: 3056
- hash: "5dd46d5f386431e7b13348ac9a9630ed"
- }
- Frame {
- msec: 3072
- hash: "0354e5183b0e66e7ba146d292c559df4"
- }
- Frame {
- msec: 3088
- hash: "984aa6d7075e24de429e05b1b0eda94a"
- }
- Frame {
- msec: 3104
- hash: "1af58a2f44f1f613712d4df85e38356d"
- }
- Frame {
- msec: 3120
- hash: "6e4085e7f1fee724d78808753f04b471"
- }
- Frame {
- msec: 3136
- hash: "73a019ef9057639d631cd99a431b3f3b"
- }
- Frame {
- msec: 3152
- hash: "c9414a2e655a90dfdcb6fb288b4ba0ca"
- }
- Frame {
- msec: 3168
- hash: "3f4c24f7ac89da982af22032309637fb"
- }
- Frame {
- msec: 3184
- hash: "a50e6ada8f73a257657f4348ceaffcfd"
- }
- Frame {
- msec: 3200
- hash: "a67bf40d09259bbd079c12ae4f49150f"
- }
- Frame {
- msec: 3216
- hash: "a2fc512b7c234a9d0b2c1a83387a8a46"
- }
- Frame {
- msec: 3232
- hash: "85090683ce9a3c9833b1cb0b3df076ee"
- }
- Frame {
- msec: 3248
- hash: "275f3594a0e2cc4b6717f9f336e7e1b6"
- }
- Frame {
- msec: 3264
- hash: "2473eb11f7b65a784a2b166114026488"
- }
- Frame {
- msec: 3280
- hash: "4865c30dc45fbf5ca82047b77eca0912"
- }
- Frame {
- msec: 3296
- hash: "54de88bca395449fbaea2c090c7a5d91"
- }
- Frame {
- msec: 3312
- hash: "833f9295cf9a34934f001eac48551b59"
- }
- Frame {
- msec: 3328
- hash: "5bf565f57ababa7380faeee94add91ca"
- }
- Frame {
- msec: 3344
- hash: "6325578867f1eb3b2d47ed40b017b571"
- }
- Frame {
- msec: 3360
- hash: "046a6114176b3a3206b7a2acd6e30b41"
- }
- Frame {
- msec: 3376
- hash: "f8d4120a17f28c2d1d9c4be959098058"
- }
- Frame {
- msec: 3392
- hash: "71356d2e48aad2900784ea6bc1a3d908"
- }
- Frame {
- msec: 3408
- hash: "b84ad460fb81fdc4049abe8f3ff180bb"
- }
- Frame {
- msec: 3424
- hash: "0354239f5eaea23474d9f81385392a8a"
- }
- Frame {
- msec: 3440
- hash: "8ef0eef3393e07ae7605c865a95edc30"
- }
- Frame {
- msec: 3456
- hash: "5b8b384cc8e3faf4310015e19b3eb487"
- }
- Frame {
- msec: 3472
- hash: "77c18ac7dfff2a4e516915e3e3df0717"
- }
- Frame {
- msec: 3488
- hash: "c1d3264384c26345eb8100de829309ca"
- }
- Frame {
- msec: 3504
- hash: "6b21f71d0bedef4bbcb445a13f61e7a3"
- }
- Frame {
- msec: 3520
- hash: "f619097356671f6eb54d3b1c481e709d"
- }
- Frame {
- msec: 3536
- hash: "e56e3a90da446e0c482cb93717f6aacc"
- }
- Frame {
- msec: 3552
- hash: "aa94ebdbb4b8423aff28c95daff0baf5"
- }
- Frame {
- msec: 3568
- hash: "e1744d9cacd1a2c96af4cfdd5c486995"
- }
- Frame {
- msec: 3584
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
- }
- Frame {
- msec: 3600
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
- }
- Frame {
- msec: 3616
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
- }
- Frame {
- msec: 3632
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3648
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3664
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3680
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3696
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3712
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3728
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3744
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3760
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3776
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3792
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3808
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3824
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3840
- image: "itemlist.3.png"
- }
- Frame {
- msec: 3856
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3872
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3888
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3904
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3920
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3936
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3952
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3968
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 3984
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4000
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4016
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4032
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4048
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4064
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4080
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Frame {
- msec: 4096
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 31; y: 137
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4112
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 32; y: 137
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4128
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 33; y: 136
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 36; y: 135
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4144
- hash: "88143ff6c278a5433b314b551b7b8b1d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 40; y: 134
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 46; y: 132
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4160
- hash: "c2c9c284b185a89faf4ddb5a7867f449"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 64; y: 130
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4176
- hash: "de1c18aeda5d2fbd6dad4554c78617bd"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 86; y: 126
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 110; y: 118
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 110; y: 118
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4192
- hash: "a67bf40d09259bbd079c12ae4f49150f"
- }
- Frame {
- msec: 4208
- hash: "94514668dafbe41c5890a578efd6dea4"
- }
- Frame {
- msec: 4224
- hash: "2e97a74eb9ddb1c9613c89e2d78db018"
- }
- Frame {
- msec: 4240
- hash: "4b5368f0d86bffeb6bd31b58aec88650"
- }
- Frame {
- msec: 4256
- hash: "b459bde7bb4ce51e6ecdab58f64fcbb9"
- }
- Frame {
- msec: 4272
- hash: "7bac8cc3ec64c9ad1c0da282e38c953e"
- }
- Frame {
- msec: 4288
- hash: "a73a58c3d7a757547740a2a161f4c756"
- }
- Frame {
- msec: 4304
- hash: "b35edcb1fa3568a3e770ab2364b82e75"
- }
- Frame {
- msec: 4320
- hash: "d6c863ef57c5e5cb04cdac72f920db0b"
- }
- Frame {
- msec: 4336
- hash: "0db5e4588ff851918b07796f0cf07382"
- }
- Frame {
- msec: 4352
- hash: "71ec8c363ca6a6f7556afb70faccffe6"
- }
- Frame {
- msec: 4368
- hash: "18d026e9c965ada1db67c643576d2a80"
- }
- Frame {
- msec: 4384
- hash: "69f71c22dff981a4da8ec1edcf90e79f"
- }
- Frame {
- msec: 4400
- hash: "680460f5e4d9e649931601041af046b2"
- }
- Frame {
- msec: 4416
- hash: "3028763fd15de2607b20b1331b904a4a"
- }
- Frame {
- msec: 4432
- hash: "333eb60e217fe1ea7469eab52ac461f1"
- }
- Frame {
- msec: 4448
- hash: "ccbcd6f45cb529c2db71504c0f69d73e"
- }
- Frame {
- msec: 4464
- hash: "3445df9b41a0a3e74738cbf328ab7d5c"
- }
- Frame {
- msec: 4480
- hash: "bd2c072558479e9de7a97207e58cc57f"
- }
- Frame {
- msec: 4496
- hash: "3d34b0b24a30eda93377dcb4585afed8"
- }
- Frame {
- msec: 4512
- hash: "d3045703863b0c5a327b9355c23d69f2"
- }
- Frame {
- msec: 4528
- hash: "2f2eb55f693415b840a317211b250e9f"
- }
- Frame {
- msec: 4544
- hash: "791b9ca7d47a3343474c30a35e336d4b"
- }
- Frame {
- msec: 4560
- hash: "73a0c02ebad6d3d5f939d9a00dd898bf"
- }
- Frame {
- msec: 4576
- hash: "d5c11135d586711b12f236430a2c2795"
- }
- Frame {
- msec: 4592
- hash: "34f9ea214fe714ff4e994f715ea6ea39"
- }
- Frame {
- msec: 4608
- hash: "8e49afa00983b156b818533923fb6edd"
- }
- Frame {
- msec: 4624
- hash: "e7e7bef17cee92eca9191fd734d7a577"
- }
- Frame {
- msec: 4640
- hash: "e407f6ed7cb3c130365ab5515d6308c0"
- }
- Frame {
- msec: 4656
- hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
- }
- Frame {
- msec: 4672
- hash: "0ad7411316031e22034c14e81ca3a806"
- }
- Frame {
- msec: 4688
- hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7"
- }
- Frame {
- msec: 4704
- hash: "32bef6f5005ad94e29ff59165958fbdc"
- }
- Frame {
- msec: 4720
- hash: "87758dd311f91193bf1e3536c2f58525"
- }
- Frame {
- msec: 4736
- hash: "015be92a4ff4e735fcc3cbc7a8b9d763"
- }
- Frame {
- msec: 4752
- hash: "d4c34ed49317c6692d71681fcd9842b6"
- }
- Frame {
- msec: 4768
- hash: "abaa235bb946a8abaddd52981d632c2d"
- }
- Frame {
- msec: 4784
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4800
- image: "itemlist.4.png"
- }
- Frame {
- msec: 4816
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4832
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4848
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4864
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4880
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4896
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4912
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4928
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4944
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4960
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4976
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 4992
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5008
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5024
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5040
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5056
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5072
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5088
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5104
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5120
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5136
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5152
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5168
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5184
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5200
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5216
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Frame {
- msec: 5232
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 17; y: 120
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5248
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 19; y: 120
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 21; y: 120
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5264
- hash: "99f9988040a389576cb6420b5391f768"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 24; y: 119
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 28; y: 119
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5280
- hash: "95b380c9ab6f8db7b822faf023d94546"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 35; y: 119
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 44; y: 119
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5296
- hash: "bb79e53556698c62ec30c75be9f6b7d7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 70; y: 119
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 96; y: 117
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 96; y: 117
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5312
- hash: "285cc2f0df1f59f25a0135560ab6edf2"
- }
- Frame {
- msec: 5328
- hash: "93a731dc6f71b6ff5400bf74c87e6c46"
- }
- Frame {
- msec: 5344
- hash: "eb555741ab128a50de5a18a454f2e639"
- }
- Frame {
- msec: 5360
- hash: "5dbe6cf898c1e37fcaacecfcf57b2194"
- }
- Frame {
- msec: 5376
- hash: "e7795610115593e78bb32f7bcc0ae2eb"
- }
- Frame {
- msec: 5392
- hash: "20e76f0eb4ec5f691999faf8ad313370"
- }
- Frame {
- msec: 5408
- hash: "d6a544c622e504c1b931e1a8a1310a6e"
- }
- Frame {
- msec: 5424
- hash: "e7a3a21feed244c5b1c710a9254c15f0"
- }
- Frame {
- msec: 5440
- hash: "5a4b1aca24f121d1373646e9d80b86fd"
- }
- Frame {
- msec: 5456
- hash: "331d2ec7021655c86aa64e47718a1088"
- }
- Frame {
- msec: 5472
- hash: "92096bc872e7395aa5b75c44646a0b60"
- }
- Frame {
- msec: 5488
- hash: "0d9aa6cee4d21488cbb5153f8f3ed593"
- }
- Frame {
- msec: 5504
- hash: "c1b943d43701605563fffffcb75f9fa7"
- }
- Frame {
- msec: 5520
- hash: "1b680025d5ad1ddd8f8d5f570ba73e71"
- }
- Frame {
- msec: 5536
- hash: "5539a3b9f60ea747c10ed8328b467cbf"
- }
- Frame {
- msec: 5552
- hash: "0a1317bcb606cd3488c5b14ee5d96585"
- }
- Frame {
- msec: 5568
- hash: "8844af68b11db7d92c69804c7371a746"
- }
- Frame {
- msec: 5584
- hash: "28d7fd127739c6e3b8488651b725c802"
- }
- Frame {
- msec: 5600
- hash: "0cf1a7d958a96aa2768995dddc5ccc09"
- }
- Frame {
- msec: 5616
- hash: "64b902fe7ab4d89ef0c7b760974e3488"
- }
- Frame {
- msec: 5632
- hash: "aba11c597eba550fc1eaddbf554057f6"
- }
- Frame {
- msec: 5648
- hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5"
- }
- Frame {
- msec: 5664
- hash: "0ba8b582234d9f0c198c0c9e18e1cb02"
- }
- Frame {
- msec: 5680
- hash: "f66eaf2b5c3529987c0d9d005351ed73"
- }
- Frame {
- msec: 5696
- hash: "75b0bb720fa4c77da3783b3ff31c2fae"
- }
- Frame {
- msec: 5712
- hash: "345b235bb7f13409378e5c0c370f2a41"
- }
- Frame {
- msec: 5728
- hash: "83b7e902dce4e0fdc4ef5d629188c23c"
- }
- Frame {
- msec: 5744
- hash: "04b9041c6f10969889d92e94785c7e88"
- }
- Frame {
- msec: 5760
- image: "itemlist.5.png"
- }
- Frame {
- msec: 5776
- hash: "4f3a902addc34ecdaf390e2427cc52e7"
- }
- Frame {
- msec: 5792
- hash: "68d443f16c16821ffc9ca68b17c76034"
- }
- Frame {
- msec: 5808
- hash: "9d25adc77befa761ee376a9b43595b5e"
- }
- Frame {
- msec: 5824
- hash: "a68b1bc6c2963ee92c3a45f500667b3b"
- }
- Frame {
- msec: 5840
- hash: "d5268cd58c222451d48038e715e83802"
- }
- Frame {
- msec: 5856
- hash: "f37d461541a8ec7a4161b18748de6aea"
- }
- Frame {
- msec: 5872
- hash: "805319ac7ca842feb3649e92f8b5b72f"
- }
- Frame {
- msec: 5888
- hash: "73124472a05080891d4948d8ca273f8c"
- }
- Frame {
- msec: 5904
- hash: "b6e433a23282a50db2e165a2447ba3f6"
- }
- Frame {
- msec: 5920
- hash: "fd8d3f5688b1806998c6087e18c6c730"
- }
- Frame {
- msec: 5936
- hash: "f132dd459950ef2d18aa93ca950d0692"
- }
- Frame {
- msec: 5952
- hash: "ade5beb259b5277c333ca806fc9bdbec"
- }
- Frame {
- msec: 5968
- hash: "ade5beb259b5277c333ca806fc9bdbec"
- }
- Frame {
- msec: 5984
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6000
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6016
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6032
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6048
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6064
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6080
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6096
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6112
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6128
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6144
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6160
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6176
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6192
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6208
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6224
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6240
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6256
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6272
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6288
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6304
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6320
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6336
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6352
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6368
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6384
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6400
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6416
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6432
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6448
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6464
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6480
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6496
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6512
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6528
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6544
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6560
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6576
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6592
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6608
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6624
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6640
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6656
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6672
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6688
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6704
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6720
- image: "itemlist.6.png"
- }
- Frame {
- msec: 6736
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6752
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6768
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6784
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6800
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6816
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6832
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6848
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6864
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6880
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6896
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6912
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6928
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6944
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6960
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6976
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 6992
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7008
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7024
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7040
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7056
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7072
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7088
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7104
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7120
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7136
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7152
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7168
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7184
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7200
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7216
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7232
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7248
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7264
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7280
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7296
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
- Frame {
- msec: 7312
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png
deleted file mode 100644
index a1ab987..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png
deleted file mode 100644
index a1ab987..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png
deleted file mode 100644
index dcfca3f..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png
deleted file mode 100644
index 7cc4047..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png
deleted file mode 100644
index a97f4ad..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png
deleted file mode 100644
index 7a8c6bd..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png
deleted file mode 100644
index ae47356..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png
deleted file mode 100644
index b3a7260..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png
deleted file mode 100644
index 9877b92..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png
deleted file mode 100644
index 603bd24..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png
deleted file mode 100644
index 5fdfbb8..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png
deleted file mode 100644
index a1ab987..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png
deleted file mode 100644
index 9ccf9b0..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png
deleted file mode 100644
index 6b40e1b..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png
deleted file mode 100644
index 2fda36d..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml
deleted file mode 100644
index f47179d..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml
+++ /dev/null
@@ -1,3079 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 32
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 48
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 64
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 80
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 96
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 112
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 128
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 144
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 160
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 176
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 192
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 208
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 224
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 240
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 256
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 272
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 288
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 304
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 320
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 336
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 352
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 368
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 384
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 400
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 416
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 432
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 448
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 464
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 480
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 496
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 512
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 528
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 544
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 560
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 576
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 592
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 608
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 624
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 640
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 656
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 672
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 688
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 704
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 720
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 736
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 752
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 768
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 784
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 800
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 816
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 832
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 848
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 864
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 880
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 896
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 912
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 928
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 944
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 960
- image: "listview.0.png"
- }
- Frame {
- msec: 976
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 992
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1008
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1024
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1040
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1056
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1072
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1088
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1104
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1120
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1136
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1152
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1168
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1184
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1200
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1216
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1232
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1248
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1264
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1280
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1296
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1312
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1328
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1344
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1360
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1376
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1392
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1408
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1424
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1440
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1456
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1472
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1488
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1504
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1520
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1536
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1552
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1568
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1584
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1600
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1616
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1632
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1648
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1664
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1680
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1696
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1712
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1728
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1744
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1760
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1776
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1792
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1808
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1824
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1840
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1856
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1872
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1888
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1904
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1920
- image: "listview.1.png"
- }
- Frame {
- msec: 1936
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1952
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1968
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 1984
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2000
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2016
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2032
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2048
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2064
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2080
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2096
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2112
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2128
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2144
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2160
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2176
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2192
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2208
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2224
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2240
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2256
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2272
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2288
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2304
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2320
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2336
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2352
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2368
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2384
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2400
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2416
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2432
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2448
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2464
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2480
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2496
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2512
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2528
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2544
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2560
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2576
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2592
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 553; y: 267
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2608
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2624
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 554; y: 267
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 555; y: 266
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2640
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 556; y: 265
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 558; y: 260
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2656
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 560; y: 256
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2672
- hash: "c315e184c4dcb11d7e9fd4509a8b6a1f"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 562; y: 250
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 566; y: 234
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2688
- hash: "aeef1cacca9518408519b670443e396f"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 568; y: 216
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2704
- hash: "621626927f83bf7b36b78f5ca7ed4ed0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 572; y: 192
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 572; y: 192
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 2720
- hash: "b2aca965b745e98365195c52b9dd9a2c"
- }
- Frame {
- msec: 2736
- hash: "4cc8c162afcc45c79afd8230893d4ddd"
- }
- Frame {
- msec: 2752
- hash: "b9c0815086393878ad00566db7a3c577"
- }
- Frame {
- msec: 2768
- hash: "23cbc15fce97f966c24e3ec626e01960"
- }
- Frame {
- msec: 2784
- hash: "3a7ce897b47ba39e63be31a020de6f3d"
- }
- Frame {
- msec: 2800
- hash: "2a8a32cd27fad2c57c9eb518c7b3b3ca"
- }
- Frame {
- msec: 2816
- hash: "96d676ad58119430b440a5f0a2215f26"
- }
- Frame {
- msec: 2832
- hash: "5f9cd251615ee6a98470a7b6098f7890"
- }
- Frame {
- msec: 2848
- hash: "c9b1c073cbfbf1c353685b3f38baa675"
- }
- Frame {
- msec: 2864
- hash: "cf5bfbfe8904ea40b796d2b33d5cc363"
- }
- Frame {
- msec: 2880
- image: "listview.2.png"
- }
- Frame {
- msec: 2896
- hash: "c75c3342b476f75fc0c5f56a374da13e"
- }
- Frame {
- msec: 2912
- hash: "0dfcd15d21b7e949b56bc69d881c52f5"
- }
- Frame {
- msec: 2928
- hash: "73b7352bb11d29cbf64b6b594e761e42"
- }
- Frame {
- msec: 2944
- hash: "876361c2fc18c2236c1dffd36f517f44"
- }
- Frame {
- msec: 2960
- hash: "0dfaf61e3a86ee056a5d76cf6f7994b2"
- }
- Frame {
- msec: 2976
- hash: "391995cfc5d8d3808b30d74ba5ea3188"
- }
- Frame {
- msec: 2992
- hash: "6fd4f14c16a8870355fa190c94e4be2d"
- }
- Frame {
- msec: 3008
- hash: "0aac04c8092505d934220e61c7959512"
- }
- Frame {
- msec: 3024
- hash: "6cb0fbe22fcd60b5ed6385e49522b32e"
- }
- Frame {
- msec: 3040
- hash: "2eb7fd1a773e32ae94284cf57efaaff2"
- }
- Frame {
- msec: 3056
- hash: "e143ed5eeb94b35ef97e965f34d45e4d"
- }
- Frame {
- msec: 3072
- hash: "529e85f2cd48c1f0d056682b8350445b"
- }
- Frame {
- msec: 3088
- hash: "d74bded985c00ecd192ff8fdce708450"
- }
- Frame {
- msec: 3104
- hash: "f71568b2173f72c4433a019775923c02"
- }
- Frame {
- msec: 3120
- hash: "1185a1c936ac08633c14d39ca9c4f5e9"
- }
- Frame {
- msec: 3136
- hash: "e641720bf75f1e4f0a8471f3a8b35094"
- }
- Frame {
- msec: 3152
- hash: "cecc41fb42abb95505c094829fd415bf"
- }
- Frame {
- msec: 3168
- hash: "7ad89090beb9de3cd7c5a5a03fca900d"
- }
- Frame {
- msec: 3184
- hash: "2a98fe4406367d4e286d8932d6a21318"
- }
- Frame {
- msec: 3200
- hash: "9aad024b2fc25ce886ccaa4ac106b1d8"
- }
- Frame {
- msec: 3216
- hash: "3c4a787a4d590efd2e72706e40df7b6d"
- }
- Frame {
- msec: 3232
- hash: "1135e06c2981bdaed13c13400e178dc3"
- }
- Frame {
- msec: 3248
- hash: "1fbceedf1c20f2aa3f05be36126280e2"
- }
- Frame {
- msec: 3264
- hash: "5d1ec83f43b649c732cc3f7815100428"
- }
- Frame {
- msec: 3280
- hash: "27501f6b6adccfdb77a5228611e2a95a"
- }
- Frame {
- msec: 3296
- hash: "218dc244352c14467f2b2a39d78a1bc7"
- }
- Frame {
- msec: 3312
- hash: "33a998563d2c053e375f619b7a75a224"
- }
- Frame {
- msec: 3328
- hash: "02d34b79e25367e6d0dc1765cab12353"
- }
- Frame {
- msec: 3344
- hash: "2698cf68138aa7d292167bcc85f60b74"
- }
- Frame {
- msec: 3360
- hash: "0b33e929b420596ff1dce2eeef8480db"
- }
- Frame {
- msec: 3376
- hash: "d8ec307a85cecaacaa908ceb34d5db5b"
- }
- Frame {
- msec: 3392
- hash: "4afe1df3e802b41d1b89b5fab4e35190"
- }
- Frame {
- msec: 3408
- hash: "e8f484ed8d2a6745ee87ac9544281d55"
- }
- Frame {
- msec: 3424
- hash: "6df053920e87d7e6e3ec0368b4b14c25"
- }
- Frame {
- msec: 3440
- hash: "6e94791acce321417a37132821c0260d"
- }
- Frame {
- msec: 3456
- hash: "fea3e31cbf3078615f57c934197dac35"
- }
- Frame {
- msec: 3472
- hash: "e8d15890a8bd95db39889d19f046901b"
- }
- Frame {
- msec: 3488
- hash: "038b422b154dfef2d955b833892c581e"
- }
- Frame {
- msec: 3504
- hash: "01180b3d9b504ca2814382eadaf3a4e0"
- }
- Frame {
- msec: 3520
- hash: "869a0aa0d67043822c65383e0f3264d4"
- }
- Frame {
- msec: 3536
- hash: "43785b1214510c10b65018a9d68a93b1"
- }
- Frame {
- msec: 3552
- hash: "95e6ebc35c2fb128b6e6ac0743268523"
- }
- Frame {
- msec: 3568
- hash: "f8c22a6ca3169de4d29b3b0e2908f581"
- }
- Frame {
- msec: 3584
- hash: "6baf16c321847d269718bcb3468aeeb2"
- }
- Frame {
- msec: 3600
- hash: "30804b5eb2a6d99116475cbdc1a9c043"
- }
- Frame {
- msec: 3616
- hash: "c892c17ec947a910b74f5b8704405e9f"
- }
- Frame {
- msec: 3632
- hash: "696029b77512943001c9eba64191e633"
- }
- Frame {
- msec: 3648
- hash: "4c26bb0ca28d74a2bb79d0bfc8127361"
- }
- Frame {
- msec: 3664
- hash: "6e8c50cc14c9afe73b4baf09a6a8f1a4"
- }
- Frame {
- msec: 3680
- hash: "fd20e4259b44357c93f22f35c698fe1b"
- }
- Frame {
- msec: 3696
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3712
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3728
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3744
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3760
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3776
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3792
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3808
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3824
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3840
- image: "listview.3.png"
- }
- Frame {
- msec: 3856
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3872
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3888
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3904
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3920
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3936
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3952
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3968
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 3984
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4000
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4016
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4032
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4048
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4064
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4080
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4096
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4112
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4128
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Frame {
- msec: 4144
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 521; y: 24
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4160
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 25
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4176
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 32
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 37
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4192
- hash: "a5df688148c264de1d376c9b87ddfa6b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 46
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4208
- hash: "a4e2c1878b0afce0ee1eebd63e9c951a"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 66
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 88
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4224
- hash: "2f9a79278d492790ef86a09c77e95ff4"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 531; y: 136
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 531; y: 136
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4240
- hash: "5b5ce7206b26528157c426f4e1e3e0a8"
- }
- Frame {
- msec: 4256
- hash: "65a1e5f81ab89b163aed46b984cca45e"
- }
- Frame {
- msec: 4272
- hash: "e28253ad5a2415251b68bcda1d7d4bd0"
- }
- Frame {
- msec: 4288
- hash: "71aae5abb4a9e9077053ea21dd3ec315"
- }
- Frame {
- msec: 4304
- hash: "33fcea38fc3b328b3294f9ac2a26aa1a"
- }
- Frame {
- msec: 4320
- hash: "6299eb1d87f371966307668b92de6a0b"
- }
- Frame {
- msec: 4336
- hash: "4f66d8c7cb6971d0fc24089d123c547b"
- }
- Frame {
- msec: 4352
- hash: "d9906d61b31fabf968290ebcd6688f34"
- }
- Frame {
- msec: 4368
- hash: "5a1945993ff8096ba6b933d45586044a"
- }
- Frame {
- msec: 4384
- hash: "331535e54da9bbdbc2fbf2b244ad0199"
- }
- Frame {
- msec: 4400
- hash: "4dc39de0c54f6e0b77f94f6ae6c345ec"
- }
- Frame {
- msec: 4416
- hash: "ec309a298ce246c13eb666488eb75016"
- }
- Frame {
- msec: 4432
- hash: "a133819f8adc6265eb0e438261c869e3"
- }
- Frame {
- msec: 4448
- hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37"
- }
- Frame {
- msec: 4464
- hash: "620dd1c3fc41ce657eac9d1a5b765fd4"
- }
- Frame {
- msec: 4480
- hash: "ff1c370bd1bf75a98ae7125e7dd5a9db"
- }
- Frame {
- msec: 4496
- hash: "59c6e4297109b5cc7c197749867dddae"
- }
- Frame {
- msec: 4512
- hash: "91b1719e86529d0c35a53a2d0a095dd6"
- }
- Frame {
- msec: 4528
- hash: "2994663d35c9eb453a27c1a1fa9aeeb8"
- }
- Frame {
- msec: 4544
- hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e"
- }
- Frame {
- msec: 4560
- hash: "a98340236d1b65f47e88684168c1429d"
- }
- Frame {
- msec: 4576
- hash: "34848b483ea6a2bd412e29d26beb3ab0"
- }
- Frame {
- msec: 4592
- hash: "dd9bae0e2fca84b265d8cb59686ff88d"
- }
- Frame {
- msec: 4608
- hash: "18b6ef6f5913b0612b76e7b2e25073dd"
- }
- Frame {
- msec: 4624
- hash: "9398aab9478279aed1bc40c9378f8da4"
- }
- Frame {
- msec: 4640
- hash: "a297a304c12102f23bd1e0f0207e0df9"
- }
- Frame {
- msec: 4656
- hash: "091db9138cd6ae801ad857105a83c8f9"
- }
- Frame {
- msec: 4672
- hash: "253938ca4a4f13433ddd502eb94cb7cd"
- }
- Frame {
- msec: 4688
- hash: "6002df1793d290e4e31ee0c91c37bbe6"
- }
- Frame {
- msec: 4704
- hash: "212476fa1c3a52fb8eba03ec3aecdcd8"
- }
- Frame {
- msec: 4720
- hash: "80d4d8434d4e96a2bc23f5ed060d6ddc"
- }
- Frame {
- msec: 4736
- hash: "2d4add725f31a04558635ce4b73a758a"
- }
- Frame {
- msec: 4752
- hash: "57c06022ec1e502c4f49f43063c433e7"
- }
- Frame {
- msec: 4768
- hash: "8393e97990993f9d5f68ea65f8e4a2db"
- }
- Frame {
- msec: 4784
- hash: "9a1fcd96dffaf5c79ecc7f9427e02499"
- }
- Frame {
- msec: 4800
- image: "listview.4.png"
- }
- Frame {
- msec: 4816
- hash: "5ae722cf541e3453e73bbee57dc379e9"
- }
- Frame {
- msec: 4832
- hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8"
- }
- Frame {
- msec: 4848
- hash: "f22a2a68cea158f333b0457025d75490"
- }
- Frame {
- msec: 4864
- hash: "d684c8aa9b835779080f170cafead40f"
- }
- Frame {
- msec: 4880
- hash: "dd451e5e421f929d015981bc7aeb8c66"
- }
- Frame {
- msec: 4896
- hash: "d066f228295db7f46520495167d3e946"
- }
- Frame {
- msec: 4912
- hash: "ebf640a457e3498bade3220aafa70331"
- }
- Frame {
- msec: 4928
- hash: "190f5b1f3ce9d200790c34c50bcc62c5"
- }
- Frame {
- msec: 4944
- hash: "9d4ad865246eb008afa40740b5c9a208"
- }
- Frame {
- msec: 4960
- hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f"
- }
- Frame {
- msec: 4976
- hash: "24acc300307e71bee79bce8de76f56cb"
- }
- Frame {
- msec: 4992
- hash: "1f9d31f94cfce6f868bfcc8a104d2465"
- }
- Frame {
- msec: 5008
- hash: "7a3cab008dcb7a893ae30797b33df6f2"
- }
- Frame {
- msec: 5024
- hash: "38d561a2950434e59513439c7f1120ea"
- }
- Frame {
- msec: 5040
- hash: "8d34131faa15bc126bd4d9ef3be39ef5"
- }
- Frame {
- msec: 5056
- hash: "85d57ef15791b56deb537795dd87911e"
- }
- Frame {
- msec: 5072
- hash: "71e932169915a6c8c2cef0b22febf316"
- }
- Frame {
- msec: 5088
- hash: "8b3452981963aeebadc9ac2013150263"
- }
- Frame {
- msec: 5104
- hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0"
- }
- Frame {
- msec: 5120
- hash: "f53ab533f6a58ae45139f3da4bf8ab4e"
- }
- Frame {
- msec: 5136
- hash: "9ec7012404f3c1c7795810dcee5acc3b"
- }
- Frame {
- msec: 5152
- hash: "99ca43bab532dd5d7566e596c65053ce"
- }
- Frame {
- msec: 5168
- hash: "0af83ad2416821cc230cd2856d1a3e39"
- }
- Frame {
- msec: 5184
- hash: "86fa23ddf2005bbf35238ae04ae554ac"
- }
- Frame {
- msec: 5200
- hash: "bb52a748f1d85dde410cfa4f24e3ed20"
- }
- Frame {
- msec: 5216
- hash: "898b96bc5ee9a3ac61764e5cd9af8cfb"
- }
- Frame {
- msec: 5232
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5248
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5264
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5280
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5296
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5312
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5328
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5344
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5360
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5376
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5392
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5408
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5424
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5440
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5456
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5472
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5488
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5504
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5520
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5536
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5552
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5568
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5584
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5600
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5616
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5632
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5648
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5664
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5680
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5696
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5712
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5728
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5744
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5760
- image: "listview.5.png"
- }
- Frame {
- msec: 5776
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5792
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5808
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5824
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5840
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5856
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5872
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5888
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5904
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5920
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5936
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5952
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 5968
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 111; y: 230
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 111; y: 227
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5984
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 111; y: 223
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6000
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 111; y: 216
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 111; y: 210
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6016
- hash: "0076b55d3da4ca365688b6a2c984103f"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 112; y: 205
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6032
- hash: "db846ad8e3200ca1fce36a38dc7beab8"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 112; y: 192
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6048
- hash: "3cb6b25725b4285f9c096d595224c5ca"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 111; y: 180
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6064
- hash: "1832e12fdf3b464b02b296e727b33694"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 110; y: 173
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6080
- hash: "6d18d2b5f65cbba4915d0725d24b40f3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 109; y: 158
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 107; y: 140
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6096
- hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 103; y: 124
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6112
- hash: "4436f2d15304c839aacec486c1fd6d96"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 111
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6128
- hash: "c3bffc7c95893cf9bbd8596208b7f657"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 105
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 100
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6144
- hash: "04231c2fdc02729aa34ed4e403dd373b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 96
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6160
- hash: "392d75c4b372825e78366eb63a618170"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 87
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 102; y: 83
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6176
- hash: "7f91f7bdb0cb62d600ac4aa573681fe3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 102; y: 79
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6192
- hash: "69207181a382650c5e33145555f0d9ba"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 103; y: 76
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 103; y: 72
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6208
- hash: "65a184b5c49b02e08114e437483f928d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 104; y: 68
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 105; y: 64
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6224
- hash: "c22da9ce54d04f51fb55da755753a509"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 105; y: 61
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6240
- hash: "59dbd5216847a62f60a1d0701a15bb62"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 106; y: 57
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 106; y: 53
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6256
- hash: "bbfc902db6e6ca253afb1c90306b2a63"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 106; y: 47
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 106; y: 47
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 6272
- hash: "5c41f194afec5f7e3db9d98673d03d5c"
- }
- Frame {
- msec: 6288
- hash: "deb06d0f915d5f6ec39b1820d57b6af6"
- }
- Frame {
- msec: 6304
- hash: "deb06d0f915d5f6ec39b1820d57b6af6"
- }
- Frame {
- msec: 6320
- hash: "2a1a1f9239a6ccb308e51796f9b0bb89"
- }
- Frame {
- msec: 6336
- hash: "3c1b44201616b8271023bf05a3f3f0f7"
- }
- Frame {
- msec: 6352
- hash: "87afcef49db8b2b547e85e834f8ec304"
- }
- Frame {
- msec: 6368
- hash: "290081b4b1272ef09ec9964c128e61b5"
- }
- Frame {
- msec: 6384
- hash: "19bb3b23ee4b14a5f0a313106ef7c8c1"
- }
- Frame {
- msec: 6400
- hash: "65a184b5c49b02e08114e437483f928d"
- }
- Frame {
- msec: 6416
- hash: "832d2aefbcaf776f35039be527d367c5"
- }
- Frame {
- msec: 6432
- hash: "69207181a382650c5e33145555f0d9ba"
- }
- Frame {
- msec: 6448
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6464
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6480
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6496
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6512
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6528
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6544
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6560
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6576
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6592
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6608
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6624
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6640
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6656
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6672
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6688
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6704
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6720
- image: "listview.6.png"
- }
- Frame {
- msec: 6736
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6752
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6768
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6784
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6800
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6816
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6832
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6848
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6864
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6880
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6896
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6912
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6928
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6944
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6960
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6976
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 6992
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7008
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7024
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7040
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7056
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7072
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7088
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7104
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7120
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7136
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7152
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7168
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7184
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7200
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7216
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7232
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7248
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7264
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7280
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Frame {
- msec: 7296
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 519; y: 276
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7312
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 519; y: 275
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7328
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 519; y: 274
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7344
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 273
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 272
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7360
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 271
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7376
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 268
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7392
- hash: "89fe95733476bd000457e36ee4ecfc73"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 266
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 265
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7408
- hash: "9047f597b9e59ca652c172338bed6ef9"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 262
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7424
- hash: "87476f78daecd6bb49e8d6e673d28100"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 260
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7440
- hash: "6bfd895c6b7d97e4102eb26608cdfeca"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 254
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7456
- hash: "e4c2b75beaee54a5781a5acbeb37ea64"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 249
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7472
- hash: "d5e816768e9c3db0631416bd86b1b461"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 243
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7488
- hash: "df6c7252ebb51e7447396b640e1c6ead"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 237
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7504
- hash: "5f4db5386dc76b9f2dac47618c733dee"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 231
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7520
- hash: "534d1d16d8321996969b54875ec5f1e0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 225
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7536
- hash: "5263016e53327df1972498b55a60c0ed"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 517; y: 219
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7552
- hash: "6787a5a16d2a61643bb1435f6488ada6"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 518; y: 215
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7568
- hash: "1feabcd683590c3d28d899167e6278b3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 519; y: 208
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7584
- hash: "c0495d6083b2e4ddd2b1dca2f231529c"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 520; y: 202
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7600
- hash: "cb302493a17c1806dfcdf002c44e7acd"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 196
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7616
- hash: "f3822b79b678532ce7f826952636be90"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 189
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7632
- hash: "6e30eed182c38be110ba9c7e95b223be"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 185
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7648
- hash: "9e3ad0331c0c041b9a5747a1d44a43fe"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 177
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7664
- hash: "791e6abf9dae670770c2429ee9f1ad71"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 169
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7680
- image: "listview.7.png"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 160
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7696
- hash: "d3ae366fb8212cb987e23150802c88e3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 156
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7712
- hash: "b87708e19d7e8b64fe1ab50ec1723975"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 147
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7728
- hash: "512678e45cdd8d48e10b08ee020afe8e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 144
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7744
- hash: "211aa70e813819d476996b3396e9e5a0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 137
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7760
- hash: "f16eaa360604be84ce61364ad9733b52"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 130
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7776
- hash: "d3af36dfb187d08abe1458f186a935a2"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 124
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7792
- hash: "9d0a0ba1deb7c4a4a8838e5e6a27f2f6"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 122
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7808
- hash: "69aac14f4c137e66724ca33f00a86676"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 116
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7824
- hash: "893d56e2a2ca257fae9f0c6c0629903d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 111
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7840
- hash: "b9f734e57a72e33973740a59776948d9"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 106
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7856
- hash: "e4b0f3f6a6785d7a183e4a36c5803301"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 104
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7872
- hash: "99ee1e8803c05e546a721b0c9ee39499"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 101
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7888
- hash: "96e7da2f895500a786ed36cb295e9003"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 99
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7904
- hash: "cd369fc5dc31814208e56cf7cd0decea"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 97
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 7920
- hash: "5fee72994b65a45b4900a3073f86a3e1"
- }
- Frame {
- msec: 7936
- hash: "9a2f8a65d842b8f92998e6411f7cd53c"
- }
- Frame {
- msec: 7952
- hash: "2848d69017ce71ae101ccdfa7c67f933"
- }
- Frame {
- msec: 7968
- hash: "6568aa88e81f988f65da435df7166167"
- }
- Frame {
- msec: 7984
- hash: "d5f15ee08a2d7667786757a378a7a7f4"
- }
- Frame {
- msec: 8000
- hash: "9b566bd02a561b32d1a4c1ec99c2e2c3"
- }
- Frame {
- msec: 8016
- hash: "580419e1c9e91046547d913f6b8790a4"
- }
- Frame {
- msec: 8032
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
- }
- Frame {
- msec: 8048
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
- }
- Frame {
- msec: 8064
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 521; y: 97
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 8080
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
- }
- Frame {
- msec: 8096
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
- }
- Frame {
- msec: 8112
- hash: "83b91a371d682a501bc3a3fceabe4f8c"
- }
- Frame {
- msec: 8128
- hash: "798b1dbfa0cce362213f426e2c60ac0e"
- }
- Frame {
- msec: 8144
- hash: "d71b6a693c430a618c23413cb65bb320"
- }
- Frame {
- msec: 8160
- hash: "2baae394390da39447a67151bc503d65"
- }
- Frame {
- msec: 8176
- hash: "06688b05c61a7b862d39534207a8adab"
- }
- Frame {
- msec: 8192
- hash: "a1d3042e16709817906dcdc673ee52c7"
- }
- Frame {
- msec: 8208
- hash: "236dd41feac1b1a8a4bd7911bb184da2"
- }
- Frame {
- msec: 8224
- hash: "f3ec821bba1d32e90bdab0e85c07d7d8"
- }
- Frame {
- msec: 8240
- hash: "e328c35adf7ffc3d7e3af97e798ec8a5"
- }
- Frame {
- msec: 8256
- hash: "651101db68fd3ed1dc5f441c126dc31b"
- }
- Frame {
- msec: 8272
- hash: "651101db68fd3ed1dc5f441c126dc31b"
- }
- Frame {
- msec: 8288
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8304
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8320
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8336
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8352
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8368
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8384
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8400
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8416
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8432
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8448
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8464
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8480
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8496
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8512
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8528
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8544
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8560
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8576
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8592
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8608
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8624
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8640
- image: "listview.8.png"
- }
- Frame {
- msec: 8656
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8672
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8688
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8704
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8720
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8736
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8752
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8768
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8784
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8800
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8816
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8832
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8848
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8864
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8880
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8896
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8912
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8928
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8944
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8960
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8976
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 8992
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9008
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9024
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9040
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9056
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9072
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9088
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9104
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9120
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9136
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9152
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9168
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9184
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9200
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9216
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9232
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9248
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9264
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9280
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9296
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9312
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9328
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9344
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9360
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9376
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9392
- hash: "1171be123a361d72859c25434573482c"
- }
- Frame {
- msec: 9408
- hash: "1171be123a361d72859c25434573482c"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml
deleted file mode 100644
index b291ea4..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml
+++ /dev/null
@@ -1,159 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 32
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 48
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 64
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 80
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 96
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 112
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 128
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 144
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 160
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 176
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 192
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 208
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 224
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 240
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 256
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 272
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 288
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 304
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 320
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 336
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 352
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 368
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 384
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 400
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 416
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 432
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 448
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 464
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 480
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 496
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 512
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 528
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 544
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 560
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 576
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml
deleted file mode 100644
index e32e9e6..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml
+++ /dev/null
@@ -1,187 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 32
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 48
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 64
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 80
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 96
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 112
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 128
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 144
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 160
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 176
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 192
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 208
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 224
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 240
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 256
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 272
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 288
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 304
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 320
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 336
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 352
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 368
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 384
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 400
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 416
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 432
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 448
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 464
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 480
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 496
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 512
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 528
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 544
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 560
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 576
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 592
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 608
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 624
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 640
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 656
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 672
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 688
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml
deleted file mode 100644
index ed0c53b..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml
+++ /dev/null
@@ -1,147 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 32
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 48
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 64
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 80
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 96
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 112
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 128
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 144
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 160
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 176
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 192
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 208
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 224
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 240
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 256
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 272
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 288
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 304
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 320
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 336
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 352
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 368
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 384
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 400
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 416
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 432
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 448
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 464
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 480
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 496
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 512
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 528
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml
deleted file mode 100644
index a70b741..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml
+++ /dev/null
@@ -1,171 +0,0 @@
-import Qt.VisualTest 4.7
-
-VisualTest {
- Frame {
- msec: 0
- }
- Frame {
- msec: 16
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 32
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 48
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 64
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 80
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 96
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 112
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 128
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 144
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 160
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 176
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 192
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 208
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 224
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 240
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 256
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 272
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 288
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 304
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 320
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 336
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 352
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 368
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 384
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 400
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 416
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 432
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 448
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 464
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 480
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 496
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 512
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 528
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 0
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 544
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 560
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 576
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 592
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 608
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
- Frame {
- msec: 624
- hash: "c0dc2737283d8dfa62631e0cbb948b99"
- }
-}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic1.0.png b/tests/auto/declarative/qmlvisual/ListView/data/basic1.0.png
new file mode 100644
index 0000000..049d9c8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic1.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml
index 7aadf36..aad4858 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml
@@ -6,154 +6,6 @@ VisualTest {
}
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"
+ image: "basic1.0.png"
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic2.0.png b/tests/auto/declarative/qmlvisual/ListView/data/basic2.0.png
new file mode 100644
index 0000000..049d9c8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic2.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml
index 5624d6b..373ad27 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml
@@ -6,182 +6,6 @@ VisualTest {
}
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"
+ image: "basic2.0.png"
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic3.0.png b/tests/auto/declarative/qmlvisual/ListView/data/basic3.0.png
new file mode 100644
index 0000000..049d9c8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic3.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml
index 16a8329..f5dbf65 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml
@@ -6,142 +6,6 @@ VisualTest {
}
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"
+ image: "basic3.0.png"
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic4.0.png b/tests/auto/declarative/qmlvisual/ListView/data/basic4.0.png
new file mode 100644
index 0000000..049d9c8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic4.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml
index 23cc255..5e494d1 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml
@@ -6,166 +6,6 @@ VisualTest {
}
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"
+ image: "basic4.0.png"
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.0.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.0.png
new file mode 100644
index 0000000..5c0b6a6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.1.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.1.png
new file mode 100644
index 0000000..5c0b6a6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.2.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.2.png
new file mode 100644
index 0000000..304aed8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.3.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.3.png
new file mode 100644
index 0000000..4abc58e
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.4.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.4.png
new file mode 100644
index 0000000..5c0b6a6
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.5.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.5.png
new file mode 100644
index 0000000..8d421af
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.6.png b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.6.png
new file mode 100644
index 0000000..81ea1ff
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.qml b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.qml
new file mode 100644
index 0000000..de3f49c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/enforcerange.qml
@@ -0,0 +1,2119 @@
+import Qt.VisualTest 4.7
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ image: "enforcerange.0.png"
+ }
+ Frame {
+ msec: 32
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 48
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 64
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 80
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 96
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 112
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 128
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 144
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 160
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 176
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 192
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 208
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 224
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 240
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 256
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 272
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 288
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 304
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 320
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 336
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 352
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 368
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 384
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 400
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 416
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 432
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 448
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 464
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 480
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 496
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 512
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 528
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 544
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 560
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 576
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 592
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 608
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 624
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 640
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 656
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 672
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 688
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 704
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 720
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 736
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 752
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 768
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 784
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 800
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 816
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 832
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 848
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 864
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 880
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 896
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 912
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 928
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 944
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 960
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 976
+ image: "enforcerange.1.png"
+ }
+ Frame {
+ msec: 992
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1008
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1024
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1040
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1056
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1072
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1088
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1104
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1120
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1136
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1152
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1168
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1184
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1200
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 77; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1216
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1232
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 1248
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 77; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1264
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 77; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 76; y: 151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1280
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 75; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 74; y: 136
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1296
+ hash: "c7667b5af9f2ee912abe5879266cb1e0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 73; y: 131
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 72; y: 122
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1312
+ hash: "1e762d6ffe1ceb53046d7953645d02d5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 118
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 111
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1328
+ hash: "0d2b7130a84a8efac1cf4fe8a1768231"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 102
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1344
+ hash: "6ef2715c3fd26d50d26fb740afa6dece"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 98
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 71; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 71; y: 92
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 1360
+ hash: "f489b6f951281ff9a981ec046ca5b17d"
+ }
+ Frame {
+ msec: 1376
+ hash: "fd6e7d7db7c4571ee606269fb9680ed9"
+ }
+ Frame {
+ msec: 1392
+ hash: "398a238f59a2edf07870b624b914c81d"
+ }
+ Frame {
+ msec: 1408
+ hash: "fdce64faab7e7e31a229adda47924cd1"
+ }
+ Frame {
+ msec: 1424
+ hash: "8d474956331fdd0c35beb13a06b7c557"
+ }
+ Frame {
+ msec: 1440
+ hash: "f89fed6f7fa07a8320f07a1e68240a7e"
+ }
+ Frame {
+ msec: 1456
+ hash: "940b70f15082ff138579892bb6f20ce9"
+ }
+ Frame {
+ msec: 1472
+ hash: "35ab744ce2a91567dbbd769f9486f870"
+ }
+ Frame {
+ msec: 1488
+ hash: "6b2d32b8f1df871c2c014af8b5d87329"
+ }
+ Frame {
+ msec: 1504
+ hash: "edf3b33b80cca53999779555f9cd6162"
+ }
+ Frame {
+ msec: 1520
+ hash: "180f3cc4ea5ff5b6f9e8be0294732d4e"
+ }
+ Frame {
+ msec: 1536
+ hash: "28e9ca60a873910380b2d22d6b3df565"
+ }
+ Frame {
+ msec: 1552
+ hash: "3bb1e8d69f171f09eb4c6f9914fc9576"
+ }
+ Frame {
+ msec: 1568
+ hash: "0501da09be444df6cee4b19617290317"
+ }
+ Frame {
+ msec: 1584
+ hash: "8ce1ac0163b0353167488aff2879e841"
+ }
+ Frame {
+ msec: 1600
+ hash: "18e53bf6337cf6590fc3c73c00469d8e"
+ }
+ Frame {
+ msec: 1616
+ hash: "0c31ede980d07069f4977d5753d00ddf"
+ }
+ Frame {
+ msec: 1632
+ hash: "0a854a54176c24f0ebbb6cb747dc0ab7"
+ }
+ Frame {
+ msec: 1648
+ hash: "8dba1ebca6f00b7a64a6982fb8c28c50"
+ }
+ Frame {
+ msec: 1664
+ hash: "8d273efc36ba722af4d044e6552c9dcb"
+ }
+ Frame {
+ msec: 1680
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 1696
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 1712
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 1728
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 1744
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 1760
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 1776
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 1792
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 1808
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 1824
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 1840
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 1856
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 1872
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 1888
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 1904
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 1920
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 1936
+ image: "enforcerange.2.png"
+ }
+ Frame {
+ msec: 1952
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 1968
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 1984
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2000
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2016
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 2032
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 2048
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 2064
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 2080
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 2096
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 2112
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 2128
+ hash: "711274e9b6811b4662ac29d813574fb6"
+ }
+ Frame {
+ msec: 2144
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 2160
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 2176
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 2192
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 2208
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 2224
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 2240
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2256
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2272
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 2288
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 2304
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 2320
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 2336
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 2352
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 2368
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 2384
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 2400
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2416
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2432
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2448
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2464
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2480
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2496
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2512
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2528
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2544
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2560
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2576
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2592
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2608
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2624
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2640
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 2656
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2672
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2688
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 2704
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 2720
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 2736
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 2752
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 2768
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 2784
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 2800
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 2816
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2832
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2848
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2864
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2880
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2896
+ image: "enforcerange.3.png"
+ }
+ Frame {
+ msec: 2912
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2928
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2944
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2960
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2976
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 2992
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 3008
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 3024
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 82; y: 39
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3040
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 3056
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 82; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3072
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 82; y: 42
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3088
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 47
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 55
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3104
+ hash: "89016574205e00cf42723446d6a3437e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 60
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 81; y: 69
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3120
+ hash: "e2db9b1ae5c4be51a548834a7776da1f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 80; y: 75
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 80; y: 87
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3136
+ hash: "fcfad57224192065782a77ad3398d0d1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 80; y: 93
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 80; y: 107
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3152
+ hash: "bae4fc0fc2d33008ebe827ece94af196"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 84; y: 130
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 88; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3168
+ hash: "569581944bf18c8165f72c60bdbf1011"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 96; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 96; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 3184
+ hash: "613ff94a26bfaa9a4dc94fcbf6c3eb57"
+ }
+ Frame {
+ msec: 3200
+ hash: "a63f8e6b194f900acb1b7a332f9fb9ae"
+ }
+ Frame {
+ msec: 3216
+ hash: "6c04761cc86d28112c16f692cda58ba4"
+ }
+ Frame {
+ msec: 3232
+ hash: "544275da3f7e2ccaedc8c521bf17f59b"
+ }
+ Frame {
+ msec: 3248
+ hash: "52831480eb69184341b12ffb09ace736"
+ }
+ Frame {
+ msec: 3264
+ hash: "52831480eb69184341b12ffb09ace736"
+ }
+ Frame {
+ msec: 3280
+ hash: "52831480eb69184341b12ffb09ace736"
+ }
+ Frame {
+ msec: 3296
+ hash: "58f2b900bc335424fc70eaaeb23ceb56"
+ }
+ Frame {
+ msec: 3312
+ hash: "58f2b900bc335424fc70eaaeb23ceb56"
+ }
+ Frame {
+ msec: 3328
+ hash: "544275da3f7e2ccaedc8c521bf17f59b"
+ }
+ Frame {
+ msec: 3344
+ hash: "df9fef370c2f6ff300b20fc24b5b9e34"
+ }
+ Frame {
+ msec: 3360
+ hash: "0662898d246e5ff6981610d32e2b8375"
+ }
+ Frame {
+ msec: 3376
+ hash: "6c04761cc86d28112c16f692cda58ba4"
+ }
+ Frame {
+ msec: 3392
+ hash: "82b31c8e8794ce3a9a6a635ef93b29b3"
+ }
+ Frame {
+ msec: 3408
+ hash: "388658b5e03f3853e93173bd9501b77b"
+ }
+ Frame {
+ msec: 3424
+ hash: "cf1856e961e6b8277a82c03ace5ba864"
+ }
+ Frame {
+ msec: 3440
+ hash: "e1d022cc1b41098baffe49925b20678f"
+ }
+ Frame {
+ msec: 3456
+ hash: "a63f8e6b194f900acb1b7a332f9fb9ae"
+ }
+ Frame {
+ msec: 3472
+ hash: "044c3712a6a5f6a973defe85643c8d02"
+ }
+ Frame {
+ msec: 3488
+ hash: "044c3712a6a5f6a973defe85643c8d02"
+ }
+ Frame {
+ msec: 3504
+ hash: "e4fe2f1a81a4a4806f4155807f285a2d"
+ }
+ Frame {
+ msec: 3520
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3536
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3552
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3568
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3584
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3600
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3616
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3632
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3648
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3664
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3680
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3696
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3712
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3728
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3744
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3760
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3776
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3792
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3808
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3824
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3840
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3856
+ image: "enforcerange.4.png"
+ }
+ Frame {
+ msec: 3872
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3888
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3904
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3920
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3936
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3952
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3968
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 3984
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 4000
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 4016
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Frame {
+ msec: 4032
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 105; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4048
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 168
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4064
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 164
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 163
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4080
+ hash: "19c43fcf2875769c9a15f1ce317a0f1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4096
+ hash: "331164730fb7ccf37dc08ddc26c0e182"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 107; y: 156
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4112
+ hash: "73e27ff972eefc421bc65897ad8b9a11"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 108; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4128
+ hash: "c5e903fd827f8f1ec060dcb9a925bf6d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 109; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4144
+ hash: "74d4357dff4d6e00c5ae9ea0c34f1010"
+ }
+ Frame {
+ msec: 4160
+ hash: "790274ee21ba257b84671a6fb19c142f"
+ }
+ Frame {
+ msec: 4176
+ hash: "65ccc26f20be484fefa8ea25a7daf825"
+ }
+ Frame {
+ msec: 4192
+ hash: "e435e2fbba7f0f6a65b9fecf07893eb0"
+ }
+ Frame {
+ msec: 4208
+ hash: "6a994a18a9331731d5fca50dce2b9cff"
+ }
+ Frame {
+ msec: 4224
+ hash: "9fc4405cddc06310215969a4583b2353"
+ }
+ Frame {
+ msec: 4240
+ hash: "0d2b7130a84a8efac1cf4fe8a1768231"
+ }
+ Frame {
+ msec: 4256
+ hash: "791db15db47090e1af299e5b32e53918"
+ }
+ Frame {
+ msec: 4272
+ hash: "0ec6cf7a6ed9a073d2ce8f9e534e2ee5"
+ }
+ Frame {
+ msec: 4288
+ hash: "c7b358f51a9500ca4958d266de5307e6"
+ }
+ Frame {
+ msec: 4304
+ hash: "d24d00e4cd1ea3aaacf202e2fdf1eaa0"
+ }
+ Frame {
+ msec: 4320
+ hash: "169f1a7a933d84071c449132a3c2745e"
+ }
+ Frame {
+ msec: 4336
+ hash: "b6bf9c15ed40d6e862f693155c884035"
+ }
+ Frame {
+ msec: 4352
+ hash: "8639955aa7a03f54d50d7e9051a4b997"
+ }
+ Frame {
+ msec: 4368
+ hash: "411bc9a9aedbfb75f3122eaea6be0c16"
+ }
+ Frame {
+ msec: 4384
+ hash: "827094da86716daf69386af2c8d4027a"
+ }
+ Frame {
+ msec: 4400
+ hash: "ddddd5457e4a54ca5e7415dc2c7eabe5"
+ }
+ Frame {
+ msec: 4416
+ hash: "632a5756af20083504fb1faaa019dd48"
+ }
+ Frame {
+ msec: 4432
+ hash: "0cc2901b1b25412f13865887a8c9d13e"
+ }
+ Frame {
+ msec: 4448
+ hash: "4c8a9473eb9843634340d70f8eab9487"
+ }
+ Frame {
+ msec: 4464
+ hash: "398a238f59a2edf07870b624b914c81d"
+ }
+ Frame {
+ msec: 4480
+ hash: "a7c282235e9166b900ea2ff68800a5f5"
+ }
+ Frame {
+ msec: 4496
+ hash: "bae4fc0fc2d33008ebe827ece94af196"
+ }
+ Frame {
+ msec: 4512
+ hash: "45e0670a2b4c18b847a3c7870539b962"
+ }
+ Frame {
+ msec: 4528
+ hash: "8d474956331fdd0c35beb13a06b7c557"
+ }
+ Frame {
+ msec: 4544
+ hash: "5d5bdffc30d90fd5b061c6fcf24c2599"
+ }
+ Frame {
+ msec: 4560
+ hash: "15721b103981f5fe40b5dfe7d65c5b38"
+ }
+ Frame {
+ msec: 4576
+ hash: "940b70f15082ff138579892bb6f20ce9"
+ }
+ Frame {
+ msec: 4592
+ hash: "5137ea98fd291a4b967fb66d93253a37"
+ }
+ Frame {
+ msec: 4608
+ hash: "35ab744ce2a91567dbbd769f9486f870"
+ }
+ Frame {
+ msec: 4624
+ hash: "d5c55c00b07735e5d7c02dfa99ef2f45"
+ }
+ Frame {
+ msec: 4640
+ hash: "6b2d32b8f1df871c2c014af8b5d87329"
+ }
+ Frame {
+ msec: 4656
+ hash: "edf3b33b80cca53999779555f9cd6162"
+ }
+ Frame {
+ msec: 4672
+ hash: "180f3cc4ea5ff5b6f9e8be0294732d4e"
+ }
+ Frame {
+ msec: 4688
+ hash: "9b99a1b0c0bb0ce37655d92854ee4d19"
+ }
+ Frame {
+ msec: 4704
+ hash: "28e9ca60a873910380b2d22d6b3df565"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 109; y: 131
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4720
+ hash: "28e9ca60a873910380b2d22d6b3df565"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 126
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 124
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4736
+ hash: "18e53bf6337cf6590fc3c73c00469d8e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 115
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 110
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4752
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 108; y: 99
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 106; y: 85
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4768
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 103; y: 60
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4784
+ hash: "711274e9b6811b4662ac29d813574fb6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 54
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 100; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 100; y: 40
+ modifiers: 0
+ sendToViewport: true
+ }
+ Frame {
+ msec: 4800
+ hash: "da5a30a6f9f40fbb5e2b150965be8ac0"
+ }
+ Frame {
+ msec: 4816
+ image: "enforcerange.5.png"
+ }
+ Frame {
+ msec: 4832
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 4848
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 4864
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 4880
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 4896
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 4912
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 4928
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 4944
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 4960
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 4976
+ hash: "711274e9b6811b4662ac29d813574fb6"
+ }
+ Frame {
+ msec: 4992
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 5008
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 5024
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 5040
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 5056
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 5072
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 5088
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 5104
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 5120
+ hash: "711274e9b6811b4662ac29d813574fb6"
+ }
+ Frame {
+ msec: 5136
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 5152
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 5168
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 5184
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 5200
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 5216
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5232
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 5248
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 5264
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 5280
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 5296
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 5312
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 5328
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 5344
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 5360
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 5376
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 5392
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 5408
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 5424
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 5440
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 5456
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5472
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 5488
+ hash: "81110f17d191f9795a2c57d136e86550"
+ }
+ Frame {
+ msec: 5504
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 5520
+ hash: "090a76cf068a5041ff993f21e6ebd087"
+ }
+ Frame {
+ msec: 5536
+ hash: "30eb157c89ad0aeb17fd0012afb9246b"
+ }
+ Frame {
+ msec: 5552
+ hash: "6b317b59e1b0f5b17a6d7d96e745f576"
+ }
+ Frame {
+ msec: 5568
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 5584
+ hash: "f9fc8467c6dbcb00d1f41a57b550193c"
+ }
+ Frame {
+ msec: 5600
+ hash: "711274e9b6811b4662ac29d813574fb6"
+ }
+ Frame {
+ msec: 5616
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 5632
+ hash: "744227adbdd31be2920a232ea0dbc85d"
+ }
+ Frame {
+ msec: 5648
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 5664
+ hash: "d4b370ff8c3b66fc8a616dd9b944abd1"
+ }
+ Frame {
+ msec: 5680
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 5696
+ hash: "674b07dc5b99bf2da93c40d42dc9023d"
+ }
+ Frame {
+ msec: 5712
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 5728
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 5744
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 5760
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 5776
+ image: "enforcerange.6.png"
+ }
+ Frame {
+ msec: 5792
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 5808
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 5824
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 5840
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 5856
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 5872
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5888
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5904
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5920
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5936
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 5952
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 5968
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 5984
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6000
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6016
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6032
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6048
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6064
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6080
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6096
+ hash: "b061ee3784fbd4a287758ffd100a623e"
+ }
+ Frame {
+ msec: 6112
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 6128
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 6144
+ hash: "7eb75e8e83874d52448a7dbf6a0ad29c"
+ }
+ Frame {
+ msec: 6160
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 6176
+ hash: "70b475e88060ead84d05f0ba1b47c139"
+ }
+ Frame {
+ msec: 6192
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 6208
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 6224
+ hash: "87aaa82b96131fed8822e57e226162a0"
+ }
+ Frame {
+ msec: 6240
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 6256
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 6272
+ hash: "b64810845a97bedf6fe11c043457c197"
+ }
+ Frame {
+ msec: 6288
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6304
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6320
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6336
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6352
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6368
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6384
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6400
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6416
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6432
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6448
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6464
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6480
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6496
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6512
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6528
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6544
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6560
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6576
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6592
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6608
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6624
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6640
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+ Frame {
+ msec: 6656
+ hash: "a4ff6c6c43697808f9ad7387d152cef3"
+ }
+}
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png
index a1947ca..75d2089 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png
index d27b7fa..75d2089 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png
index fdab8c6..bc7dc2c 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png
index dc321a8..def378f 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png
index fdab8c6..e23b903 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png
index 15b51cb..def378f 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png
index a1947ca..b81e713 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.7.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.7.png
new file mode 100644
index 0000000..75d2089
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml
index 829fbb3..6438e42 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ image: "itemlist.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "itemlist.0.png"
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
}
Frame {
msec: 976
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ image: "itemlist.1.png"
}
Frame {
msec: 992
@@ -478,7 +478,7 @@ VisualTest {
}
Frame {
msec: 1712
- hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ hash: "b6e433a23282a50db2e165a2447ba3f6"
}
Mouse {
type: 5
@@ -498,7 +498,7 @@ VisualTest {
}
Frame {
msec: 1728
- hash: "7cda93e59466b3348e7ffe3895f89e86"
+ hash: "68d443f16c16821ffc9ca68b17c76034"
}
Mouse {
type: 5
@@ -510,7 +510,7 @@ VisualTest {
}
Frame {
msec: 1744
- hash: "06e0008c78e919f7270402938d9d764b"
+ hash: "04b9041c6f10969889d92e94785c7e88"
}
Mouse {
type: 5
@@ -530,7 +530,7 @@ VisualTest {
}
Frame {
msec: 1760
- hash: "9d8da9199efebb95f56e5d4ebc9a585e"
+ hash: "64b902fe7ab4d89ef0c7b760974e3488"
}
Mouse {
type: 5
@@ -550,7 +550,7 @@ VisualTest {
}
Frame {
msec: 1776
- hash: "54a60a4279911ba4a8a5741bcadfa783"
+ hash: "c2125b59e00f1a1c189c778c44fe39b0"
}
Mouse {
type: 5
@@ -570,171 +570,171 @@ VisualTest {
}
Frame {
msec: 1792
- hash: "a1a19370a1a8ed78e475f0d0eb12311c"
+ hash: "c78175071f2e95649d529b9e1cf045b2"
}
Frame {
msec: 1808
- hash: "196a3b127cf7065614c34856bf8d8bca"
+ hash: "ca8ef2c2a7b06e55899b1b63208e257d"
}
Frame {
msec: 1824
- hash: "5fbefbd7c7be4374382cc4c8b86ac78a"
+ hash: "b54957726e6257956b63e1d7ebbc96e4"
}
Frame {
msec: 1840
- hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ hash: "48847db78ddde75bb96edf01c52c3400"
}
Frame {
msec: 1856
- hash: "20e76f0eb4ec5f691999faf8ad313370"
+ hash: "48dab5cd1feedf1b5dd67390d6f40fda"
}
Frame {
msec: 1872
- hash: "7f84a3545907c754ae8a6a30ef61c98d"
+ hash: "fe32013c245091b577d0e38eea05705d"
}
Frame {
msec: 1888
- hash: "b544901eae32903ad054e8cdfed715eb"
+ hash: "e4b6e31029c1ea26405537c6d2304b72"
}
Frame {
msec: 1904
- hash: "a010ed1e3312f4ca9f429b7e32cdcef9"
+ hash: "b5fc9ab0a96ef526e6eb1c022f26c6a7"
}
Frame {
msec: 1920
- image: "itemlist.1.png"
+ hash: "75ab445a739fb2415e20e8997b043656"
}
Frame {
msec: 1936
- hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ image: "itemlist.2.png"
}
Frame {
msec: 1952
- hash: "c73f63d1a024ba956e693487b3ccc761"
+ hash: "1bce9b85235e9a1a472c079dfec70ec5"
}
Frame {
msec: 1968
- hash: "539d3d00fce2d0128cd697d86d237fe7"
+ hash: "98e707a3e39a5f7bd4a101c2ed83535c"
}
Frame {
msec: 1984
- hash: "52752d7d6f2d0e085f7132313907b72b"
+ hash: "f73470027601a0c1a2382d5ded9e5fa6"
}
Frame {
msec: 2000
- hash: "f46dd5803a6075e979e0fc733d503bfb"
+ hash: "d917b18a47b4e90821cba8987492cd1f"
}
Frame {
msec: 2016
- hash: "b8734698a6bad00ecf019f85328c2c21"
+ hash: "fa526c5ef57eaa210fb4d03b72c35b69"
}
Frame {
msec: 2032
- hash: "1cfc499ca756023430cc5b2fa95a599d"
+ hash: "15cbc226b032d5a97199735ea7a1408b"
}
Frame {
msec: 2048
- hash: "63a816548837c19f8f0494c137fc0174"
+ hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
}
Frame {
msec: 2064
- hash: "1bce9b85235e9a1a472c079dfec70ec5"
+ hash: "c009924bfa30153f22ab168b539494e9"
}
Frame {
msec: 2080
- hash: "6677863e7f74c12648409883f73adbe2"
+ hash: "0525908c0302ada989e28990bac3f2ca"
}
Frame {
msec: 2096
- hash: "98e707a3e39a5f7bd4a101c2ed83535c"
+ hash: "75c1295ef99680784b2e11fb88fa1423"
}
Frame {
msec: 2112
- hash: "c1f6d8842d14a9394d4b7797314f50e8"
+ hash: "53064c1938f08a55603a99b0db225174"
}
Frame {
msec: 2128
- hash: "579758b477bcd2112b305a5aac7df338"
+ hash: "99d9e58697736198e0a00443d237e85b"
}
Frame {
msec: 2144
- hash: "4a7bb81090db246db53e2dbc56f710ea"
+ hash: "6c1e860aef983367365d53f5849ad441"
}
Frame {
msec: 2160
- hash: "074995cdd8a70817d1c8a7bb0ad4c542"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2176
- hash: "bd8d7bda4d2e9ad1fba2895d568f36cc"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2192
- hash: "40cce3d2d80ac470af44fc334cec1d5b"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2208
- hash: "15cbc226b032d5a97199735ea7a1408b"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2224
- hash: "12b296aea9b058a5402d0d0a620f8edc"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2240
- hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2256
- hash: "589a58ef76ea709dc8d80390c9044f99"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2272
- hash: "c009924bfa30153f22ab168b539494e9"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2288
- hash: "4b83674a7c2daa68d735901ad40be2bd"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2304
- hash: "0525908c0302ada989e28990bac3f2ca"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2320
- hash: "89eb13976ba3ba4413cafeb0cc91c01b"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2336
- hash: "75c1295ef99680784b2e11fb88fa1423"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2352
- hash: "93d89165cf6a97c76ae6e7f75678a3cd"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2368
- hash: "53064c1938f08a55603a99b0db225174"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2384
- hash: "31db5684466c0c32128a9a8c7b1835e1"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2400
- hash: "99d9e58697736198e0a00443d237e85b"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2416
- hash: "6c1e860aef983367365d53f5849ad441"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2432
- hash: "6c1e860aef983367365d53f5849ad441"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2448
- hash: "6c1e860aef983367365d53f5849ad441"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2464
@@ -850,11 +850,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "itemlist.2.png"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 2896
- hash: "99f9988040a389576cb6420b5391f768"
+ image: "itemlist.3.png"
}
Mouse {
type: 5
@@ -894,7 +894,7 @@ VisualTest {
}
Frame {
msec: 2928
- hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Mouse {
type: 5
@@ -914,7 +914,7 @@ VisualTest {
}
Frame {
msec: 2944
- hash: "b10a6206830a876017799ef2fcf61b1a"
+ hash: "52af1b81022e8572b9123461d123197f"
}
Mouse {
type: 5
@@ -934,7 +934,7 @@ VisualTest {
}
Frame {
msec: 2960
- hash: "b2e24759ba10afd6cff90f4b1e04b496"
+ hash: "e1390ad02ae7a6e757df4a7af9032167"
}
Mouse {
type: 5
@@ -954,11 +954,11 @@ VisualTest {
}
Frame {
msec: 2976
- hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ hash: "bf57f309378c956dfd70aa79a7dd97c5"
}
Frame {
msec: 2992
- hash: "7b31c6d5931677f1aa1e8c7d48a4ff22"
+ hash: "408b59b96ecad0541ecbb97262c2567b"
}
Frame {
msec: 3008
@@ -966,175 +966,175 @@ VisualTest {
}
Frame {
msec: 3024
- hash: "dd639d1df3d4a9b8f06718def63d588f"
+ hash: "9aabf0500b1272375f5f6db1bd1d7b04"
}
Frame {
msec: 3040
- hash: "39d767b09a648ef6295cec2848f9226f"
+ hash: "2e92065ca9425d1645d69c1734804518"
}
Frame {
msec: 3056
- hash: "5dd46d5f386431e7b13348ac9a9630ed"
+ hash: "c73b2e430a0e96a660aa4447697e5adf"
}
Frame {
msec: 3072
- hash: "0354e5183b0e66e7ba146d292c559df4"
+ hash: "875560b509215a869d1cad8a05f38850"
}
Frame {
msec: 3088
- hash: "984aa6d7075e24de429e05b1b0eda94a"
+ hash: "fd8e51cca3432f6edcf949857737095f"
}
Frame {
msec: 3104
- hash: "1af58a2f44f1f613712d4df85e38356d"
+ hash: "aa5d4e65932b3ec2f5549079dfc7718d"
}
Frame {
msec: 3120
- hash: "6e4085e7f1fee724d78808753f04b471"
+ hash: "f811f3c6b022730dd68ebd7b1659ea40"
}
Frame {
msec: 3136
- hash: "73a019ef9057639d631cd99a431b3f3b"
+ hash: "e51a2e41972cfc3df46a7d4375024d80"
}
Frame {
msec: 3152
- hash: "c9414a2e655a90dfdcb6fb288b4ba0ca"
+ hash: "275f3594a0e2cc4b6717f9f336e7e1b6"
}
Frame {
msec: 3168
- hash: "3f4c24f7ac89da982af22032309637fb"
+ hash: "9229054bb70662b12a4f7e45ac5b7a90"
}
Frame {
msec: 3184
- hash: "a50e6ada8f73a257657f4348ceaffcfd"
+ hash: "89ff346eca0b71cad3b04a2cb8064fb0"
}
Frame {
msec: 3200
- hash: "a67bf40d09259bbd079c12ae4f49150f"
+ hash: "94e6ecb87a7efca6344d6d63a1e3829f"
}
Frame {
msec: 3216
- hash: "a2fc512b7c234a9d0b2c1a83387a8a46"
+ hash: "bc5eb6b0eeae316ddd0b308da2cc32e2"
}
Frame {
msec: 3232
- hash: "85090683ce9a3c9833b1cb0b3df076ee"
+ hash: "240081760f0cf2f02be4d6d2600d2bbc"
}
Frame {
msec: 3248
- hash: "275f3594a0e2cc4b6717f9f336e7e1b6"
+ hash: "69b335aeb81fc2ae6173f2ec5cdc4c55"
}
Frame {
msec: 3264
- hash: "2473eb11f7b65a784a2b166114026488"
+ hash: "10d481e57cc8cd694500d9ed6ae1f8bb"
}
Frame {
msec: 3280
- hash: "4865c30dc45fbf5ca82047b77eca0912"
+ hash: "6b21f71d0bedef4bbcb445a13f61e7a3"
}
Frame {
msec: 3296
- hash: "54de88bca395449fbaea2c090c7a5d91"
+ hash: "aa94ebdbb4b8423aff28c95daff0baf5"
}
Frame {
msec: 3312
- hash: "833f9295cf9a34934f001eac48551b59"
+ hash: "5f6708f615654c459f5749676fc09016"
}
Frame {
msec: 3328
- hash: "5bf565f57ababa7380faeee94add91ca"
+ hash: "8ef246d322446e7f0848b99495f89e2b"
}
Frame {
msec: 3344
- hash: "6325578867f1eb3b2d47ed40b017b571"
+ hash: "c3b219bdd7710427d134402a8d3e6429"
}
Frame {
msec: 3360
- hash: "046a6114176b3a3206b7a2acd6e30b41"
+ hash: "3b2e2d957585fb44a7165186a146892c"
}
Frame {
msec: 3376
- hash: "f8d4120a17f28c2d1d9c4be959098058"
+ hash: "124da0099a7dd6fbf6dfd0ecfb09638c"
}
Frame {
msec: 3392
- hash: "71356d2e48aad2900784ea6bc1a3d908"
+ hash: "e4dacafba5ab5f8db53f08cef458cf42"
}
Frame {
msec: 3408
- hash: "b84ad460fb81fdc4049abe8f3ff180bb"
+ hash: "b554512bac0766063870c5b3acb1d24f"
}
Frame {
msec: 3424
- hash: "0354239f5eaea23474d9f81385392a8a"
+ hash: "bb5ea2a238920a8486263bc7450edfb4"
}
Frame {
msec: 3440
- hash: "8ef0eef3393e07ae7605c865a95edc30"
+ hash: "bb5ea2a238920a8486263bc7450edfb4"
}
Frame {
msec: 3456
- hash: "5b8b384cc8e3faf4310015e19b3eb487"
+ hash: "bb5ea2a238920a8486263bc7450edfb4"
}
Frame {
msec: 3472
- hash: "77c18ac7dfff2a4e516915e3e3df0717"
+ hash: "b554512bac0766063870c5b3acb1d24f"
}
Frame {
msec: 3488
- hash: "c1d3264384c26345eb8100de829309ca"
+ hash: "b554512bac0766063870c5b3acb1d24f"
}
Frame {
msec: 3504
- hash: "6b21f71d0bedef4bbcb445a13f61e7a3"
+ hash: "e4dacafba5ab5f8db53f08cef458cf42"
}
Frame {
msec: 3520
- hash: "f619097356671f6eb54d3b1c481e709d"
+ hash: "de7f3c83f37cc89c87009626c72e7642"
}
Frame {
msec: 3536
- hash: "e56e3a90da446e0c482cb93717f6aacc"
+ hash: "124da0099a7dd6fbf6dfd0ecfb09638c"
}
Frame {
msec: 3552
- hash: "aa94ebdbb4b8423aff28c95daff0baf5"
+ hash: "40204fdb7a84b86f1380224908092354"
}
Frame {
msec: 3568
- hash: "e1744d9cacd1a2c96af4cfdd5c486995"
+ hash: "ff93c3290b7d9a9743cc11d41a112a0a"
}
Frame {
msec: 3584
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ hash: "c3b219bdd7710427d134402a8d3e6429"
}
Frame {
msec: 3600
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ hash: "56e2f6b2ac103caf7ada3b56c19622c2"
}
Frame {
msec: 3616
- hash: "7f19ea52e9e41a3b1bd90bb2a144d305"
+ hash: "8ef246d322446e7f0848b99495f89e2b"
}
Frame {
msec: 3632
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ hash: "8eb6d69d9833d0fbf87f951f489b71fe"
}
Frame {
msec: 3648
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ hash: "17deb6b26fc9d27d5194995c102da4ac"
}
Frame {
msec: 3664
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ hash: "5f6708f615654c459f5749676fc09016"
}
Frame {
msec: 3680
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ hash: "1734205ea5e7539b47d80c5a93ec74aa"
}
Frame {
msec: 3696
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ hash: "1734205ea5e7539b47d80c5a93ec74aa"
}
Frame {
msec: 3712
@@ -1170,11 +1170,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "itemlist.3.png"
+ hash: "88143ff6c278a5433b314b551b7b8b1d"
}
Frame {
msec: 3856
- hash: "88143ff6c278a5433b314b551b7b8b1d"
+ image: "itemlist.4.png"
}
Frame {
msec: 3872
@@ -1298,7 +1298,7 @@ VisualTest {
}
Frame {
msec: 4160
- hash: "c2c9c284b185a89faf4ddb5a7867f449"
+ hash: "f619097356671f6eb54d3b1c481e709d"
}
Mouse {
type: 5
@@ -1310,7 +1310,7 @@ VisualTest {
}
Frame {
msec: 4176
- hash: "de1c18aeda5d2fbd6dad4554c78617bd"
+ hash: "240081760f0cf2f02be4d6d2600d2bbc"
}
Mouse {
type: 5
@@ -1338,11 +1338,11 @@ VisualTest {
}
Frame {
msec: 4192
- hash: "a67bf40d09259bbd079c12ae4f49150f"
+ hash: "3b85c1739fdf3933d8cb0b2eaf22e6e3"
}
Frame {
msec: 4208
- hash: "94514668dafbe41c5890a578efd6dea4"
+ hash: "f811f3c6b022730dd68ebd7b1659ea40"
}
Frame {
msec: 4224
@@ -1350,139 +1350,139 @@ VisualTest {
}
Frame {
msec: 4240
- hash: "4b5368f0d86bffeb6bd31b58aec88650"
+ hash: "7b7f5daf5eaf047e69d04b5bcb73240c"
}
Frame {
msec: 4256
- hash: "b459bde7bb4ce51e6ecdab58f64fcbb9"
+ hash: "1af58a2f44f1f613712d4df85e38356d"
}
Frame {
msec: 4272
- hash: "7bac8cc3ec64c9ad1c0da282e38c953e"
+ hash: "1bbdda445cec7f95a189c15d7e3c77b8"
}
Frame {
msec: 4288
- hash: "a73a58c3d7a757547740a2a161f4c756"
+ hash: "91d8bcfebff29d2caf526b4012daaf46"
}
Frame {
msec: 4304
- hash: "b35edcb1fa3568a3e770ab2364b82e75"
+ hash: "71ec8c363ca6a6f7556afb70faccffe6"
}
Frame {
msec: 4320
- hash: "d6c863ef57c5e5cb04cdac72f920db0b"
+ hash: "303ebc28d09a49de52cb1adaa03872dd"
}
Frame {
msec: 4336
- hash: "0db5e4588ff851918b07796f0cf07382"
+ hash: "9402e86bf4ffa62c60b02531a3735275"
}
Frame {
msec: 4352
- hash: "71ec8c363ca6a6f7556afb70faccffe6"
+ hash: "5652de6fb2e107d41c0c5aeacf5a3055"
}
Frame {
msec: 4368
- hash: "18d026e9c965ada1db67c643576d2a80"
+ hash: "b6a2ade6565a86b1f8e369b02e0b93f9"
}
Frame {
msec: 4384
- hash: "69f71c22dff981a4da8ec1edcf90e79f"
+ hash: "30dd35e0b9ffa846f3cfc39edcbae511"
}
Frame {
msec: 4400
- hash: "680460f5e4d9e649931601041af046b2"
+ hash: "401975fb4c9a48953aec25adb593eec4"
}
Frame {
msec: 4416
- hash: "3028763fd15de2607b20b1331b904a4a"
+ hash: "71f9039c7aa9c8dc6d1de4561b1d5537"
}
Frame {
msec: 4432
- hash: "333eb60e217fe1ea7469eab52ac461f1"
+ hash: "e1390ad02ae7a6e757df4a7af9032167"
}
Frame {
msec: 4448
- hash: "ccbcd6f45cb529c2db71504c0f69d73e"
+ hash: "53a26f00bd49b8a9c065be99f9402d9c"
}
Frame {
msec: 4464
- hash: "3445df9b41a0a3e74738cbf328ab7d5c"
+ hash: "b6e515e9a27af23b895f5024a41ce7b3"
}
Frame {
msec: 4480
- hash: "bd2c072558479e9de7a97207e58cc57f"
+ hash: "85d143505d56f53c629358b37ad11581"
}
Frame {
msec: 4496
- hash: "3d34b0b24a30eda93377dcb4585afed8"
+ hash: "de5cbdd848a07b78f9c5eb510cca2d3e"
}
Frame {
msec: 4512
- hash: "d3045703863b0c5a327b9355c23d69f2"
+ hash: "0ad7411316031e22034c14e81ca3a806"
}
Frame {
msec: 4528
- hash: "2f2eb55f693415b840a317211b250e9f"
+ hash: "32bef6f5005ad94e29ff59165958fbdc"
}
Frame {
msec: 4544
- hash: "791b9ca7d47a3343474c30a35e336d4b"
+ hash: "87758dd311f91193bf1e3536c2f58525"
}
Frame {
msec: 4560
- hash: "73a0c02ebad6d3d5f939d9a00dd898bf"
+ hash: "d4c34ed49317c6692d71681fcd9842b6"
}
Frame {
msec: 4576
- hash: "d5c11135d586711b12f236430a2c2795"
+ hash: "abaa235bb946a8abaddd52981d632c2d"
}
Frame {
msec: 4592
- hash: "34f9ea214fe714ff4e994f715ea6ea39"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4608
- hash: "8e49afa00983b156b818533923fb6edd"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4624
- hash: "e7e7bef17cee92eca9191fd734d7a577"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4640
- hash: "e407f6ed7cb3c130365ab5515d6308c0"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4656
- hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4672
- hash: "0ad7411316031e22034c14e81ca3a806"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4688
- hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4704
- hash: "32bef6f5005ad94e29ff59165958fbdc"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4720
- hash: "87758dd311f91193bf1e3536c2f58525"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4736
- hash: "015be92a4ff4e735fcc3cbc7a8b9d763"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4752
- hash: "d4c34ed49317c6692d71681fcd9842b6"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4768
- hash: "abaa235bb946a8abaddd52981d632c2d"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4784
@@ -1490,11 +1490,11 @@ VisualTest {
}
Frame {
msec: 4800
- image: "itemlist.4.png"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Frame {
msec: 4816
- hash: "99f9988040a389576cb6420b5391f768"
+ image: "itemlist.5.png"
}
Frame {
msec: 4832
@@ -1650,7 +1650,7 @@ VisualTest {
}
Frame {
msec: 5280
- hash: "95b380c9ab6f8db7b822faf023d94546"
+ hash: "99f9988040a389576cb6420b5391f768"
}
Mouse {
type: 5
@@ -1670,7 +1670,7 @@ VisualTest {
}
Frame {
msec: 5296
- hash: "bb79e53556698c62ec30c75be9f6b7d7"
+ hash: "6ffd2b79cf0e941a59e74bc6f9025bcb"
}
Mouse {
type: 5
@@ -1698,179 +1698,179 @@ VisualTest {
}
Frame {
msec: 5312
- hash: "285cc2f0df1f59f25a0135560ab6edf2"
+ hash: "4aa05d978267325ae00cb45e310a2f01"
}
Frame {
msec: 5328
- hash: "93a731dc6f71b6ff5400bf74c87e6c46"
+ hash: "b5717b311259c77a0210e26ab99dd401"
}
Frame {
msec: 5344
- hash: "eb555741ab128a50de5a18a454f2e639"
+ hash: "9b3fde82278fa2f0caaf64cf23bb6530"
}
Frame {
msec: 5360
- hash: "5dbe6cf898c1e37fcaacecfcf57b2194"
+ hash: "e7795610115593e78bb32f7bcc0ae2eb"
}
Frame {
msec: 5376
- hash: "e7795610115593e78bb32f7bcc0ae2eb"
+ hash: "0dc7c4c161e0b3c3d176e5e6bc08a805"
}
Frame {
msec: 5392
- hash: "20e76f0eb4ec5f691999faf8ad313370"
+ hash: "7c2b0307c4040d8d9e88425b3bf3fb70"
}
Frame {
msec: 5408
- hash: "d6a544c622e504c1b931e1a8a1310a6e"
+ hash: "06ce7db518da042e04dd3f79b7220974"
}
Frame {
msec: 5424
- hash: "e7a3a21feed244c5b1c710a9254c15f0"
+ hash: "7aeec517e845c1c5012ed63be6bbd006"
}
Frame {
msec: 5440
- hash: "5a4b1aca24f121d1373646e9d80b86fd"
+ hash: "53e9d5a0098f2e91bbea45360b876607"
}
Frame {
msec: 5456
- hash: "331d2ec7021655c86aa64e47718a1088"
+ hash: "22a6c7f3dcb5a36592909783b2466c8d"
}
Frame {
msec: 5472
- hash: "92096bc872e7395aa5b75c44646a0b60"
+ hash: "9d8da9199efebb95f56e5d4ebc9a585e"
}
Frame {
msec: 5488
- hash: "0d9aa6cee4d21488cbb5153f8f3ed593"
+ hash: "c553400402f233a6246be4e544b433ae"
}
Frame {
msec: 5504
- hash: "c1b943d43701605563fffffcb75f9fa7"
+ hash: "c2e41a54c03340832db93f6f88393f00"
}
Frame {
msec: 5520
- hash: "1b680025d5ad1ddd8f8d5f570ba73e71"
+ hash: "3622a619a99c939e96636a86c4428ba3"
}
Frame {
msec: 5536
- hash: "5539a3b9f60ea747c10ed8328b467cbf"
+ hash: "e65d5e6c756e750e6d98096fe211465c"
}
Frame {
msec: 5552
- hash: "0a1317bcb606cd3488c5b14ee5d96585"
+ hash: "cabd6d30b1f4e42b38b73803aae6d5be"
}
Frame {
msec: 5568
- hash: "8844af68b11db7d92c69804c7371a746"
+ hash: "68d443f16c16821ffc9ca68b17c76034"
}
Frame {
msec: 5584
- hash: "28d7fd127739c6e3b8488651b725c802"
+ hash: "a68b1bc6c2963ee92c3a45f500667b3b"
}
Frame {
msec: 5600
- hash: "0cf1a7d958a96aa2768995dddc5ccc09"
+ hash: "805319ac7ca842feb3649e92f8b5b72f"
}
Frame {
msec: 5616
- hash: "64b902fe7ab4d89ef0c7b760974e3488"
+ hash: "fd8d3f5688b1806998c6087e18c6c730"
}
Frame {
msec: 5632
- hash: "aba11c597eba550fc1eaddbf554057f6"
+ hash: "b135c8c9975f4d45d2054cf31d0b1fe1"
}
Frame {
msec: 5648
- hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5"
+ hash: "40382f644935dc4e99353fa29c3e0b21"
}
Frame {
msec: 5664
- hash: "0ba8b582234d9f0c198c0c9e18e1cb02"
+ hash: "aa32e4c20c6a43c4ef7991a9418e57fe"
}
Frame {
msec: 5680
- hash: "f66eaf2b5c3529987c0d9d005351ed73"
+ hash: "b8db9180b4ad15fdbd25a4e974512f92"
}
Frame {
msec: 5696
- hash: "75b0bb720fa4c77da3783b3ff31c2fae"
+ hash: "127871a98123b7bd44f4c38f27cbc836"
}
Frame {
msec: 5712
- hash: "345b235bb7f13409378e5c0c370f2a41"
+ hash: "35fe67a91e50f8ebc896451b39cb8f1c"
}
Frame {
msec: 5728
- hash: "83b7e902dce4e0fdc4ef5d629188c23c"
+ hash: "35fe67a91e50f8ebc896451b39cb8f1c"
}
Frame {
msec: 5744
- hash: "04b9041c6f10969889d92e94785c7e88"
+ hash: "0b7fc796f818bddcada99e9981f1cce0"
}
Frame {
msec: 5760
- image: "itemlist.5.png"
+ hash: "35fe67a91e50f8ebc896451b39cb8f1c"
}
Frame {
msec: 5776
- hash: "4f3a902addc34ecdaf390e2427cc52e7"
+ image: "itemlist.6.png"
}
Frame {
msec: 5792
- hash: "68d443f16c16821ffc9ca68b17c76034"
+ hash: "35fe67a91e50f8ebc896451b39cb8f1c"
}
Frame {
msec: 5808
- hash: "9d25adc77befa761ee376a9b43595b5e"
+ hash: "2311ce1a83a43619ab7ce537a2b948e1"
}
Frame {
msec: 5824
- hash: "a68b1bc6c2963ee92c3a45f500667b3b"
+ hash: "2311ce1a83a43619ab7ce537a2b948e1"
}
Frame {
msec: 5840
- hash: "d5268cd58c222451d48038e715e83802"
+ hash: "127871a98123b7bd44f4c38f27cbc836"
}
Frame {
msec: 5856
- hash: "f37d461541a8ec7a4161b18748de6aea"
+ hash: "b8db9180b4ad15fdbd25a4e974512f92"
}
Frame {
msec: 5872
- hash: "805319ac7ca842feb3649e92f8b5b72f"
+ hash: "65af7a4a4aea5a983ea3fb9324e74256"
}
Frame {
msec: 5888
- hash: "73124472a05080891d4948d8ca273f8c"
+ hash: "aa32e4c20c6a43c4ef7991a9418e57fe"
}
Frame {
msec: 5904
- hash: "b6e433a23282a50db2e165a2447ba3f6"
+ hash: "b3e92eb4cfe548b92ac526066dfc7d23"
}
Frame {
msec: 5920
- hash: "fd8d3f5688b1806998c6087e18c6c730"
+ hash: "39fcad34db24d591e24c8ae1c7094d5b"
}
Frame {
msec: 5936
- hash: "f132dd459950ef2d18aa93ca950d0692"
+ hash: "165b91b850bcb8dd1d9b1eaa6f81be57"
}
Frame {
msec: 5952
- hash: "ade5beb259b5277c333ca806fc9bdbec"
+ hash: "f34d2248999f5f51210064315d631f60"
}
Frame {
msec: 5968
- hash: "ade5beb259b5277c333ca806fc9bdbec"
+ hash: "f34d2248999f5f51210064315d631f60"
}
Frame {
msec: 5984
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ hash: "b135c8c9975f4d45d2054cf31d0b1fe1"
}
Frame {
msec: 6000
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ hash: "b135c8c9975f4d45d2054cf31d0b1fe1"
}
Frame {
msec: 6016
@@ -2050,11 +2050,11 @@ VisualTest {
}
Frame {
msec: 6720
- image: "itemlist.6.png"
+ hash: "bf47cc398a702dd17c8efebb3d2f8073"
}
Frame {
msec: 6736
- hash: "bf47cc398a702dd17c8efebb3d2f8073"
+ image: "itemlist.7.png"
}
Frame {
msec: 6752
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png
index 581e824..71926d7 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png
index 581e824..80f82e4 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png
deleted file mode 100644
index dcfca3f..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png
deleted file mode 100644
index 7cc4047..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png
deleted file mode 100644
index a97f4ad..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png
deleted file mode 100644
index 7a8c6bd..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png
deleted file mode 100644
index ae47356..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png
deleted file mode 100644
index b3a7260..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png
index 579c68c..61501bb 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png
index b3a7260..51c4eb1 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png
index 19758b0..81e00ed 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png
index 581e824..d1f06fa 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png
index 82cac48..9e6e29c 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png
index 9277a82..9e7bd6e 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png
index 8c36da7..9e7bd6e 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png
deleted file mode 100644
index 581e824..0000000
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml
index bf64029..b1ffe8f 100644
--- a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ image: "listview.0.png"
}
Frame {
msec: 32
@@ -108,571 +108,747 @@ VisualTest {
msec: 416
hash: "3b88645092be28037fca4a6034f5b2f7"
}
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
+ }
Frame {
msec: 432
hash: "3b88645092be28037fca4a6034f5b2f7"
}
Frame {
msec: 448
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "435ac0668ad4d0e196eb040d385053cb"
}
Frame {
msec: 464
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "e9532fe1acc1c27a2119e6dde3e01637"
}
Frame {
msec: 480
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9c757feaf5a8d1e88c659fca97e3b7b2"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 496
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "ccc7785a45a41615db01580835a4638e"
}
Frame {
msec: 512
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "11ad92022bcd5d3fbd28ffb9f51c69eb"
}
Frame {
msec: 528
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "a8a94e1f95216864c368b8c3d0ae682b"
}
Frame {
msec: 544
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "d83e213d35e7fcff2580b4e197547f24"
}
Frame {
msec: 560
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9e5a57fabdc443e395cacbaf6e0c9bef"
}
Frame {
msec: 576
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9e5a57fabdc443e395cacbaf6e0c9bef"
}
Frame {
msec: 592
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9e5a57fabdc443e395cacbaf6e0c9bef"
}
Frame {
msec: 608
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9e5a57fabdc443e395cacbaf6e0c9bef"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 624
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9e5a57fabdc443e395cacbaf6e0c9bef"
}
Frame {
msec: 640
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "0e9c577fa86d9b3734da0d50040624e0"
}
Frame {
msec: 656
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "834cf83f0f8d613191cac775b5737664"
}
Frame {
msec: 672
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "495ea7650b2ae45f9afd7f9f6ecdd793"
}
Frame {
msec: 688
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "55c761ccee6543bb3b9564bb813df58e"
}
Frame {
msec: 704
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "e29e5f86cb3b1fb5ec77fde696024812"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 720
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f24b7d5a8f5ab03460505d6203269d1b"
}
Frame {
msec: 736
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "893473965efe9e0540b197cbaa3f765d"
}
Frame {
msec: 752
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "a541b7be2f370f948048b2101b037ab7"
}
Frame {
msec: 768
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "a541b7be2f370f948048b2101b037ab7"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 784
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "da065f1e72883a45241630b96ee5b1f8"
}
Frame {
msec: 800
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "e97f78604c0c6d468c8dd225642e2ebd"
}
Frame {
msec: 816
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "7b9d4b14eedfa4ff10dd7e3747c4a7f5"
}
Frame {
msec: 832
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "6d55ba6287c720614854d36bb681a9f3"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 848
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "3e7a44811f59bfb81de2f4f884a7af17"
}
Frame {
msec: 864
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "101113a7723b9d09275f66152b82142f"
}
Frame {
msec: 880
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "0044e068522f912630868476f8bf49f8"
}
Frame {
msec: 896
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "92065f9f170ee09abf67f0d0c7a1b6ba"
}
Frame {
msec: 912
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "92065f9f170ee09abf67f0d0c7a1b6ba"
}
Frame {
msec: 928
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "92065f9f170ee09abf67f0d0c7a1b6ba"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 944
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "92065f9f170ee09abf67f0d0c7a1b6ba"
}
Frame {
msec: 960
- image: "listview.0.png"
+ hash: "d193987835dc12e4391e55ff5fee4ce1"
}
Frame {
msec: 976
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ image: "listview.1.png"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 992
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9b07b6861a97d0871ed89369ff7449da"
}
Frame {
msec: 1008
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "7d95daf35c1823ea7187162b62010c57"
}
Frame {
msec: 1024
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "cc1e70fd1235d50ca291580bef1d6fc4"
}
Frame {
msec: 1040
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c8250f4cf69642e78523412b7b75501c"
}
Frame {
msec: 1056
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c57e421c803e8bfa1a85409cbb858829"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1072
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "19b429a90d9877e62a7dee53ebf01fb2"
}
Frame {
msec: 1088
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "7c810f174bed3826016272515df2d525"
}
Frame {
msec: 1104
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9034cf480bda0d8b55aa6c43fc96b23d"
}
Frame {
msec: 1120
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f62697a1f4e4df2869c14462a0d514fd"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1136
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c878f53b338d1ce332973193b0fa4b86"
}
Frame {
msec: 1152
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "5d26f27061b319c391961dc30d985593"
}
Frame {
msec: 1168
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "e038ae877e8dddd3d99bf97475f59b3d"
}
Frame {
msec: 1184
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f44adc5e46d320c62095e1285ca8848b"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1200
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "17f6b13e0556ac07dc527a9013a307a1"
}
Frame {
msec: 1216
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "70a1cc3b6dd3be4e30bb6763344fb980"
}
Frame {
msec: 1232
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "097c37d2243a27b8e800b5d4ec94b2e3"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1248
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "15839227c002b1c71eb516f6653a7531"
}
Frame {
msec: 1264
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f4a8103ef9010c651368d325fe9eee98"
}
Frame {
msec: 1280
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "d158ec1c83719c58c1d0a2e4cc90998f"
}
Frame {
msec: 1296
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "6f66a44f5dc3fe150db2291b8cbc7327"
}
Frame {
msec: 1312
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "8a016eac5befb215a157f7fe5bc743de"
}
Frame {
msec: 1328
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "8a016eac5befb215a157f7fe5bc743de"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1344
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "807129a4c578b1a5f0d3d84686eb0553"
}
Frame {
msec: 1360
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f9f2da990518048f0b050cc193567a20"
}
Frame {
msec: 1376
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "762de7b1f4e56df6d7a245a23446884b"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1392
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "84ba7354badc3dca92974933c3610010"
}
Frame {
msec: 1408
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "36c3018870d74cff638d00acd03a0cf0"
}
Frame {
msec: 1424
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "82b756a14eb0e802cd3e2d2d2a07f28e"
}
Frame {
msec: 1440
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "74af1c12613130dc53533fe1178d5534"
}
Frame {
msec: 1456
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c32818b0ba24f11295580d1ccffffdc0"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1472
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "b858be109fac6852234bf1db161e515b"
}
Frame {
msec: 1488
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9b3f8cffd3e79241d8a3b1f7d80790db"
}
Frame {
msec: 1504
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "840dc72aabc4a9b28bae641354676324"
}
Frame {
msec: 1520
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c60bfd5cc8b26a841035db29baba5dab"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1536
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "88d80dc8b0d968aa718ff464e507f53b"
}
Frame {
msec: 1552
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f7ffc82d3448c415b4997401fb61b96b"
}
Frame {
msec: 1568
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "df8e9a09752fe2b2eff9184ba8e88ef1"
}
Frame {
msec: 1584
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1600
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1616
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1632
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1648
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1664
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1680
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1696
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1712
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1728
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1744
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1760
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1776
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1792
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1808
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1824
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1840
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1856
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1872
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1888
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "97330e949a609f5f33832dd17e0c3716"
}
Frame {
msec: 1904
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "15e45e1f64438d7c31e79a9602e1db7a"
}
Frame {
msec: 1920
- image: "listview.1.png"
+ hash: "02f34b6fde613c7c5928285bf81837d6"
}
Frame {
msec: 1936
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ image: "listview.2.png"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1952
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "33091359f9e6f21a14bf415d32d4d3b1"
}
Frame {
msec: 1968
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "0fdcffa304f3eadde5cd7866d0a74e72"
}
Frame {
msec: 1984
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "024539dbf8e66f1ba7d5d8c91bd278f0"
}
Frame {
msec: 2000
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "4900babcc0a7bbd622a72590dcb0eea4"
}
Frame {
msec: 2016
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "d6f68d576fe46bb832accf5e9e590f7e"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2032
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "5a54bcb9a59268d70a2bb99bd32395be"
}
Frame {
msec: 2048
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "72fbb18da8c5ef3e98390796dad31390"
}
Frame {
msec: 2064
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "ac073b398e3d50ef10c92d8e6b4b3fa0"
}
Frame {
msec: 2080
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "41e38d866d65bf1d42448b07a133cd93"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2096
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "c45310b94cd2ff276e97be1706e1d432"
}
Frame {
msec: 2112
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "aefc6994644d266d4be0310f01c28be7"
}
Frame {
msec: 2128
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "f07bcb1d8ad693e1ddd79bf651126554"
}
Frame {
msec: 2144
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "62ff227caab71d2d98daf0da302ec796"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2160
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "72350eeeaefd043354c82ca2039cff59"
}
Frame {
msec: 2176
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "d89f288f0b231b4ec4a634b3856ecf8e"
}
Frame {
msec: 2192
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "bc7d7e2253651cb3ea1cdebf9f188ae0"
}
Frame {
msec: 2208
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "7c89cdb693489708fe2db327ae66d083"
}
Frame {
msec: 2224
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "8ca778c1812ede19545c3c70020faa67"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2240
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "bd50cd99f177eb3f70b2ffad9f7a49e1"
}
Frame {
msec: 2256
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "b439c3576cad17689e7b6b134bb04e14"
}
Frame {
msec: 2272
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2288
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2304
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2320
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2336
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2352
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2368
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2384
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2400
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Frame {
msec: 2416
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 488; y: 56
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2432
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
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"
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 553; y: 267
+ x: 489; y: 56
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2608
- hash: "3b88645092be28037fca4a6034f5b2f7"
- }
- Frame {
- msec: 2624
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 2464
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 554; y: 267
+ x: 490; y: 59
modifiers: 0
sendToViewport: true
}
@@ -680,19 +856,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 555; y: 266
+ x: 491; y: 64
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2640
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 2480
+ hash: "9489c0e1e8cc5675bbc42b78e567eab6"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 556; y: 265
+ x: 494; y: 74
modifiers: 0
sendToViewport: true
}
@@ -700,63 +876,75 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 558; y: 260
+ x: 497; y: 90
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2656
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 2496
+ hash: "6502b3a17af7ebca92d4794f0c2a62ac"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 560; y: 256
+ x: 499; y: 108
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 501; y: 126
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2672
- hash: "c315e184c4dcb11d7e9fd4509a8b6a1f"
+ msec: 2512
+ hash: "8a7ac12d59126b2784fd0af8d6b762a5"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 562; y: 250
+ x: 505; y: 170
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 2528
+ hash: "12fa9c4e2d6681f3a0643d8243d83e23"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 566; y: 234
+ x: 509; y: 214
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2688
- hash: "aeef1cacca9518408519b670443e396f"
+ msec: 2544
+ hash: "ccf18952f7c9686bd12fa196af9919e6"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 568; y: 216
+ x: 516; y: 289
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2704
- hash: "621626927f83bf7b36b78f5ca7ed4ed0"
+ msec: 2560
+ hash: "70d654eecaf2163971596a503d2925a0"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 572; y: 192
+ x: 518; y: 316
modifiers: 0
sendToViewport: true
}
@@ -764,399 +952,139 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 572; y: 192
+ x: 518; y: 316
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"
+ msec: 2576
+ hash: "01ef888104f290f25612970a91e64620"
}
Frame {
- msec: 3536
- hash: "52fa0b693c3de208e5943521eef5587c"
+ msec: 2592
+ hash: "25b730c7c126875078c64cce118f6277"
}
Frame {
- msec: 3552
- hash: "0e237f706f9c2c4c616271f9b9d014e5"
+ msec: 2608
+ hash: "68f3366932fed9156bf68dce6660b2a8"
}
Frame {
- msec: 3568
- hash: "14edd1dc2371a9aadaa3c079d325fab6"
+ msec: 2624
+ hash: "9f4be0b58c46035a11c5b80ec60618d5"
}
Frame {
- msec: 3584
- hash: "1fe873b07ee24edaea224939e10830f1"
+ msec: 2640
+ hash: "6d38a4eaa2a41c57599cca381957ec4c"
}
Frame {
- msec: 3600
- hash: "30804b5eb2a6d99116475cbdc1a9c043"
+ msec: 2656
+ hash: "1061db26c9080067bf121eb1d164a3f3"
}
Frame {
- msec: 3616
- hash: "c892c17ec947a910b74f5b8704405e9f"
+ msec: 2672
+ hash: "c78d271711dc8f13fb48b41871249141"
}
Frame {
- msec: 3632
- hash: "696029b77512943001c9eba64191e633"
+ msec: 2688
+ hash: "c5825611f6c429fddd8c20495507ea5f"
}
Frame {
- msec: 3648
- hash: "4c26bb0ca28d74a2bb79d0bfc8127361"
+ msec: 2704
+ hash: "9888b608bcf80496a3fe8848be4e3629"
}
Frame {
- msec: 3664
- hash: "2d1539db88647d73b9c53cde7c424dd7"
+ msec: 2720
+ hash: "9995d6ba039045d94903d5095b018ca8"
}
Frame {
- msec: 3680
- hash: "fd20e4259b44357c93f22f35c698fe1b"
+ msec: 2736
+ hash: "f8ea705b4710b3ffb11c2fe08ccccda2"
}
Frame {
- msec: 3696
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2752
+ hash: "7354c2fcabdede9fb1ee823ce098da3b"
}
Frame {
- msec: 3712
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2768
+ hash: "0d6beff960fa26771f09748356accedb"
}
Frame {
- msec: 3728
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2784
+ hash: "0720a8a1ed85344a1de6682b3aefd502"
}
Frame {
- msec: 3744
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2800
+ hash: "0245488740e13dbfc836b587b2bdf917"
}
Frame {
- msec: 3760
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2816
+ hash: "25c4fcdd85017d18df7e83c15f1accbc"
}
Frame {
- msec: 3776
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2832
+ hash: "51192ae0eae814f3dead9d949e2e4676"
}
Frame {
- msec: 3792
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2848
+ hash: "ddbe6b273882c6018c01e0a4480b1adb"
}
Frame {
- msec: 3808
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2864
+ hash: "bb840a0677114b67d9b08589e8a8192b"
}
Frame {
- msec: 3824
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2880
+ hash: "5387de4152cac542735a4debf997b56f"
}
Frame {
- msec: 3840
+ msec: 2896
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"
+ msec: 2912
+ hash: "f5c99d06e0b3055374ee4c6bf3e634f4"
}
Frame {
- msec: 4080
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2928
+ hash: "18fe01fadf4c5acbd369f4450db1efa6"
}
Frame {
- msec: 4096
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2944
+ hash: "bed738f1883a76c5169dd2726456b9ea"
}
Frame {
- msec: 4112
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2960
+ hash: "c80c45be3189269d8edc5be22db7227d"
}
Frame {
- msec: 4128
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2976
+ hash: "3dcb08dd8ac8f083ad6aacbafaae05f4"
}
Frame {
- msec: 4144
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 2992
+ hash: "38850ecc15cdcd55b758f94e8ac7fe55"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 521; y: 24
+ x: 517; y: 241
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4160
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 25
- modifiers: 0
- sendToViewport: true
+ msec: 3008
+ hash: "033c44c51b8ab8f1555e153e20a80699"
}
Frame {
- msec: 4176
- hash: "5d49efe1383065f0b88f1bfdbbe5e165"
+ msec: 3024
+ hash: "b6dc510369c679a028bb059e74796f6c"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 32
+ x: 518; y: 240
modifiers: 0
sendToViewport: true
}
@@ -1164,51 +1092,55 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 521; y: 37
+ x: 519; y: 239
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4192
- hash: "a5df688148c264de1d376c9b87ddfa6b"
+ msec: 3040
+ hash: "f3606887493ee9c0db86b1c6cc6fef6d"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 46
+ x: 524; y: 229
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4208
- hash: "a4e2c1878b0afce0ee1eebd63e9c951a"
+ msec: 3056
+ hash: "79975f978ebf4556381d08b500dcab72"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 66
+ x: 530; y: 204
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 3072
+ hash: "1345974969c1a56c4c14c74301985289"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 88
+ x: 532; y: 167
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4224
- hash: "2f9a79278d492790ef86a09c77e95ff4"
+ msec: 3088
+ hash: "fd623f2bf161f326da6dec8b5d8bf16f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 531; y: 136
+ x: 530; y: 117
modifiers: 0
sendToViewport: true
}
@@ -1216,731 +1148,283 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 531; y: 136
+ x: 530; y: 117
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"
+ msec: 3104
+ hash: "f1dfb47c5d4449e6cf7e2e6a2e86b1c5"
}
Frame {
- msec: 5360
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3120
+ hash: "26b31d08a1d50614771bec0458a2776b"
}
Frame {
- msec: 5376
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3136
+ hash: "dd017925e34f942c279ceb18b5e222da"
}
Frame {
- msec: 5392
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3152
+ hash: "be400b4ad1d9a1ccca56b8ff6b809272"
}
Frame {
- msec: 5408
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3168
+ hash: "4a4faa75155bb2c260f3a35675bd113e"
}
Frame {
- msec: 5424
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3184
+ hash: "3884c5d0d4c127876ba92a7b3a416339"
}
Frame {
- msec: 5440
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3200
+ hash: "b3d15196484410e24084b0f0d8fd683f"
}
Frame {
- msec: 5456
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3216
+ hash: "ed636ae433d185338ddbf7bffae731e1"
}
Frame {
- msec: 5472
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3232
+ hash: "0e1f352c163ad8fe852c2e4857881d2f"
}
Frame {
- msec: 5488
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3248
+ hash: "3c3b44481a6c2330a4a03076e35055f4"
}
Frame {
- msec: 5504
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3264
+ hash: "6ea3210a929774aea84a7beb4a784842"
}
Frame {
- msec: 5520
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3280
+ hash: "74dd747f9a64b19e5c5230c90ad3b642"
}
Frame {
- msec: 5536
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3296
+ hash: "c02be4ebefd19f4c5e864e8bbab7c13e"
}
Frame {
- msec: 5552
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3312
+ hash: "ce661af9085c833ec7d1fd66ebe67649"
}
Frame {
- msec: 5568
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3328
+ hash: "4bf921874cfdc1b7d14e3a110b9e70a1"
}
Frame {
- msec: 5584
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3344
+ hash: "f3e9cf8ac9e109e88d8c426fdcee28a9"
}
Frame {
- msec: 5600
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3360
+ hash: "aa718a37f7ccf655d176adb799b5ddfb"
}
Frame {
- msec: 5616
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3376
+ hash: "aa114a9676af508b4a106b21f7a2ed10"
}
Frame {
- msec: 5632
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3392
+ hash: "a5bbbaebb61b83384f5be82a9c3181ba"
}
Frame {
- msec: 5648
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3408
+ hash: "83deebf650b192de7c8a764d5379eeb4"
}
Frame {
- msec: 5664
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3424
+ hash: "5b433e1f5b97b39b6e86c837f0b91f2b"
}
Frame {
- msec: 5680
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3440
+ hash: "b5236be4e416f89a91eda7afbd75fc63"
}
Frame {
- msec: 5696
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3456
+ hash: "1713477f5484a1b35686f2f4bff27612"
}
Frame {
- msec: 5712
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3472
+ hash: "77f91f90744a23bbe172629f311d1a4e"
}
Frame {
- msec: 5728
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3488
+ hash: "3963753a90d6cbf74bc21c9d06f4227b"
}
Frame {
- msec: 5744
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3504
+ hash: "7f64804cd07a0ae63d0e3a1b9f8f8a84"
}
Frame {
- msec: 5760
- image: "listview.5.png"
+ msec: 3520
+ hash: "9ae6bc952da97239bfee88633637aeb7"
}
Frame {
- msec: 5776
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3536
+ hash: "ba34cd0d57d5d027ad6c2de102676399"
}
Frame {
- msec: 5792
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3552
+ hash: "c49632f9369aa901fcb702e76295c1e8"
}
Frame {
- msec: 5808
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3568
+ hash: "3adab59e06a635a033564dfc8edc4877"
}
Frame {
- msec: 5824
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3584
+ hash: "67643cbfb3c9864b7447a9a8e316b251"
}
Frame {
- msec: 5840
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3600
+ hash: "d04d288cbf89e1ad3bbf25ffebd7a382"
}
Frame {
- msec: 5856
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3616
+ hash: "e6c4d34b9b3de464ec0dcf8719b86313"
}
Frame {
- msec: 5872
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3632
+ hash: "f73462d0fe19cbbd771f9f78d7bc4384"
}
Frame {
- msec: 5888
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3648
+ hash: "6369f075a492240aee36eae8dcb2ace5"
}
Frame {
- msec: 5904
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3664
+ hash: "1e9424a3b93833f8ae855c5f7877679a"
}
Frame {
- msec: 5920
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3680
+ hash: "da274c1ae57d217ef4515326d32646b4"
}
Frame {
- msec: 5936
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3696
+ hash: "1cbe684ba95e6ef635873f746e942f3d"
}
Frame {
- msec: 5952
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3712
+ hash: "228e13c1d3dea6e666637de7cedd6dd4"
}
Frame {
- msec: 5968
- hash: "3b88645092be28037fca4a6034f5b2f7"
+ msec: 3728
+ hash: "a3f8fec49fb88652e9339b621ea8b972"
}
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
+ x: 487; y: 34
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
+ msec: 3744
+ hash: "7c3eb16bf4f66d2b9889c9d80aaae8b2"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 101; y: 100
+ x: 488; y: 40
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6144
- hash: "04231c2fdc02729aa34ed4e403dd373b"
+ msec: 3760
+ hash: "1825d33eb9ae94a63d334d93e07ce9af"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 101; y: 96
+ x: 489; y: 49
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6160
- hash: "392d75c4b372825e78366eb63a618170"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 101; y: 87
- modifiers: 0
- sendToViewport: true
+ msec: 3776
+ hash: "306652a5a179cf23ee87c10571814f53"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 102; y: 83
+ x: 490; y: 55
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6176
- hash: "7f91f7bdb0cb62d600ac4aa573681fe3"
+ msec: 3792
+ hash: "3d3ba7cd968a1f91f7534cabd7cc034b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 102; y: 79
+ x: 490; y: 60
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6192
- hash: "69207181a382650c5e33145555f0d9ba"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 103; y: 76
- modifiers: 0
- sendToViewport: true
+ msec: 3808
+ hash: "862f70151938a5d27db37a9f5dd53faa"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 103; y: 72
+ x: 491; y: 64
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6208
- hash: "65a184b5c49b02e08114e437483f928d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 104; y: 68
- modifiers: 0
- sendToViewport: true
+ msec: 3824
+ hash: "92b9283fa8b5642ce9bd14d875a12b75"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 105; y: 64
+ x: 491; y: 72
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6224
- hash: "c22da9ce54d04f51fb55da755753a509"
+ msec: 3840
+ hash: "294e6961316b028201657ab6b244559f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 105; y: 61
+ x: 493; y: 93
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6240
- hash: "59dbd5216847a62f60a1d0701a15bb62"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 106; y: 57
- modifiers: 0
- sendToViewport: true
+ msec: 3856
+ image: "listview.4.png"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 106; y: 53
+ x: 493; y: 123
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 6256
- hash: "bbfc902db6e6ca253afb1c90306b2a63"
+ msec: 3872
+ hash: "6cdd764ee39789307e5e313bfbbb7765"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 106; y: 47
+ x: 494; y: 141
modifiers: 0
sendToViewport: true
}
@@ -1948,311 +1432,131 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 106; y: 47
+ x: 494; y: 141
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"
+ msec: 3888
+ hash: "a88656d49e4636b18c4f6f4a0ab943d6"
}
Frame {
- msec: 7008
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3904
+ hash: "f1ec9a65d5f8d2020db1b70bcd419417"
}
Frame {
- msec: 7024
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3920
+ hash: "ca7d3d7d26445d13acd7fe4a2c5d1d4d"
}
Frame {
- msec: 7040
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3936
+ hash: "90016f51541a15ba4b6265f6843a2998"
}
Frame {
- msec: 7056
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3952
+ hash: "bdb992552a5c5707ddb372631f72e6a3"
}
Frame {
- msec: 7072
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3968
+ hash: "af69ed47f0f40648d55af10c87866805"
}
Frame {
- msec: 7088
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 3984
+ hash: "33e77562bdf839ca1e969b918d90a07b"
}
Frame {
- msec: 7104
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4000
+ hash: "2001b5ca444808a79c49adc9d03c960e"
}
Frame {
- msec: 7120
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4016
+ hash: "e4186283e5fe0c1efb29eca6f59e9079"
}
Frame {
- msec: 7136
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4032
+ hash: "dab82d0bbba66df3297712b42f74f25a"
}
Frame {
- msec: 7152
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4048
+ hash: "b180ad3acdfd736276ef4d1de040bb55"
}
Frame {
- msec: 7168
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4064
+ hash: "577445b0e4d6f8079830c2b87ce5829d"
}
Frame {
- msec: 7184
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4080
+ hash: "45fffe51376abef4cb28842b392ab0b7"
}
Frame {
- msec: 7200
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4096
+ hash: "fc14e3b2d16e1f078d223876ef71c81e"
}
Frame {
- msec: 7216
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4112
+ hash: "4ef2b65280a00a6a4e66185f41479aef"
}
Frame {
- msec: 7232
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4128
+ hash: "131181ce7ff2f4d4e69823fcb7a20755"
}
Frame {
- msec: 7248
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4144
+ hash: "8e6db058e96dad9c4963b881083ab9bf"
}
Frame {
- msec: 7264
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4160
+ hash: "e2d407b6dff40625790d4fd9e599b374"
}
Frame {
- msec: 7280
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4176
+ hash: "631fe708fdcb1e4f4ea89b10da5db623"
}
Frame {
- msec: 7296
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4192
+ hash: "e11831f37a3a1da78cbdc7604ddccd68"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 519; y: 276
+ x: 491; y: 193
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7312
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4208
+ hash: "c2dccc4e890b2302edd413dcdb87b50b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 519; y: 275
+ x: 491; y: 189
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7328
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4224
+ hash: "b4f6a6650dd779c8ad8696c23f44411a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 519; y: 274
+ x: 493; y: 187
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7344
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4240
+ hash: "ad913e53e63c030ffdf4560766722760"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 518; y: 273
+ x: 494; y: 182
modifiers: 0
sendToViewport: true
}
@@ -2260,43 +1564,43 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 518; y: 272
+ x: 495; y: 180
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7360
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4256
+ hash: "ef31f8a4d5bde5a2e308d19ee6d5e759"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 518; y: 271
+ x: 496; y: 174
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7376
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4272
+ hash: "3ba07527f66e8bea5a8fb7647b0b4f3f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 518; y: 268
+ x: 496; y: 168
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7392
- hash: "89fe95733476bd000457e36ee4ecfc73"
+ msec: 4288
+ hash: "70e5fe656f5fd843383964825690b678"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 518; y: 266
+ x: 497; y: 159
modifiers: 0
sendToViewport: true
}
@@ -2304,776 +1608,620 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 518; y: 265
+ x: 497; y: 156
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7408
- hash: "9047f597b9e59ca652c172338bed6ef9"
+ msec: 4304
+ hash: "b7d8738be4cd6caa63dbecdb0f810a2f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 262
+ x: 497; y: 147
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7424
- hash: "87476f78daecd6bb49e8d6e673d28100"
+ msec: 4320
+ hash: "d6312191f9d7bbddc07f9253d8a93469"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 260
+ x: 497; y: 139
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7440
- hash: "6bfd895c6b7d97e4102eb26608cdfeca"
+ msec: 4336
+ hash: "b182da64886cf4f444296e5fde26701e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 254
+ x: 497; y: 128
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7456
- hash: "e4c2b75beaee54a5781a5acbeb37ea64"
+ msec: 4352
+ hash: "ebefef14b6fb990e0c6900884528bbd3"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 249
+ x: 497; y: 120
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7472
- hash: "d5e816768e9c3db0631416bd86b1b461"
+ msec: 4368
+ hash: "9a3451ed091b1bb6b975a9c5506b1ea4"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 243
+ x: 497; y: 117
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7488
- hash: "22cb512b302afc6c3c9dec1d47b3bf03"
+ msec: 4384
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 237
+ x: 498; y: 114
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7504
- hash: "a7e458e007954bd908cf27a1841d36ea"
+ msec: 4400
+ hash: "eaaf9ea1d7fcf4a2a9dd58b1b5bb3cae"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 231
+ x: 498; y: 112
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7520
- hash: "0f9fa53b247f72e9a8ff6201b188b410"
+ msec: 4416
+ hash: "7ca8e3d76cf913d85f84f0b96acde829"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 225
+ x: 498; y: 110
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7536
- hash: "c986ea3853dd33f7f2b5629f67429423"
+ msec: 4432
+ hash: "7cfef56b24a552c6d4ecb3d0b88a1d08"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 517; y: 219
+ x: 498; y: 109
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7552
- hash: "114ffaa5cf38e4884a1d477884541b44"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 518; y: 215
+ x: 498; y: 108
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7568
- hash: "7cdf1bb327484618909ded5411aca4ec"
+ msec: 4448
+ hash: "d032b257259810b4fe514c63ca5c9e4b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 519; y: 208
+ x: 498; y: 106
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7584
- hash: "d4c005194ed510f5d54a811176943dc2"
+ msec: 4464
+ hash: "568f6a57e6f1644b0dc245d03a1d7b85"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 520; y: 202
+ x: 499; y: 105
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7600
- hash: "3103351bc83675c877fb6dcd1a6ddbbc"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 196
- modifiers: 0
- sendToViewport: true
+ msec: 4480
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7616
- hash: "2c13ddda8d89501c9487b83f8b115570"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 189
- modifiers: 0
- sendToViewport: true
+ msec: 4496
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7632
- hash: "476834b6d88077f9983ed358c06bd0c3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 185
- modifiers: 0
- sendToViewport: true
+ msec: 4512
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7648
- hash: "cc2148c6a7ba0bbe6ceea848b7e48621"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 177
- modifiers: 0
- sendToViewport: true
+ msec: 4528
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7664
- hash: "5b8824848dd1de3632b26e04e95b5899"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 169
- modifiers: 0
- sendToViewport: true
+ msec: 4544
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7680
- image: "listview.7.png"
+ msec: 4560
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 160
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4576
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7696
- hash: "d0a4a8b631e3494043f261fb8da67938"
+ msec: 4592
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 156
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4608
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7712
- hash: "985111215c3959a45b293879af701318"
+ msec: 4624
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 147
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4640
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7728
- hash: "ed5917a3fe95777f2efdaa154af0c489"
+ msec: 4656
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 144
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4672
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7744
- hash: "6fa9de2983f0e30cb96c035c28757b93"
+ msec: 4688
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 137
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4704
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7760
- hash: "fd568c7d27618a71b0f0882ca57b685b"
+ msec: 4720
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 130
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4736
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7776
- hash: "f5b941f5741a9a78122605576809c395"
+ msec: 4752
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 124
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4768
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7792
- hash: "ffc96a85d7dbbed257b69a0c735e21b8"
+ msec: 4784
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 122
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4800
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7808
- hash: "cfb6335c5449554e631d6e3106ea8a00"
+ msec: 4816
+ image: "listview.5.png"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 521; y: 116
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4832
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Frame {
- msec: 7824
- hash: "ff9786e85ee8af6177ac8e5cc1307462"
+ msec: 4848
+ hash: "5cb4cf2c527d821db2a5072dd3702653"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 111
+ x: 499; y: 106
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7840
- hash: "3140b49dfee8e690b5c778044385e107"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 106
+ x: 498; y: 107
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7856
- hash: "0d899af24685a9998a6b961023286fde"
+ msec: 4864
+ hash: "d48ecbd0661e08b2117fe2fd96ffeb2c"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 104
+ x: 497; y: 110
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7872
- hash: "99ee1e8803c05e546a721b0c9ee39499"
+ msec: 4880
+ hash: "7cfef56b24a552c6d4ecb3d0b88a1d08"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 101
+ x: 496; y: 113
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7888
- hash: "96e7da2f895500a786ed36cb295e9003"
+ msec: 4896
+ hash: "5b12e9d17d9d464b055601db9cf0da44"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 99
+ x: 495; y: 115
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7904
- hash: "cd369fc5dc31814208e56cf7cd0decea"
+ msec: 4912
+ hash: "25333e1f0cc9cfc664fd7369af544c06"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 521; y: 97
+ x: 494; y: 117
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7920
- hash: "5fee72994b65a45b4900a3073f86a3e1"
- }
- Frame {
- msec: 7936
- hash: "9a2f8a65d842b8f92998e6411f7cd53c"
+ msec: 4928
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 7952
- hash: "2848d69017ce71ae101ccdfa7c67f933"
+ msec: 4944
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 7968
- hash: "6568aa88e81f988f65da435df7166167"
+ msec: 4960
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 7984
- hash: "d5f15ee08a2d7667786757a378a7a7f4"
+ msec: 4976
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8000
- hash: "9b566bd02a561b32d1a4c1ec99c2e2c3"
+ msec: 4992
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8016
- hash: "580419e1c9e91046547d913f6b8790a4"
+ msec: 5008
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8032
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ msec: 5024
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8048
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ msec: 5040
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8064
- hash: "a5a3cd610ec0b35af1295ee6c41e09e3"
+ msec: 5056
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 521; y: 97
+ x: 494; y: 117
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"
+ msec: 5072
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8368
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5088
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8384
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5104
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8400
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5120
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8416
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5136
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8432
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5152
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8448
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5168
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8464
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5184
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8480
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5200
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8496
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5216
+ hash: "04290d8d62436c8a812f886e0a56ec1b"
}
Frame {
- msec: 8512
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5232
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8528
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5248
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8544
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5264
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8560
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5280
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8576
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5296
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8592
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5312
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8608
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5328
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8624
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5344
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8640
- image: "listview.8.png"
+ msec: 5360
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8656
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5376
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8672
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5392
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8688
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5408
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8704
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5424
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8720
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5440
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8736
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5456
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8752
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5472
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8768
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5488
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8784
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5504
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8800
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5520
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8816
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5536
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8832
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5552
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8848
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5568
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8864
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5584
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8880
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5600
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8896
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5616
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8912
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5632
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8928
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5648
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8944
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5664
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8960
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5680
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8976
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5696
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 8992
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5712
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9008
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5728
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9024
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5744
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9040
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5760
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9056
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5776
+ image: "listview.6.png"
}
Frame {
- msec: 9072
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5792
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9088
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5808
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9104
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5824
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9120
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5840
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9136
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5856
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9152
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5872
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9168
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5888
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9184
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5904
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9200
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5920
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9216
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5936
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9232
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5952
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9248
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5968
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9264
- hash: "1171be123a361d72859c25434573482c"
+ msec: 5984
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9280
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6000
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9296
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6016
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9312
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6032
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9328
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6048
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9344
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6064
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9360
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6080
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9376
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6096
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9392
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6112
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
Frame {
- msec: 9408
- hash: "1171be123a361d72859c25434573482c"
+ msec: 6128
+ hash: "dbd87bf02d698b7f053d307ef0c98452"
}
}
diff --git a/tests/auto/declarative/qmlvisual/ListView/enforcerange.qml b/tests/auto/declarative/qmlvisual/ListView/enforcerange.qml
new file mode 100644
index 0000000..a796be7
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/ListView/enforcerange.qml
@@ -0,0 +1,31 @@
+import QtQuick 1.0
+
+Item {
+ id: document
+ width: 200; height: 200
+
+ ListView {
+ id: serviceListView
+ anchors.fill: parent
+ model: 100
+
+ preferredHighlightBegin: 90
+ preferredHighlightEnd: 90
+
+ highlightRangeMode: ListView.StrictlyEnforceRange
+
+ delegate: Component {
+ Item {
+ height: 15 + ((serviceListView.currentIndex == index) ? 20 : 0)
+ width: 200
+ Rectangle { width: 180; height: parent.height - 4; x: 10; y: 2; color: "red" }
+ }
+ }
+ }
+
+ Rectangle {
+ y: 90; width: 200; height: 35
+ border.color: "black"
+ color: "transparent"
+ }
+}
diff --git a/tests/auto/declarative/qmlvisual/ListView/listview.qml b/tests/auto/declarative/qmlvisual/ListView/listview.qml
index 341311d..6171c75 100644
--- a/tests/auto/declarative/qmlvisual/ListView/listview.qml
+++ b/tests/auto/declarative/qmlvisual/ListView/listview.qml
@@ -1,6 +1,8 @@
import QtQuick 1.0
Rectangle {
+ id: root
+ property int current: 0
width: 600; height: 300; color: "white"
ListModel {
@@ -49,14 +51,16 @@ Rectangle {
Component {
id: myHighlight
- Rectangle { color: "black" }
+ Rectangle { width: 200; height: 50; color: "black" }
}
ListView {
id: list1
width: 200; height: parent.height
model: myModel; delegate: myDelegate
- highlight: myHighlight; currentIndex: list3.currentIndex
+ highlight: myHighlight
+ currentIndex: root.current
+ onCurrentIndexChanged: root.current = currentIndex
focus: true
}
ListView {
@@ -66,13 +70,14 @@ Rectangle {
preferredHighlightBegin: 80
preferredHighlightEnd: 220
highlightRangeMode: "ApplyRange"
- currentIndex: list1.currentIndex
+ currentIndex: root.current
}
ListView {
id: list3
x: 400; width: 200; height: parent.height
model: myModel; delegate: myDelegate; highlight: myHighlight
- currentIndex: list1.currentIndex
+ currentIndex: root.current
+ onCurrentIndexChanged: root.current = currentIndex
preferredHighlightBegin: 125
preferredHighlightEnd: 125
highlightRangeMode: "StrictlyEnforceRange"
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png
index c59b816..85f8691 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png
index d4dbc70..3cbb470 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png
deleted file mode 100644
index ed9d345..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png
deleted file mode 100644
index ed9d345..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png
deleted file mode 100644
index 45ee400..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png
deleted file mode 100644
index c73e158..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png
deleted file mode 100644
index e2fff6d..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png
deleted file mode 100644
index d7a13df..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png
deleted file mode 100644
index beb3094..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png
deleted file mode 100644
index beb3094..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png
deleted file mode 100644
index beb3094..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png
deleted file mode 100644
index d3a2650..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png
index a09dd28..521e818 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png
deleted file mode 100644
index 600462a..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png
deleted file mode 100644
index 6defca0..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png
deleted file mode 100644
index 91967e1..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png
index d099a79..f5e7640 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png
index 385efc8..7b0c620 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png
index 25a7c3c..8c40a7a 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png
index 25a7c3c..8dfcf7b 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png
deleted file mode 100644
index 7a24f51..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png
deleted file mode 100644
index 7a24f51..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png
deleted file mode 100644
index 45ee400..0000000
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml
index 08cb46b..af9e005 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml
+++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml
@@ -6,1369 +6,1309 @@ VisualTest {
}
Frame {
msec: 16
- hash: "a327426c93b523526f993b5271ab4501"
+ image: "packageviews.0.png"
}
Frame {
msec: 32
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 48
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 64
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 80
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 96
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 112
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 128
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 144
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 160
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 176
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 192
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 208
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 224
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 240
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 256
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 272
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 288
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 304
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 320
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 336
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 352
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 368
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 384
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 400
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 416
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 432
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 448
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 464
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 480
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 496
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 512
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 528
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 544
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 560
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 576
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 592
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 608
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 624
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 640
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 656
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 672
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 688
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 704
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 720
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 736
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 752
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 768
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 784
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 26; y: 79
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 800
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 816
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 832
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 848
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 26; y: 79
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 864
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 880
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "ae75402b2fa678a20c32d743e2b297a0"
}
Frame {
msec: 896
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "76a9721ada8280925ff32e7207c01944"
}
Frame {
msec: 912
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "87fb13adce4e2af05a7ad2f8cd18bad9"
}
Frame {
msec: 928
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "cd7be3a5b9bae876998770dc52dbcd86"
}
Frame {
msec: 944
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "3ba0b907dad0bfa9b20337d41661030b"
}
Frame {
msec: 960
- image: "packageviews.0.png"
+ hash: "9748e4da669f474bf10abfe7a9c013fd"
}
Frame {
msec: 976
- hash: "a327426c93b523526f993b5271ab4501"
+ image: "packageviews.1.png"
}
Frame {
msec: 992
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "5af677254d12dc96b82cde90c5a65140"
}
Frame {
msec: 1008
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "72cb4e75acb87de293a3cb1872eb946b"
}
Frame {
msec: 1024
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "9b057090349c0c544036a33a60710920"
}
Frame {
msec: 1040
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "ae19cf81092e75979b6471c0b05541cf"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 48; y: 165
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1056
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "0f42c19fee319bc8c27a89e9692c5cd9"
}
Frame {
msec: 1072
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "865e19e35f361b08e6e844aa88d149eb"
}
Frame {
msec: 1088
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "d5fcf7bd78da8918a3512a76189c7202"
}
Frame {
msec: 1104
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "d2a6b42c2a3f7ca9eb35acc47f1faaf6"
}
Frame {
msec: 1120
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "1388e856eb04fc24091c94406f4b5118"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 48; y: 165
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1136
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "1388e856eb04fc24091c94406f4b5118"
}
Frame {
msec: 1152
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "d529b6dcf510392488b370f6cfb87b3c"
}
Frame {
msec: 1168
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "a50b1f2869c95f97a194a95581fa7be9"
}
Frame {
msec: 1184
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "4bbee959f95548c3e76fb60ad363c184"
}
Frame {
msec: 1200
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "5ec0185f4479377579822f92eb7f375a"
}
Frame {
msec: 1216
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "263d09b9447d942c6c048139164d4427"
}
Frame {
msec: 1232
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "291cc81fc3f82bca46db4e4403f39d49"
}
Frame {
msec: 1248
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "c212f98ededa9ce7fc0fec697116a8e2"
}
Frame {
msec: 1264
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "4309ef22d0c36d28a462ab2d4bf2cabd"
}
Frame {
msec: 1280
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "f899f861c569416708c6754d821239e9"
}
Frame {
msec: 1296
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "ed5ec237020ff06f258ce6e1b31e5eb8"
}
Frame {
msec: 1312
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "98f3fe1c211d4f7bdc47b4a485226f14"
}
Frame {
msec: 1328
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "40e376d37a85d225c46579b8f7c27159"
}
Frame {
msec: 1344
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "cc8a178bf0cfc285185d17b37722bf41"
}
Frame {
msec: 1360
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "b612439873d0eeb015d31cccd8e5a436"
}
Frame {
msec: 1376
- hash: "a327426c93b523526f993b5271ab4501"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 57; y: 164
- modifiers: 0
- sendToViewport: true
+ hash: "48c436165872098b474d0c691df11473"
}
Frame {
msec: 1392
- hash: "a327426c93b523526f993b5271ab4501"
+ hash: "48c436165872098b474d0c691df11473"
}
Mouse {
- type: 5
- button: 0
+ type: 2
+ button: 1
buttons: 1
- x: 57; y: 162
+ x: 44; y: 50
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
+ hash: "48c436165872098b474d0c691df11473"
}
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
+ hash: "48c436165872098b474d0c691df11473"
}
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
+ hash: "48c436165872098b474d0c691df11473"
}
Frame {
msec: 1456
- hash: "34290c1435c1a96d08152479d2d1334e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 54; y: 126
- modifiers: 0
- sendToViewport: true
+ hash: "48c436165872098b474d0c691df11473"
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 54; y: 126
+ x: 44; y: 50
modifiers: 0
sendToViewport: true
}
Frame {
msec: 1472
- hash: "ef5fb09ec8fb4b0d97c864618d6f6231"
+ hash: "48c436165872098b474d0c691df11473"
}
Frame {
msec: 1488
- hash: "d5b4c2e1d4b0bc877c99739a67b4a4fb"
+ hash: "33cb50c11326c0589c7cc43ba6193e03"
}
Frame {
msec: 1504
- hash: "a3623a3f253590d51ee03b6849e88edb"
+ hash: "3f7e7534ccd7105762c78afab5ab997d"
}
Frame {
msec: 1520
- hash: "4c1115f1041629b7c37cf4ae001fd7d3"
+ hash: "53b23d3eb2aaa1b21e4abaf9c0bfc7f2"
}
Frame {
msec: 1536
- hash: "845bb3d1f52bee4a469fb12d6875a323"
+ hash: "609b37b12154291a28961210e81049fb"
}
Frame {
msec: 1552
- hash: "eb08b5a671149005dbafc8507bb78b18"
+ hash: "33cc6e17d087c251381ecf1b4cb9887c"
}
Frame {
msec: 1568
- hash: "16744a5b90b29954faf0710010ac6369"
+ hash: "dcb3e716035ca3f43895fda99c27e0d8"
}
Frame {
msec: 1584
- hash: "322bbe367fbbf0bf07f9153da652a5fc"
+ hash: "56bb753199873fac4ed9f30682bd1a3c"
}
Frame {
msec: 1600
- hash: "257769f7c3e24bb2d0cd674dfbe42913"
+ hash: "8b744c5cbf6154b73bd6c4fe6b087f0a"
}
Frame {
msec: 1616
- hash: "8e299cbcaeae4d53d0fc05e03d36e0d9"
+ hash: "f2d5996d7fd5391a4d96493e9ef6a637"
}
Frame {
msec: 1632
- hash: "f3fb7f30336045abb4557247aab5bde1"
+ hash: "4407a05b64c68d43b29124df1f0d8f44"
}
Frame {
msec: 1648
- hash: "468400fb4e9bfa454ea00f19aa5d77b5"
+ hash: "b71e43a8f7aa7a58cea80629b782a972"
}
Frame {
msec: 1664
- hash: "429cc820ada7a515b2cb71f133320949"
+ hash: "cca961a04dfdf9da8282219f2022fd2e"
}
Frame {
msec: 1680
- hash: "721ec7594d8f815e5648eb8d570d1179"
+ hash: "f3349a7ae7d7a97a6665476244d46dd6"
}
Frame {
msec: 1696
- hash: "9bc4105a0456c36738c435323e690db1"
+ hash: "78fc6123a10c027faa08dc2ff8318acc"
}
Frame {
msec: 1712
- hash: "e54a84718dbdc45dd814089051772585"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1728
- hash: "2c969450ede6b6ea7e0e68ee54d02aaa"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1744
- hash: "c2015dd1d4bd223a7fe1df03027af2f3"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1760
- hash: "74108fedfb0967adea181893834bcd9b"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1776
- hash: "b04a22f1cfde6ede57117992cd97dc1c"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1792
- hash: "271d71cb03dd38100812466a973b79ef"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1808
- hash: "130709eecd8eca395085020a83e7553a"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1824
- hash: "a0e5e187ed5245fd766803d266195e6b"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1840
- hash: "d29c145f3ba39a7c2c6ac54b27f9cea1"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1856
- hash: "6e41349b4adb6e37a2f9f2482c0aa5b1"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1872
- hash: "c02c52d3c87c6befb65f3bf392981cd5"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1888
- hash: "ec48d113c8468bd1e1b465e248eecaee"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1904
- hash: "a2c9b917d1f0cff0e088d3b624d9eeb8"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1920
- image: "packageviews.1.png"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1936
- hash: "c4d4f8a351316b4a33f42f5fb030f304"
+ image: "packageviews.2.png"
}
Frame {
msec: 1952
- hash: "1baee6be1da687309d84a992e430c915"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1968
- hash: "4245f02817f7a674c34c581cbd9e1181"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 1984
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 76
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2000
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 2016
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
}
Frame {
msec: 2032
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "6056cb02b921b56c63696d7fe9fe90fa"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 76
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2048
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "9f94c38547da1855e4bd3ae498aed705"
}
Frame {
msec: 2064
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "783f73da3736a2c554c8d749ce0522c0"
}
Frame {
msec: 2080
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "9a0e1c2bed75874381e4b1ce275d0f68"
}
Frame {
msec: 2096
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "e2ce85192977e6422c89190b3cea4518"
}
Frame {
msec: 2112
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "ba9c80ff0ed723bca702cb6b4c6dfb76"
}
Frame {
msec: 2128
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "7e194db1b86bc7346248d2acf34af286"
}
Frame {
msec: 2144
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "cdd013bb8ee5880b16449efc99dd3ae5"
}
Frame {
msec: 2160
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "3ef7d0fb43c2a1c1398f1152573974e0"
}
Frame {
msec: 2176
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "176d1a86257cc85315dac4ecfe33f543"
}
Frame {
msec: 2192
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "6def1267e573217a19e7b8e2cf6d7b6c"
}
Frame {
msec: 2208
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "f679db34d99e24cda2e41c2afeaf551e"
}
Frame {
msec: 2224
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "54a27193c5e59cd7220b65d8fbbd9061"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 112; y: 79
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2240
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "171db3d0bf50062a0d7edd8e4c174024"
}
Frame {
msec: 2256
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "9a7d293dc455e1ef0d18f44c3db7eed7"
}
Frame {
msec: 2272
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "83bef2586d5abeb0ac8765d62135d308"
}
Frame {
msec: 2288
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "56fed2e01cc8a6b9ccbf15731d4e533b"
+ }
+ Frame {
+ msec: 2304
+ hash: "10174f2574c51155b8ee77ae545ac76d"
}
Mouse {
- type: 2
+ type: 3
button: 1
- buttons: 1
- x: 70; y: 89
+ buttons: 0
+ x: 112; y: 79
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2304
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
- }
- Frame {
msec: 2320
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "107928ffebd936080325a1f4e39a0ac0"
}
Frame {
msec: 2336
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "107928ffebd936080325a1f4e39a0ac0"
}
Frame {
msec: 2352
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 70; y: 89
- modifiers: 0
- sendToViewport: true
+ hash: "d46e040f85295e66d8b22185be553d3e"
}
Frame {
msec: 2368
- hash: "2fa6bb20f29467713c94886c6fffe5e3"
+ hash: "3368a34c316486a779d62d143588b425"
}
Frame {
msec: 2384
- hash: "3b9a75225adddb01e92286463e15bf98"
+ hash: "8f4cd4223c05e1b06a688c5eabc2a854"
}
Frame {
msec: 2400
- hash: "32f99602756898b4ec607d4124b5120f"
+ hash: "b576bf54b4bae38e8af6d922b3c73463"
}
Frame {
msec: 2416
- hash: "60007f14752d2d87ba6e335ad596f1ad"
+ hash: "a3a238f5bf182ec6afc398569fd51ac7"
}
Frame {
msec: 2432
- hash: "dcfad2407f53f83964fa7be762a137bd"
+ hash: "a31329ba054a6fe144c030cffb5bd401"
}
Frame {
msec: 2448
- hash: "fcc1a30a33bec046868734014132eb70"
+ hash: "0a4b96a93e62359b6003daa703af1a5f"
}
Frame {
msec: 2464
- hash: "f60592829a2765b3cd3a0cecb9c45426"
+ hash: "a16f126d874d957b879f45d36e88df34"
}
Frame {
msec: 2480
- hash: "a0e26063acd1b53b5eeeb31187f38336"
+ hash: "89735c5b14f075b8f65533d16b3f714a"
}
Frame {
msec: 2496
- hash: "d7f3e776038bd479db292bcba3a65fc7"
+ hash: "5d67dac0c4d2cf60e4cb717f4e4bc25f"
}
Frame {
msec: 2512
- hash: "4af31954235ab8a7cf8462eaa64d7dda"
+ hash: "dbfcc86e621a140466dd2a9215087e81"
}
Frame {
msec: 2528
- hash: "aff3f287c07f546e0d3e9e68731d82fe"
+ hash: "9f8dfa788048466dc07463e83d0377ff"
}
Frame {
msec: 2544
- hash: "75fbc4e26466e8a1f66503addfcbb525"
+ hash: "021e1edec94a1909790a4acdbbc71fd8"
}
Frame {
msec: 2560
- hash: "cb4c91f725ec46dd066475efc2bc2d65"
+ hash: "f16be9ff4aba07708d469d6cfb80f1c2"
}
Frame {
msec: 2576
- hash: "106434203ccc2fd8246c56520095a473"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2592
- hash: "129ced0e7fc406e81b1ced72397adc5c"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2608
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2624
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2640
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2656
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2672
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2688
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2704
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2720
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2736
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 116; y: 165
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2752
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2768
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2784
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
}
Frame {
msec: 2800
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1ab35df24a27349264ec282eb1f53018"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 116; y: 165
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2816
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "a0aa5583886efc9bb0571bbb02fdb051"
}
Frame {
msec: 2832
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "a0aa5583886efc9bb0571bbb02fdb051"
}
Frame {
msec: 2848
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "edec25fdce2e05c0456434be4b8fad84"
}
Frame {
msec: 2864
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "0c2061fc908c98980404b9e08acdc2f2"
}
Frame {
msec: 2880
- image: "packageviews.2.png"
+ hash: "7bb02b032c1dcb4a7b3e6604ea5a8a8d"
}
Frame {
msec: 2896
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ image: "packageviews.3.png"
}
Frame {
msec: 2912
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "3a80012f6ca448fc30db70e9bcb23ddc"
}
Frame {
msec: 2928
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "22a68838e9f6039e782facce7cfe0c9b"
}
Frame {
msec: 2944
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "243fcc73e46db96ab6a91748adeff1a9"
}
Frame {
msec: 2960
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "433bf03a821da5641909785b4c22cb55"
}
Frame {
msec: 2976
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "66be8aa73b1e7173d899df3c0b9072a6"
}
Frame {
msec: 2992
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "d7e563c1a1db45865794351daea5eb08"
}
Frame {
msec: 3008
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "cc4345c2d4d0d7748c352a22f63030cb"
}
Frame {
msec: 3024
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "382172adf3a339cac16a3e185ef4bb05"
}
Frame {
msec: 3040
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "6019a3eac1825acdeac24d39c898d506"
}
Frame {
msec: 3056
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "ac4b9427592a6fe7585625de8d1bff96"
}
Frame {
msec: 3072
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3088
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3104
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3120
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3136
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3152
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3168
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 80; y: 189
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3184
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3200
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3216
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3232
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 80; y: 189
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3248
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7cf95f1bc67a90c0df788787589a75a9"
}
Frame {
msec: 3264
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "a623e09cddb4304db658e30aef433dd8"
}
Frame {
msec: 3280
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "4dce74fbb6649138a6ea6c288818fda5"
}
Frame {
msec: 3296
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "2356d6d1f8481cf60542126f197ee0b1"
}
Frame {
msec: 3312
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "7553601e70a7ccc3c60306fcf4999bed"
}
Frame {
msec: 3328
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "bc86afd210d18dc68b433d70705b6603"
}
Frame {
msec: 3344
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "8538d87120dd14958f92b81ceff304a3"
}
Frame {
msec: 3360
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "2a8d299ff16589069d493bbab2ceda53"
}
Frame {
msec: 3376
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "9f92b838c36e46d61a78f9013f04b580"
}
Frame {
msec: 3392
- hash: "49903693b112d5f35c4e877bef6bbdb0"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 49; y: 162
- modifiers: 0
- sendToViewport: true
+ hash: "7e6710b5491d5b9ad9a84691eadaa66c"
}
Frame {
msec: 3408
- hash: "49903693b112d5f35c4e877bef6bbdb0"
+ hash: "1b165e39ff01747d5e9ad0d8769c8ee9"
}
Frame {
msec: 3424
- hash: "49903693b112d5f35c4e877bef6bbdb0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 49; y: 161
- modifiers: 0
- sendToViewport: true
+ hash: "f78ad1eeb030eb58f8140da041acf4cd"
}
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
+ hash: "f009dcb6b085ae38a45206f35ab37754"
}
Frame {
msec: 3456
- hash: "49903693b112d5f35c4e877bef6bbdb0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 48; y: 153
- modifiers: 0
- sendToViewport: true
+ hash: "371dd67bf5a16ea085a256dd2e2583f9"
}
Mouse {
- type: 5
- button: 0
+ type: 2
+ button: 1
buttons: 1
- x: 48; y: 149
+ x: 75; y: 164
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
+ hash: "9a0606cd6930b3f992f0533f3f6a0f7a"
}
Frame {
msec: 3488
- hash: "4c77d402b995297dadb5e671f071605f"
+ hash: "1d538ccb1874fe2ddb410d48ca668d74"
}
Frame {
msec: 3504
- hash: "babd28626a81bd48b39b56f8da69c360"
+ hash: "71e08cb1eced66950e5893306b3043e7"
}
Frame {
msec: 3520
- hash: "71654a76f9b94fafaf3767003598fb96"
+ hash: "71e08cb1eced66950e5893306b3043e7"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 75; y: 164
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3536
- hash: "87ad69a660e072e71f940db93be3a949"
+ hash: "71e08cb1eced66950e5893306b3043e7"
}
Frame {
msec: 3552
- hash: "147f7f3f1913bc5ac5889c1a4daa8026"
+ hash: "2da0d9bb50d97ca78ee56f3c528a7db5"
}
Frame {
msec: 3568
- hash: "9c26b3ad7a5dacd56028afa7bf4deef6"
+ hash: "7f5105df4d41a6739ce13d69451d6059"
}
Frame {
msec: 3584
- hash: "18611ff90e5af36c9b6396c3df4cd646"
+ hash: "8d171773d643ca5bfb095208efe841a9"
}
Frame {
msec: 3600
- hash: "84701fd73ed8e1951bd4c806b70654ac"
+ hash: "8aa93bddb58d0533b03d2b7fc6efb839"
}
Frame {
msec: 3616
- hash: "42b40f1683beb23f4fe5ade066c0626f"
+ hash: "26e2bcff7c3de9995e29fd8a06db4139"
}
Frame {
msec: 3632
- hash: "8c6aeefaa6f36cdffcf7bdb1597c6fbe"
+ hash: "94fe4626d8f978649bf200bf79885ec0"
}
Frame {
msec: 3648
- hash: "731cea2e0d8fb8aac6ae919b23b89b87"
+ hash: "61e92064d9da2db6ea0adfdffaad81f6"
}
Frame {
msec: 3664
- hash: "d4dc70a8e09e7ec03e7c1f5123b7abef"
+ hash: "54d5845c08eb5cc9263c84146fd9fcd2"
}
Frame {
msec: 3680
- hash: "5246e2f52aa104e8030eef105a5b5a7c"
+ hash: "d10a128980a46713093899696110d81e"
}
Frame {
msec: 3696
- hash: "a9c3d0034c09ba81d19d57ff550d7b4f"
+ hash: "ff6301533f4fb29194f20a4520824030"
}
Frame {
msec: 3712
- hash: "e9092b1be19273f1f29912cd493dd238"
+ hash: "598b6e7c6c6c0de77b4793d1f68beea6"
}
Frame {
msec: 3728
- hash: "c2b19c7b818c94e932558676a026f049"
+ hash: "e3d123e179a6930e1bc1864095621607"
}
Frame {
msec: 3744
- hash: "6627c4d6daab8e6500dbd0d921bc1ebd"
+ hash: "b1bb4c350969f579630680803e622662"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 72; y: 147
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3760
- hash: "45c584ca18e8bfd6aa495c16a977662a"
+ hash: "3dd276bb96dd3a5ef96095e0b8251c05"
}
Frame {
msec: 3776
- hash: "de79039a8bb623f7d48afe1549ae23e0"
+ hash: "144402c1397313fb5d13b4972bb3a450"
}
Frame {
msec: 3792
- hash: "076d29278466038071095093266553f5"
+ hash: "144402c1397313fb5d13b4972bb3a450"
}
Frame {
msec: 3808
- hash: "73ed162dc5f9983bf22446f63691f7e4"
+ hash: "144402c1397313fb5d13b4972bb3a450"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 72; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 72; y: 146
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3824
- hash: "4cc3648635884a69191f0cfe2051f621"
+ hash: "144402c1397313fb5d13b4972bb3a450"
}
Frame {
msec: 3840
- image: "packageviews.3.png"
+ hash: "6dbc00069eca813c20731afdf0d25e35"
}
Frame {
msec: 3856
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ image: "packageviews.4.png"
}
Frame {
msec: 3872
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "1f7a173f70f04adcc28481cfa40ad82e"
}
Frame {
msec: 3888
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "5189e3a7f4c93d6095d526ee4583adea"
}
Frame {
msec: 3904
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "03ef5fa51d7455e58c34c52be2b2625b"
}
Frame {
msec: 3920
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "6589088e4efab3426d5b3c08f885fcc4"
}
Frame {
msec: 3936
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "35593c99aa3f7040efe6420ce90426f7"
}
Frame {
msec: 3952
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "61e13ba4ed7251e607ae299841b55fea"
}
Frame {
msec: 3968
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "7bc5f663e54b6ac10b7aa8787de0483a"
}
Frame {
msec: 3984
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "141e2fa188fabeef8587770b2d18538c"
}
Frame {
msec: 4000
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "5f59ea38bb55096d6ca50ffb9e9706ec"
}
Frame {
msec: 4016
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "9ff31c7768afa3eba211e862bbfddda1"
}
Frame {
msec: 4032
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "f8731aa264c5e534f13f4fa89fc320a1"
}
Frame {
msec: 4048
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "87bc86979d05432f8ad16ca1f0537fa0"
}
Frame {
msec: 4064
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "749f93235f677af13d162aacfde3840a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 69; y: 113
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4080
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
}
Frame {
msec: 4096
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
}
Frame {
msec: 4112
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
}
Frame {
msec: 4128
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 70; y: 112
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4144
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 70; y: 112
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4160
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3af211e45026670fef0e5b391bad3455"
}
Frame {
msec: 4176
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "de1b3a0b2ffb02f4969ce532bb7d6ad9"
}
Frame {
msec: 4192
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "1e0bb98146f64975c4d5b8f8ef65319c"
}
Frame {
msec: 4208
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3540ee1fc403cc923100888e3bd15168"
}
Frame {
msec: 4224
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "8f8178db769ed067e40c06ec2a8f3e3f"
}
Frame {
msec: 4240
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "18310df1f8f735313e71739c58b2e42d"
}
Frame {
msec: 4256
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "0797a57080ad60f00a185ad7eecbc40f"
}
Frame {
msec: 4272
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "80cffb466c0e8947f775a4b7a677cd20"
}
Frame {
msec: 4288
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "3f80ed589a282924e1dd4fbbd99078b0"
}
Frame {
msec: 4304
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "7368b2da0c37d4b212fff8222244d413"
}
Frame {
msec: 4320
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "7fb81e12fc1cb3e6f08a4bd0af23f40d"
}
Frame {
msec: 4336
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
- }
- Frame {
- msec: 4352
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
- }
- Frame {
- msec: 4368
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ hash: "6677c15df6babf38036d4083c63c2684"
}
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
+ x: 67; y: 89
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4384
- hash: "d06fbe4c7dd8bd392172aa5b29c6ceee"
+ msec: 4352
+ hash: "106d90e84bd5b88c5df048ffc717e843"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 152; y: 166
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4368
+ hash: "ce69c7e561e9f0c1fd5f3dba2ffda3e8"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 153; y: 163
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4384
+ hash: "63b2956e9bad879bef156a318162656c"
}
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
+ hash: "e9f02812bdd7071d1ceb71e0c2195f3a"
}
Frame {
msec: 4416
- hash: "ac75b9adaecd10206c4daa07c93adb27"
+ hash: "e9f02812bdd7071d1ceb71e0c2195f3a"
}
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
+ x: 67; y: 88
modifiers: 0
sendToViewport: true
}
Frame {
msec: 4432
- hash: "539ec244fd42801cfcf97adc12f48786"
+ hash: "e9f02812bdd7071d1ceb71e0c2195f3a"
}
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
+ x: 67; y: 87
modifiers: 0
sendToViewport: true
}
@@ -1376,2376 +1316,452 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 166; y: 83
+ x: 67; y: 87
modifiers: 0
sendToViewport: true
}
Frame {
+ msec: 4448
+ hash: "e9f02812bdd7071d1ceb71e0c2195f3a"
+ }
+ Frame {
msec: 4464
- hash: "4b508eb55971a03c6dc8a50d0244fa21"
+ hash: "e33d1f7d03ec85600cb61896c66fd9ca"
}
Frame {
msec: 4480
- hash: "2ceb497ca10e6448a019b62a225a72e4"
+ hash: "72347f42ad925abdc614244b2ec01e7a"
}
Frame {
msec: 4496
- hash: "1fd9b89ebcb8e707c9b1b13ba64061b4"
+ hash: "5fbd0e2ce5e2fe609dfc5e5643bfbc8a"
}
Frame {
msec: 4512
- hash: "24a3a48843860f643e55ca6dfec84f98"
+ hash: "4bcb24b700ac09da7387738bce36def5"
}
Frame {
msec: 4528
- hash: "48ea9398101f44a707c44ee1c5102d0c"
+ hash: "7c489062131ef9fcdfe765cd0361361b"
}
Frame {
msec: 4544
- hash: "d8f2cebcdb542e75bbbaa4391ca881b8"
+ hash: "c4c1834200b2b7b3eb38b20d7147b8ee"
}
Frame {
msec: 4560
- hash: "df35827ac111c67588922aadd45b3c85"
+ hash: "49994b7471ec620ff52e5ba516bbb5d4"
}
Frame {
msec: 4576
- hash: "c1e612548c8d5c2f844e94ad4c0f1db4"
+ hash: "e1cf4e92e291b8509a8eb8a84f70dcad"
}
Frame {
msec: 4592
- hash: "c298bccebeb1f4528c935e5fd256479c"
+ hash: "9c7d6d53aa6089712389b1c2b4207d15"
}
Frame {
msec: 4608
- hash: "4c01d969eba4eca32b8a3b7f6f9c99f0"
+ hash: "408731f3b11d888fff1ef9340ad1c568"
}
Frame {
msec: 4624
- hash: "66c783ae698cb91195088591a9bd67c1"
+ hash: "d34f3092b84dea762adf7cf86c80abc6"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 67; y: 67
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4640
- hash: "5419f6889162fb0db6b8c9e521f57f4f"
+ hash: "d0202d3154721c968301e4fdb759b5d2"
}
Frame {
msec: 4656
- hash: "d153dbf30acf36145d7fcb8e37dd5c6d"
+ hash: "89601cb9b82465f6ae96156b7e259e70"
}
Frame {
msec: 4672
- hash: "ffbf186683dc979ef29cdd5ff50296fc"
+ hash: "7c775a699646acf45f26dea5bd5db783"
}
Frame {
msec: 4688
- hash: "ddcedde95d1ebcafe5b73924ecfa047a"
+ hash: "be285c318afaeb932a2fd50fdc357813"
}
Frame {
msec: 4704
- hash: "d94b9e92f2c1a5e0ea2f8dd21a905517"
+ hash: "5ddee39853aa1b8d1be287c86e5b763c"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 67; y: 67
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4720
- hash: "92c27d497128ccdcbfe8224a0f55a302"
+ hash: "5ddee39853aa1b8d1be287c86e5b763c"
}
Frame {
msec: 4736
- hash: "7146017581b03e6551822653e54d5001"
+ hash: "8386713865c12636ce442cd31eacb8ba"
}
Frame {
msec: 4752
- hash: "a39567e01b8963d3b71f5f525d1582d4"
+ hash: "9f4df793b3b6320e238b451e35183b9f"
}
Frame {
msec: 4768
- hash: "842654ef5a24143e41412b2450b6024c"
+ hash: "3cd41f6ab2303dd666269cca13dc95e3"
}
Frame {
msec: 4784
- hash: "c2a002588b4b3f89806d6d283c39ea54"
+ hash: "504a3dd9018c3c725a92a9d6e84743fc"
}
Frame {
msec: 4800
- image: "packageviews.4.png"
+ hash: "a703cbbef38b49be2d3033163ad450e7"
}
Frame {
msec: 4816
- hash: "2bea5cc22ea4989f8f07fbf62d09880b"
+ image: "packageviews.5.png"
}
Frame {
msec: 4832
- hash: "b8326b959b75b05c050ff91f0c34fa55"
+ hash: "c4f7130484f17854eace9e541c92207a"
}
Frame {
msec: 4848
- hash: "d5f2e63bd18b2067221ec80764c7500d"
+ hash: "406a0371c7366fadefcbae7d428d1879"
}
Frame {
msec: 4864
- hash: "157f93ebaa95664965539237ba121265"
+ hash: "f9d6128c4fe60d95a001642cb80ccb99"
}
Frame {
msec: 4880
- hash: "5bda47a6295e500f24b6ba7bf04e9282"
+ hash: "2fb6886550a0eb7927274cd9cfc46819"
}
Frame {
msec: 4896
- hash: "0134d543cfbf085eb4b5ea4a0f5ae32f"
+ hash: "dd4ac1eb6d18bc267b2f39d6d291a8bd"
}
Frame {
msec: 4912
- hash: "d27f2ad3bd9817c23caf01ba64335776"
+ hash: "7f1e1114fe65b7a54364a04ad7697d4c"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 66; y: 45
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4928
- hash: "4dd96288601f4481a24b75afedd34599"
+ hash: "60a4882d0384489465fec8660933c29c"
}
Frame {
msec: 4944
- hash: "d5ebfbd190fe2482af54004ad9434818"
+ hash: "2330e35830fb707c9d9074b54cd5c7f6"
}
Frame {
msec: 4960
- hash: "6a8c5c64228b3be521407e00c2b6a1de"
+ hash: "02c275412e380c7f2878bc1f01e2850a"
}
Frame {
msec: 4976
- hash: "645219e7aa6761bef1b11ac8f17f1f42"
+ hash: "02c275412e380c7f2878bc1f01e2850a"
}
Frame {
msec: 4992
- hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ hash: "02c275412e380c7f2878bc1f01e2850a"
}
Frame {
msec: 5008
- hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ hash: "02c275412e380c7f2878bc1f01e2850a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 66; y: 44
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 66; y: 43
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 66; y: 43
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 5024
- hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ hash: "02c275412e380c7f2878bc1f01e2850a"
}
Frame {
msec: 5040
- hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ hash: "a304ddc3e20220f7ed06aeae22589927"
}
Frame {
msec: 5056
- hash: "00c3c11b9b266504b8cdbdf4edcc3a98"
+ hash: "8ef8e13dff7e5f12c1d0a7a0e438a24f"
}
Frame {
msec: 5072
- hash: "54fff3170fa43d99eca2c87381ecaf1e"
+ hash: "ef7ef97e56c6b7579e11022861dd3eb5"
}
Frame {
msec: 5088
- hash: "6a8c5c64228b3be521407e00c2b6a1de"
+ hash: "133613dd5ac9242ce0b6926986cd384a"
}
Frame {
msec: 5104
- hash: "f91cea801322d1bc6ac1b9eeae96c704"
+ hash: "eb5125c97b9deca07e999ec7e78986b3"
}
Frame {
msec: 5120
- hash: "d27f2ad3bd9817c23caf01ba64335776"
+ hash: "123c37efefdc1c8e6b27b7eff3bffff8"
}
Frame {
msec: 5136
- hash: "5bda47a6295e500f24b6ba7bf04e9282"
+ hash: "8443d904bcb63ab2d14cbb5a2e2a8fe7"
}
Frame {
msec: 5152
- hash: "d5f2e63bd18b2067221ec80764c7500d"
+ hash: "379826db02c7e5cb8ab9007a419e34f9"
}
Frame {
msec: 5168
- hash: "b10145c10c2bc9d01ec6a49a399f728e"
+ hash: "672d45cdc24a2e1286956e3ce00cab56"
}
Frame {
msec: 5184
- hash: "f0b759a49bf21b0c9b311a1dd02d7807"
+ hash: "cbaa7c4f52b2ebc1176a3bbe3e029487"
}
Frame {
msec: 5200
- hash: "1c5546c3ddbde95d10921c8c32fd2d67"
+ hash: "35d70b84722fecd08b1c03f01c5a9895"
}
Frame {
msec: 5216
- hash: "c2a002588b4b3f89806d6d283c39ea54"
+ hash: "65c1d1c4fc845229853836afd2e7a3c4"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 68; y: 19
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 5232
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "a238ffd4f6de5ca91bcf0e629407ad11"
}
Frame {
msec: 5248
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "42322853eef74b9b849d81d7aa2ea4af"
}
Frame {
msec: 5264
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "25fb0c4c04d9dcda865a8b254970330c"
}
Frame {
msec: 5280
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "565891a25190705df8b424e1e5e73ddd"
}
Frame {
msec: 5296
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "565891a25190705df8b424e1e5e73ddd"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 68; y: 19
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 5312
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "565891a25190705df8b424e1e5e73ddd"
}
Frame {
msec: 5328
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "39e05f846071d4ec9a1413922a928995"
}
Frame {
msec: 5344
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "7040400386930b34d989df4cdf36d125"
}
Frame {
msec: 5360
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "2d3c081a1bbb94952becfd486d455de5"
}
Frame {
msec: 5376
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "7a0719f22b0b74e4139ada77ca8d38d6"
}
Frame {
msec: 5392
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "40d070285de7865fa8f415ff06be69d3"
}
Frame {
msec: 5408
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "875ba6c617a4b5d157c747ead185247c"
}
Frame {
msec: 5424
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "2d0ef679259f503d42cc2267b8d95a4e"
}
Frame {
msec: 5440
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "b2aeceddd4d36e600f617578d64a4c32"
}
Frame {
msec: 5456
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "a065ec04aff7a7c164ed8c152130589f"
}
Frame {
msec: 5472
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "a09d94403ce40a8afb12e390aea3d848"
}
Frame {
msec: 5488
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "34b116228527a669dadbfc75f309d045"
}
Frame {
msec: 5504
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "5bee91cba46537ddaefe87f4e118d3d5"
}
Frame {
msec: 5520
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "d0d8bd32268f3e3a62a08514f0d53799"
}
Frame {
msec: 5536
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "b90c3915255d3f98700f8af0181fa6ee"
}
Frame {
msec: 5552
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5568
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5584
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5600
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5616
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5632
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5648
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5664
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5680
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5696
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5712
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5728
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5744
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5760
- image: "packageviews.5.png"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5776
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ image: "packageviews.6.png"
}
Frame {
msec: 5792
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5808
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5824
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5840
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5856
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5872
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5888
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5904
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5920
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
Frame {
msec: 5936
- hash: "1eb5d2140ff3c71d55a6e5338dd2853e"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
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"
+ hash: "8d52a504170547407fad6d8785b7199b"
}
}
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
index 99379f1..a9de3f8 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
+++ b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
@@ -17,18 +17,10 @@ Rectangle {
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"
+ id: listItem; Package.name: "list"; width:root.width/2; height: 25; color: "transparent"; border.color: "white"
MouseArea {
anchors.fill: parent
onClicked: myState.state = myState.state == "list" ? "grid" : "list"
@@ -50,12 +42,12 @@ Rectangle {
State {
name: "list"
ParentChange { target: myContent; parent: listItem }
- PropertyChanges { target: myContent; x: 0; y: 0; width: listItem.width }
+ PropertyChanges { target: myContent; x: 0; y: 0; width: listItem.width; height: listItem.height }
},
State {
name: "grid"
ParentChange { target: myContent; parent: gridItem }
- PropertyChanges { target: myContent; x: 0; y: 0; width: gridItem.width }
+ PropertyChanges { target: myContent; x: 0; y: 0; width: gridItem.width; height: gridItem.height }
}
]
@@ -64,7 +56,7 @@ Rectangle {
from: "*"; to: "*"
SequentialAnimation {
ParentAnimation{
- NumberAnimation { properties: "x,y,width"; easing.type: "InOutQuad" }
+ NumberAnimation { properties: "x,y,width,height"; easing.type: "InOutQuad" }
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/TEST_GUIDELINES b/tests/auto/declarative/qmlvisual/TEST_GUIDELINES
new file mode 100644
index 0000000..cb53b6e
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/TEST_GUIDELINES
@@ -0,0 +1,7 @@
+Guidelines for creating new visual tests:
+
+1. Keep it small. All visual tests should be able to run on a device with a screen of at least 640x360 pixels. Smaller than that is even better, because images of this side need to be processed and saved for every test (and even committed to the repository).
+
+2. Keep it short. It is hoped that these tests can be run regularly, perhaps even for every commit, and if you add up ten seconds for every time someone commits a change to QML then we'll be sitting here for a long time. Completeness is more important than haste, but consider the most time efficient ways to achieve said completeness. Do not forget about snapshot mode (tst_qmlvisual -help for details on -recordsnapshot) when testing that a static scene looks right.
+
+3. Avoid text. Text is relatively unstable due to platform specific peculiarities. If you need to identify an area, consider a unique color as opposed to a unique text label. If you must use Text, TextEdit, or TextInput, use the test-friendlier versions in the 'shared' directory.
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml b/tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml
index 611eaf5..9019812 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/bindinganimation.qml
@@ -14,15 +14,12 @@ Rectangle {
}
states: [
State {
+ when: myMouseArea.pressed
name: "hello"
PropertyChanges {
target: myRectangle
x: 50 + 50
}
- PropertyChanges {
- target: myMouseArea
- onClicked: page.state = ''
- }
}
]
transitions: [
@@ -35,6 +32,5 @@ Rectangle {
MouseArea {
id: myMouseArea
anchors.fill: parent
- onClicked: { page.state= 'hello' }
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.png
index 1b08c81..24c11be 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.png
index f3074fc..82492d4 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.png
index 1b08c81..a31f02a 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.png
index e2560e0..a029af6 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.png
index 2ddde86..c8367ec 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.png
index f3074fc..900156f 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.png
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.6.png b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.6.png
deleted file mode 100644
index 1b08c81..0000000
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml
index dbe0276..be0637e 100644
--- a/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml
+++ b/tests/auto/declarative/qmlvisual/animation/bindinganimation/data/bindinganimation.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ image: "bindinganimation.0.png"
}
Frame {
msec: 32
@@ -132,529 +132,561 @@ VisualTest {
msec: 512
hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 87; y: 129
+ modifiers: 0
+ sendToViewport: true
+ }
Frame {
msec: 528
hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 544
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "a78c9394bf3b81f192f42710cd7218b1"
}
Frame {
msec: 560
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "7f08e8170feb1d02373c9ab42b6e882d"
}
Frame {
msec: 576
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "967fbad8ac664400a3efbe66617d62aa"
}
Frame {
msec: 592
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
}
Frame {
msec: 608
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
}
Frame {
msec: 624
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 640
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
}
Frame {
msec: 656
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "37739777a5979f3ebf85e47e63341660"
}
Frame {
msec: 672
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "72731478d80f024076ea639b55152360"
}
Frame {
msec: 688
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "69058485ced6bc992a1a7c5ee34add4c"
}
Frame {
msec: 704
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "391ad7ff2362e059f6170dfe306f94a7"
}
Frame {
msec: 720
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "f9f74a2e38b52c9266f33e428b6acd9d"
}
Frame {
msec: 736
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "25152412c4ea2aec6caf89486c073484"
}
Frame {
msec: 752
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "ba403842ba3128b1cdf6a9cb28c90751"
}
Frame {
msec: 768
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "e90cd68490cf3ce6ef9fe4e8f92feaa9"
}
Frame {
msec: 784
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 800
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 816
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 832
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 848
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 864
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 880
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 896
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 912
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 928
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 944
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 960
- image: "bindinganimation.0.png"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 976
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ image: "bindinganimation.1.png"
}
Frame {
msec: 992
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1008
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1024
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1040
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1056
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1072
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1088
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1104
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1120
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1136
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1152
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Mouse {
- type: 2
+ type: 3
button: 1
- buttons: 1
- x: 136; y: 174
+ buttons: 0
+ x: 87; y: 129
modifiers: 0
sendToViewport: true
}
Frame {
msec: 1168
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "383ba6b9efcc58fca512982a207631f6"
}
Frame {
msec: 1184
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "adc501a3a2b8aaf72f58ba985b57424e"
}
Frame {
msec: 1200
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
}
Frame {
msec: 1216
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "ffa8471f57765b49fcdb9155393251e5"
}
Frame {
msec: 1232
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "ddb65481469c38f2331546ee03a44206"
}
Frame {
msec: 1248
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "6f48d1a9977b77cafd38a5903017605b"
}
Frame {
msec: 1264
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "4279c814163af3bd069ce21b3cd1c729"
}
Frame {
msec: 1280
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 136; y: 174
- modifiers: 0
- sendToViewport: true
+ hash: "17c46242c17983478f34cb49cb91ca6e"
}
Frame {
msec: 1296
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
}
Frame {
msec: 1312
- hash: "a78c9394bf3b81f192f42710cd7218b1"
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
}
Frame {
msec: 1328
- hash: "7f08e8170feb1d02373c9ab42b6e882d"
+ hash: "ecda10356cca33901c2acd0a702fee46"
}
Frame {
msec: 1344
- hash: "967fbad8ac664400a3efbe66617d62aa"
+ hash: "4f58226bdbda7339d972eca065f75766"
}
Frame {
msec: 1360
- hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ hash: "a39c80859a7643c9879da9c77b644703"
}
Frame {
msec: 1376
- hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
+ hash: "16fe17b15900ff0464ab20ea921e5b1f"
}
Frame {
msec: 1392
- hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ hash: "bc5c83b2014b7260900587ae3637598f"
}
Frame {
msec: 1408
- hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ hash: "96c077e3a572edff04fa9b2f7020ffd0"
}
Frame {
msec: 1424
- hash: "37739777a5979f3ebf85e47e63341660"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1440
- hash: "72731478d80f024076ea639b55152360"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1456
- hash: "69058485ced6bc992a1a7c5ee34add4c"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1472
- hash: "391ad7ff2362e059f6170dfe306f94a7"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1488
- hash: "f9f74a2e38b52c9266f33e428b6acd9d"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1504
- hash: "25152412c4ea2aec6caf89486c073484"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1520
- hash: "ba403842ba3128b1cdf6a9cb28c90751"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1536
- hash: "e90cd68490cf3ce6ef9fe4e8f92feaa9"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1552
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1568
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1584
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1600
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1616
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1632
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1648
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1664
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1680
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1696
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1712
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1728
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1744
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1760
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1776
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1792
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1808
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1824
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1840
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1856
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 1872
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "a78c9394bf3b81f192f42710cd7218b1"
}
Frame {
msec: 1888
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7f08e8170feb1d02373c9ab42b6e882d"
}
Frame {
msec: 1904
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "967fbad8ac664400a3efbe66617d62aa"
}
Frame {
msec: 1920
- image: "bindinganimation.1.png"
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
}
Frame {
msec: 1936
- hash: "383ba6b9efcc58fca512982a207631f6"
+ image: "bindinganimation.2.png"
}
Frame {
msec: 1952
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1968
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 1984
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "ecda10356cca33901c2acd0a702fee46"
}
Frame {
msec: 2000
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "5fae0bdc65c609cb766ce585b8c649db"
}
Frame {
msec: 2016
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "575d30ac088448b01f49082519bbb3a1"
}
Frame {
msec: 2032
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "ffeb3db6d3f177acf6f92049359a9025"
}
Frame {
msec: 2048
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "abc2ec0bc7a93e75b5823310e6284db1"
}
Frame {
msec: 2064
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "fcb17070ef24575c61046928a8bbe440"
}
Frame {
msec: 2080
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "4ab21e266919fb8d340f87091d8e1f62"
}
Frame {
msec: 2096
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "f141c7c4402c6bacff31d4e77785f5f1"
}
Frame {
msec: 2112
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "29e5f1388c6aaf23abe9f514d7e902d1"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2128
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "29e5f1388c6aaf23abe9f514d7e902d1"
}
Frame {
msec: 2144
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "4ab21e266919fb8d340f87091d8e1f62"
}
Frame {
msec: 2160
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "2d21b4af3780ef2bbccfcec957ce49c8"
}
Frame {
msec: 2176
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "527b1f9e7a222483134675a73f9cf5b7"
}
Frame {
msec: 2192
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "5edaad77f334e6a01982ee89a733b1f8"
}
Frame {
msec: 2208
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
}
Frame {
msec: 2224
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
}
Frame {
msec: 2240
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "3223ed179c828fadb3eca9c6373176c1"
}
Mouse {
- type: 2
+ type: 3
button: 1
- buttons: 1
- x: 122; y: 175
+ buttons: 0
+ x: 81; y: 130
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2256
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "3223ed179c828fadb3eca9c6373176c1"
}
Frame {
msec: 2272
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "516c44b44c23f213f5db01f9eb164b0b"
}
Frame {
msec: 2288
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "4f41101378a104e72228eeb4ba395ca8"
}
Frame {
msec: 2304
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "f9deee3a204c939562b896a6179743d2"
}
Frame {
msec: 2320
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "772396bb23c713f34ea5c23bfbcb115e"
}
Frame {
msec: 2336
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "ecda10356cca33901c2acd0a702fee46"
}
Frame {
msec: 2352
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "527b1f9e7a222483134675a73f9cf5b7"
+ }
+ Frame {
+ msec: 2368
+ hash: "4f58226bdbda7339d972eca065f75766"
}
Mouse {
- type: 3
+ type: 2
button: 1
- buttons: 0
- x: 122; y: 175
+ buttons: 1
+ x: 81; y: 130
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2368
- hash: "383ba6b9efcc58fca512982a207631f6"
- }
- Frame {
msec: 2384
- hash: "adc501a3a2b8aaf72f58ba985b57424e"
+ hash: "4f58226bdbda7339d972eca065f75766"
}
Frame {
msec: 2400
- hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
+ hash: "5fae0bdc65c609cb766ce585b8c649db"
}
Frame {
msec: 2416
- hash: "ffa8471f57765b49fcdb9155393251e5"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 2432
- hash: "ddb65481469c38f2331546ee03a44206"
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
}
Frame {
msec: 2448
- hash: "6f48d1a9977b77cafd38a5903017605b"
+ hash: "4f41101378a104e72228eeb4ba395ca8"
}
Frame {
msec: 2464
- hash: "4279c814163af3bd069ce21b3cd1c729"
+ hash: "37739777a5979f3ebf85e47e63341660"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2480
- hash: "17c46242c17983478f34cb49cb91ca6e"
+ hash: "37739777a5979f3ebf85e47e63341660"
}
Frame {
msec: 2496
@@ -662,994 +694,362 @@ VisualTest {
}
Frame {
msec: 2512
- hash: "6a74d6dc91a8b370200d3765c55c1136"
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
}
Frame {
msec: 2528
- hash: "ecda10356cca33901c2acd0a702fee46"
+ hash: "082e0e7650d187a54ef0948ccca98e5a"
}
Frame {
msec: 2544
- hash: "4f58226bdbda7339d972eca065f75766"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 2560
- hash: "a39c80859a7643c9879da9c77b644703"
+ hash: "d9af30557f99b086bb1a185a946b580d"
}
Frame {
msec: 2576
- hash: "16fe17b15900ff0464ab20ea921e5b1f"
+ hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
}
Frame {
msec: 2592
- hash: "bc5c83b2014b7260900587ae3637598f"
+ hash: "ffeb3db6d3f177acf6f92049359a9025"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2608
- hash: "96c077e3a572edff04fa9b2f7020ffd0"
+ hash: "ffeb3db6d3f177acf6f92049359a9025"
}
Frame {
msec: 2624
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "5fae0bdc65c609cb766ce585b8c649db"
}
Frame {
msec: 2640
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 2656
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "6a74d6dc91a8b370200d3765c55c1136"
}
Frame {
msec: 2672
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "4f41101378a104e72228eeb4ba395ca8"
}
Frame {
msec: 2688
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "37739777a5979f3ebf85e47e63341660"
}
Frame {
msec: 2704
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "f4fe2cc93d65e086ba8ded1438269eb2"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2720
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "f4fe2cc93d65e086ba8ded1438269eb2"
}
Frame {
msec: 2736
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "56c72b5da44bd5efdc47c3b9c3eac409"
}
Frame {
msec: 2752
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "b08811b237ce7a460c80d285f04d53d8"
}
Frame {
msec: 2768
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "fcae0317f81a3ddd713f4db1349a9da0"
}
Frame {
msec: 2784
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "082e0e7650d187a54ef0948ccca98e5a"
}
Frame {
msec: 2800
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "9413dffb7ee853ba0125ac22ab22abbd"
}
Frame {
msec: 2816
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "d9af30557f99b086bb1a185a946b580d"
}
Frame {
msec: 2832
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "575d30ac088448b01f49082519bbb3a1"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2848
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "575d30ac088448b01f49082519bbb3a1"
}
Frame {
msec: 2864
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "d9af30557f99b086bb1a185a946b580d"
}
Frame {
msec: 2880
- image: "bindinganimation.2.png"
+ hash: "82363265ed2b611a54f8d48b2af22f11"
}
Frame {
msec: 2896
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ image: "bindinganimation.3.png"
}
Frame {
msec: 2912
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
}
Frame {
msec: 2928
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "56c72b5da44bd5efdc47c3b9c3eac409"
}
Frame {
msec: 2944
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "72731478d80f024076ea639b55152360"
}
Frame {
msec: 2960
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "4279c814163af3bd069ce21b3cd1c729"
}
Frame {
msec: 2976
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "72a0c017a2fa90a4aeadfa6e552ff573"
}
Frame {
msec: 2992
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "391ad7ff2362e059f6170dfe306f94a7"
}
Frame {
msec: 3008
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "0b0c6419e1e5b016d9c22bd98fd452b1"
}
Frame {
msec: 3024
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "365c824c330398d267ea52ae9468b9ee"
}
Frame {
msec: 3040
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "65ad7e0189c096792331bd1bb0daf0db"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 81; y: 130
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3056
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "65ad7e0189c096792331bd1bb0daf0db"
}
Frame {
msec: 3072
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "a21aa1984f068650cce2a124a82c12be"
}
Frame {
msec: 3088
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "8006ceaa02d22b5fdfeab400d39a0caf"
}
Frame {
msec: 3104
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "6f48d1a9977b77cafd38a5903017605b"
}
Frame {
msec: 3120
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "07f751ea4cf877ba72fbb36f9da268d7"
}
Frame {
msec: 3136
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "72731478d80f024076ea639b55152360"
}
Frame {
msec: 3152
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "37739777a5979f3ebf85e47e63341660"
}
Frame {
msec: 3168
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "ed47684a0b21836cd27549e0989e96dd"
}
Frame {
msec: 3184
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "772396bb23c713f34ea5c23bfbcb115e"
}
Frame {
msec: 3200
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "ecda10356cca33901c2acd0a702fee46"
}
Frame {
msec: 3216
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "575d30ac088448b01f49082519bbb3a1"
}
Frame {
msec: 3232
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "2e3f134664df8204a291af2c9f81239a"
}
Frame {
msec: 3248
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "967fbad8ac664400a3efbe66617d62aa"
}
Frame {
msec: 3264
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "2b93a05b0e78e52d8d8bc2c71d898d3e"
}
Frame {
msec: 3280
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "c7a9850ed078eb0cfdb5a7ef11840d64"
}
Frame {
msec: 3296
- hash: "7cb5fc371040e587de9f06ce14a4b29a"
+ hash: "96c077e3a572edff04fa9b2f7020ffd0"
}
Frame {
msec: 3312
- hash: "a78c9394bf3b81f192f42710cd7218b1"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3328
- hash: "7f08e8170feb1d02373c9ab42b6e882d"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3344
- hash: "967fbad8ac664400a3efbe66617d62aa"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3360
- hash: "abc2ec0bc7a93e75b5823310e6284db1"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3376
- hash: "afbd5b24e2f86646f5ec2aa22f3a4b5b"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3392
- hash: "9413dffb7ee853ba0125ac22ab22abbd"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3408
- hash: "fcae0317f81a3ddd713f4db1349a9da0"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3424
- hash: "37739777a5979f3ebf85e47e63341660"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3440
- hash: "72731478d80f024076ea639b55152360"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3456
- hash: "69058485ced6bc992a1a7c5ee34add4c"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3472
- hash: "391ad7ff2362e059f6170dfe306f94a7"
- }
- Mouse {
- type: 4
- button: 1
- buttons: 1
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3488
- hash: "f9f74a2e38b52c9266f33e428b6acd9d"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3504
- hash: "25152412c4ea2aec6caf89486c073484"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3520
- hash: "ba403842ba3128b1cdf6a9cb28c90751"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3536
- hash: "e90cd68490cf3ce6ef9fe4e8f92feaa9"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3552
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3568
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3584
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3600
- hash: "383ba6b9efcc58fca512982a207631f6"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3616
- hash: "383ba6b9efcc58fca512982a207631f6"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3632
- hash: "adc501a3a2b8aaf72f58ba985b57424e"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3648
- hash: "bfa51b7c19753ef7b16d78afffc7b9dd"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3664
- hash: "ffa8471f57765b49fcdb9155393251e5"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3680
- hash: "ddb65481469c38f2331546ee03a44206"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3696
- hash: "6f48d1a9977b77cafd38a5903017605b"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3712
- hash: "4279c814163af3bd069ce21b3cd1c729"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3728
- hash: "17c46242c17983478f34cb49cb91ca6e"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3744
- hash: "42f65c58b1f5f4b5ba70855f4aaa7d2f"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3760
- hash: "6a74d6dc91a8b370200d3765c55c1136"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3776
- hash: "ecda10356cca33901c2acd0a702fee46"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
Frame {
msec: 3792
- hash: "4f58226bdbda7339d972eca065f75766"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 122; y: 175
- modifiers: 0
- sendToViewport: true
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
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"
+ hash: "7cb5fc371040e587de9f06ce14a4b29a"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png
new file mode 100644
index 0000000..99748a7
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png
new file mode 100644
index 0000000..5393dd8
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png
new file mode 100644
index 0000000..8c17bf7
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png
new file mode 100644
index 0000000..1317eef
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml
new file mode 100644
index 0000000..dd2aeb4
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml
@@ -0,0 +1,951 @@
+import Qt.VisualTest 4.7
+
+VisualTest {
+ Frame {
+ msec: 0
+ }
+ Frame {
+ msec: 16
+ image: "colorAnimation-visual.0.png"
+ }
+ 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: "acc736435c9f84aa82941ba561bc5dbc"
+ }
+ Frame {
+ msec: 624
+ hash: "e5bda0daf98288ce18db6ce06eda3ba0"
+ }
+ Frame {
+ msec: 640
+ hash: "d35008f75b8c992f80fb16ba7203649d"
+ }
+ Frame {
+ msec: 656
+ hash: "14f43e0784ddf42ea8550db88c501bf1"
+ }
+ Frame {
+ msec: 672
+ hash: "02276e158b5391480b1bdeaadf1fb903"
+ }
+ Frame {
+ msec: 688
+ hash: "35d9513eb97a2c482b7cd197de910934"
+ }
+ Frame {
+ msec: 704
+ hash: "faf0fd681e60bb2489099f5df772b6cd"
+ }
+ Frame {
+ msec: 720
+ hash: "a863d3e346f94785a3a392fdc91526eb"
+ }
+ Frame {
+ msec: 736
+ hash: "fdf328d3f6eb8410da59a91345e41a44"
+ }
+ Frame {
+ msec: 752
+ hash: "83514a3b10d5be8f6c3b128d0f3e0b1c"
+ }
+ Frame {
+ msec: 768
+ hash: "ead0eae76cd00189075964671effbaea"
+ }
+ Frame {
+ msec: 784
+ hash: "24d2457fcd51490fda23071bf9929d12"
+ }
+ Frame {
+ msec: 800
+ hash: "1478683446cf543dacbe31d0b76a98a6"
+ }
+ Frame {
+ msec: 816
+ hash: "99f7da1f31fe920f6c02add4042ae925"
+ }
+ Frame {
+ msec: 832
+ hash: "22def892006cf66667770b0f17baf6c0"
+ }
+ Frame {
+ msec: 848
+ hash: "6a36d5a77099bfd58baf285478ff04e4"
+ }
+ Frame {
+ msec: 864
+ hash: "6258150666b59b20ab476724c07fc20c"
+ }
+ Frame {
+ msec: 880
+ hash: "f1636315bc950a6dd400d9c7ed263b88"
+ }
+ Frame {
+ msec: 896
+ hash: "18447ea8dc2e8da956788e5b3cf3790a"
+ }
+ Frame {
+ msec: 912
+ hash: "1d2a6e65997a73e9e670356c8e8b63b2"
+ }
+ Frame {
+ msec: 928
+ hash: "bed0242c0f9ef229d1392835286d5782"
+ }
+ Frame {
+ msec: 944
+ hash: "88923c190e9e5beadef8a409c06df9d6"
+ }
+ Frame {
+ msec: 960
+ hash: "2d133e7ee60c97386f57838b3f0976c7"
+ }
+ Frame {
+ msec: 976
+ image: "colorAnimation-visual.1.png"
+ }
+ Frame {
+ msec: 992
+ hash: "395195716d76bc0be7b2033ed37a7a1c"
+ }
+ Frame {
+ msec: 1008
+ hash: "243dbffcf416926242bbcb7348974c4c"
+ }
+ Frame {
+ msec: 1024
+ hash: "a755068679616d8ac65c2aa7431f2a19"
+ }
+ Frame {
+ msec: 1040
+ hash: "e8249b35a47eb492cbdf2d91cc8426f0"
+ }
+ Frame {
+ msec: 1056
+ hash: "15f3da1c0e6f0779b96859d51171dd27"
+ }
+ Frame {
+ msec: 1072
+ hash: "258c0c756aac3de743b43051f2aace6b"
+ }
+ Frame {
+ msec: 1088
+ hash: "a58b9fdf301d72b2cc5c93934cc8927b"
+ }
+ Frame {
+ msec: 1104
+ hash: "a9181d30870d472521f8904818ce520f"
+ }
+ Frame {
+ msec: 1120
+ hash: "7f9e94069ccf3897c26a71bd7becd903"
+ }
+ Frame {
+ msec: 1136
+ hash: "bdf305c2f46cdb86dbf57b1e0cc5a65b"
+ }
+ Frame {
+ msec: 1152
+ hash: "fe5b6865d7e4fc7d1d42c1e74f8666f7"
+ }
+ Frame {
+ msec: 1168
+ hash: "734f0de45a6e34c9eab7ef606196f96a"
+ }
+ Frame {
+ msec: 1184
+ hash: "02a361c4534fdf7f286dc3e6dc23275c"
+ }
+ Frame {
+ msec: 1200
+ hash: "e649155ad69999c14b92f6561e4d1185"
+ }
+ Frame {
+ msec: 1216
+ hash: "01af177084fab755d622973f64b92018"
+ }
+ Frame {
+ msec: 1232
+ hash: "097cc4a082dfab995d213a3a73883c97"
+ }
+ Frame {
+ msec: 1248
+ hash: "d7b4239a3280b1eb8e885e3f422df8e9"
+ }
+ Frame {
+ msec: 1264
+ hash: "59893977994e34e83f91e7ce3ad65d6d"
+ }
+ Frame {
+ msec: 1280
+ hash: "b68e3fbb5cdcd6bd96df7dec558db42b"
+ }
+ Frame {
+ msec: 1296
+ hash: "94ad0580648f36a1e18a9ea7e249b04d"
+ }
+ Frame {
+ msec: 1312
+ hash: "750a4c01d2f5806a89a1c6cc6a9b9a68"
+ }
+ Frame {
+ msec: 1328
+ hash: "4f109f50f388f1bfa4bc6b03b3e6e514"
+ }
+ Frame {
+ msec: 1344
+ hash: "c6168d5cf27a533e8ee636637667be47"
+ }
+ Frame {
+ msec: 1360
+ hash: "f8120547bed987aa34c00da5a01a4d1e"
+ }
+ Frame {
+ msec: 1376
+ hash: "cbff526136fa2c128c8b898fbbef9e5c"
+ }
+ Frame {
+ msec: 1392
+ hash: "f29e52398fab1a239a63df4c32f2fc69"
+ }
+ Frame {
+ msec: 1408
+ hash: "7178bfe86fd2fd513218b33760460f8d"
+ }
+ Frame {
+ msec: 1424
+ hash: "ca83285bc8ac633403896fe976896eb0"
+ }
+ Frame {
+ msec: 1440
+ hash: "96ba486c09cc69d5aa38c46c00df1181"
+ }
+ Frame {
+ msec: 1456
+ hash: "b88eab335842787869f4a14824c19dd8"
+ }
+ Frame {
+ msec: 1472
+ hash: "065aa59012729e1e1a246a2083142690"
+ }
+ Frame {
+ msec: 1488
+ hash: "dd0e98c8398861002c5f178c5f9f612d"
+ }
+ Frame {
+ msec: 1504
+ hash: "04192c2b545948048eccf4d81bbde198"
+ }
+ Frame {
+ msec: 1520
+ hash: "bb7502c7208281ef9fd41714ab88a1a8"
+ }
+ Frame {
+ msec: 1536
+ hash: "5397195471890d08b703dca101e5bc7c"
+ }
+ Frame {
+ msec: 1552
+ hash: "4c678cdbebb2ffd2cbf012ca77800cde"
+ }
+ Frame {
+ msec: 1568
+ hash: "0d7a34ecd0c7f52b2c015037bf1902c6"
+ }
+ Frame {
+ msec: 1584
+ hash: "fd9d5048be749ac4369fda2d018b43ae"
+ }
+ Frame {
+ msec: 1600
+ hash: "93ee03795cd57ae6f7fe3a020b039ad4"
+ }
+ Frame {
+ msec: 1616
+ hash: "5e1118963f219c39761ca7fbf564a9ca"
+ }
+ Frame {
+ msec: 1632
+ hash: "8f40038741903150136170503649d941"
+ }
+ Frame {
+ msec: 1648
+ hash: "b087b7d0aa6224821f8e18718ff5e77d"
+ }
+ Frame {
+ msec: 1664
+ hash: "aa46b04a3c67dc772265ed2901955565"
+ }
+ Frame {
+ msec: 1680
+ hash: "ac024bf2aeb4becdf31a09fe0a6db8f3"
+ }
+ Frame {
+ msec: 1696
+ hash: "13745a174e4d06e2108a5bf125ba50cc"
+ }
+ Frame {
+ msec: 1712
+ hash: "bd972f0d8e230eca0b3fea1b8c960c08"
+ }
+ Frame {
+ msec: 1728
+ hash: "cbdbec802a58e7ced0cf45b3ab0bc0ba"
+ }
+ Frame {
+ msec: 1744
+ hash: "5128584c50305c7d218b81b8367fa3d5"
+ }
+ Frame {
+ msec: 1760
+ hash: "a71461d3593f3685620668916de870bd"
+ }
+ Frame {
+ msec: 1776
+ hash: "74ebac8f32cf044b58d9883dbcd9a722"
+ }
+ Frame {
+ msec: 1792
+ hash: "fedc5b638f339b90fe59b478721e65b7"
+ }
+ Frame {
+ msec: 1808
+ hash: "8593a81be812edf54ec94da8ae9c1314"
+ }
+ Frame {
+ msec: 1824
+ hash: "4e9b083075bc5e9287a8abc982778b56"
+ }
+ Frame {
+ msec: 1840
+ hash: "1d6f02aa99afa47d77fc49ab894b365a"
+ }
+ Frame {
+ msec: 1856
+ hash: "a204feec783b3b05de4c209c21745826"
+ }
+ Frame {
+ msec: 1872
+ hash: "665a2a8ff00b9663157802767f504754"
+ }
+ Frame {
+ msec: 1888
+ hash: "624fb09ebe60cb87d767faf8d2420b1e"
+ }
+ Frame {
+ msec: 1904
+ hash: "e5af0cdc33f3275a25abb09e9165f310"
+ }
+ Frame {
+ msec: 1920
+ hash: "02bafb5a81ca66f7670ac93de5123860"
+ }
+ Frame {
+ msec: 1936
+ image: "colorAnimation-visual.2.png"
+ }
+ Frame {
+ msec: 1952
+ hash: "b5abd0dff1ab076faac7cc226e83f5d0"
+ }
+ Frame {
+ msec: 1968
+ hash: "b759acc35bccff8efc2e6fe276ddc0f7"
+ }
+ Frame {
+ msec: 1984
+ hash: "ce52e18c1f7732768779863b45314ff5"
+ }
+ Frame {
+ msec: 2000
+ hash: "99d30652559dd6931e0c95543eeaa149"
+ }
+ Frame {
+ msec: 2016
+ hash: "ffbd9a00e05e085b89296d19d5caec57"
+ }
+ Frame {
+ msec: 2032
+ hash: "9c9d658b9c25602816b8066bf19105db"
+ }
+ Frame {
+ msec: 2048
+ hash: "2b7fd058e6601e22a30bb7106b1c683b"
+ }
+ Frame {
+ msec: 2064
+ hash: "f4c7e26b19ee0a3e7c9688685eb7bd05"
+ }
+ Frame {
+ msec: 2080
+ hash: "0dc6d593bceff56b7f81f2a49d37fefb"
+ }
+ Frame {
+ msec: 2096
+ hash: "9bfd7ad5091ccbdde43c593e133a7b10"
+ }
+ Frame {
+ msec: 2112
+ hash: "2703b617937914a90ea42ebf249d79ee"
+ }
+ Frame {
+ msec: 2128
+ hash: "b77e2983138254016c4cca53100f46fa"
+ }
+ Frame {
+ msec: 2144
+ hash: "60c4dd24187d1281081479e586f02b37"
+ }
+ Frame {
+ msec: 2160
+ hash: "62f2511abd99ef1231c9fa4b91d4abfe"
+ }
+ Frame {
+ msec: 2176
+ hash: "e309b3353fd174e883d309571caddc98"
+ }
+ Frame {
+ msec: 2192
+ hash: "1e2d6a134c7b12dde551b148ef4f088c"
+ }
+ Frame {
+ msec: 2208
+ hash: "e5dc5450604a491cc24a0dcf5c278b58"
+ }
+ Frame {
+ msec: 2224
+ hash: "c8dae97c10e1962c1e6a51ab3ab8579e"
+ }
+ Frame {
+ msec: 2240
+ hash: "4e1b7e06f55fb084080689b474f1fe1d"
+ }
+ Frame {
+ msec: 2256
+ hash: "b4639c907fa937bf15fac62421170cd8"
+ }
+ Frame {
+ msec: 2272
+ hash: "c250208a0caeb5f6cb4d3aac3d7d350b"
+ }
+ Frame {
+ msec: 2288
+ hash: "a73351eabecf0d71149efe31f197413e"
+ }
+ Frame {
+ msec: 2304
+ hash: "479425f1b7aff79e4dfb7fca534af018"
+ }
+ Frame {
+ msec: 2320
+ hash: "046d0f0040a52d1f26ba9f7c5de06ef4"
+ }
+ Frame {
+ msec: 2336
+ hash: "655778bf13c6080903150b0eb43a7edc"
+ }
+ Frame {
+ msec: 2352
+ hash: "72da0bbe81514870655fdd3354adac60"
+ }
+ Frame {
+ msec: 2368
+ hash: "defe0bdf675c65fff55aaaced1e4dae7"
+ }
+ Frame {
+ msec: 2384
+ hash: "c988628b6c3d3780e9a865c7694926cd"
+ }
+ Frame {
+ msec: 2400
+ hash: "5ab17563655231089edd986ff13d6012"
+ }
+ Frame {
+ msec: 2416
+ hash: "c1adff1d2e5800ed466d1691d3b17382"
+ }
+ Frame {
+ msec: 2432
+ hash: "70129ba01fbb19592b9dc0d0a3b3e7df"
+ }
+ Frame {
+ msec: 2448
+ hash: "0000829ef7ed908bf430d42904d59cc2"
+ }
+ Frame {
+ msec: 2464
+ hash: "843d2927f50ab87b4a86b7a6aaeed91f"
+ }
+ Frame {
+ msec: 2480
+ hash: "da86d21756025e7de8050586d5e2a1f8"
+ }
+ Frame {
+ msec: 2496
+ hash: "48dd1bd6580133b0793fee327ea4f1e6"
+ }
+ Frame {
+ msec: 2512
+ hash: "f0618193dcd0ba2837249515a1898b1c"
+ }
+ Frame {
+ msec: 2528
+ hash: "a530184e57251065286c0cbba7301e9c"
+ }
+ Frame {
+ msec: 2544
+ hash: "64a1d7203973d65dd342793007a61c58"
+ }
+ Frame {
+ msec: 2560
+ hash: "5b830dfc6ba442772de87d75d5a578de"
+ }
+ Frame {
+ msec: 2576
+ hash: "5563b056b0409b65f60dd16dd0dd890e"
+ }
+ Frame {
+ msec: 2592
+ hash: "b8bcf9ad2ca8720c11563a23d8280804"
+ }
+ 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
+ hash: "8c0fcda4f8956394c53fc4ba18caa850"
+ }
+ Frame {
+ msec: 2896
+ image: "colorAnimation-visual.3.png"
+ }
+ 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/qmlvisual/animation/easing/data/easing.0.png b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.0.png
index 4f75bfd..81edfff 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.png b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.png
index dc17765..ebac47f 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.png b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.png
index 7f83548..e1200bb 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.png b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.png
index c68e0fa..81edfff 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml
index 5923222..597c3a6 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml
+++ b/tests/auto/declarative/qmlvisual/animation/easing/data/easing.qml
@@ -6,774 +6,858 @@ VisualTest {
}
Frame {
msec: 16
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ image: "easing.0.png"
}
Frame {
msec: 32
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 48
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 64
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 80
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 96
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 112
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 128
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 144
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 160
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 176
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 192
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 208
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 224
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 240
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 256
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 272
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 111; y: 419
- modifiers: 0
- sendToViewport: true
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 288
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 304
- hash: "8f4c40d2e2b4f064bcb77c5ae43928c6"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 320
- hash: "8b65094a9b7d5394fc67f92ea058627f"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 336
- hash: "da450826b471a60ba98dabc581631ba1"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 352
- hash: "e820fb4f1bc97152aa940b07db549f1b"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 368
- hash: "b7d8186beca2fa0e37099f72419350f4"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 384
- hash: "8500b93774f214e5e4789e25500262b8"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 400
- hash: "277e1dff70285cca536b3e1fc2590688"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 416
- hash: "b05b18f92c2089c681661566117ae0f5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 432
- hash: "6fec9c6b6ac3e3ea4126e3824a8d7566"
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 28; y: 245
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 448
- hash: "53c6c90dd1eb7ca47721fc116474aebf"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 464
- hash: "cf729c4a31414af3d2705878ba615738"
+ hash: "a74da88fed6727a41b0bef096bd52eea"
}
Frame {
msec: 480
- hash: "f146b8a68960d507f893ef001189220e"
+ hash: "e640a847e36f4a7d322ad7ca0b893d9c"
}
Frame {
msec: 496
- hash: "18ff56b870bb048af246f928ee42a9b0"
+ hash: "3e3fe8581c80dc190108b9844e77fb17"
}
Frame {
msec: 512
- hash: "beee98f73fe7e878ada37b3070fa0c1d"
+ hash: "8ee8ce9f8d9d93997aa8e05efae9b901"
}
Frame {
msec: 528
- hash: "435d389082912950a0be2b5dff480319"
+ hash: "8752f7849a3afa35889f7f1406d79e5c"
}
Frame {
msec: 544
- hash: "dc39b080eaddeaf4e309b90b7d97a835"
+ hash: "df31ed3556e84a4517b26765ea11023c"
}
Frame {
msec: 560
- hash: "666b1cde53f78d7db9c81e21adbe406a"
+ hash: "a35602db546bf5e71fbc7ff7c5895427"
}
Frame {
msec: 576
- hash: "c5c9627f4329e48aa96ebfbc982b6ba6"
+ hash: "c29ee32e39126cb00544cf0326e483d8"
}
Frame {
msec: 592
- hash: "a583042052e5da7e80a4956337d6d1ff"
+ hash: "79b0d26288fd9ca67c6aacacb9bf355f"
}
Frame {
msec: 608
- hash: "a4a5df787e15da6f28275a12898e7620"
+ hash: "aa0b8c9921058be0913c00725c45b287"
}
Frame {
msec: 624
- hash: "02cacec2ccc803ebc03c5540484cbcaa"
+ hash: "964f498603fdd2abb2d3b1cc1b78ffde"
}
Frame {
msec: 640
- hash: "00600df1f006f358feaf43bfae9d32a5"
+ hash: "a3c7226d5b5f91b91d2a1ec21f2cb9ab"
}
Frame {
msec: 656
- hash: "737c884ba0d6d38b66252f4b97a36c33"
+ hash: "d28f5fb2e07c028c9697f8d1e4d7b676"
}
Frame {
msec: 672
- hash: "7eeeade8100c84a6b56efa51cf597baf"
+ hash: "0a1aa6ba2749b1ef5d8c67b5d8d7fba4"
}
Frame {
msec: 688
- hash: "18ab79d495097f0103dcf14db1897a88"
+ hash: "12d926e80c7b4da41ef9c747cf9ca1d4"
}
Frame {
msec: 704
- hash: "21d3b0da00c46a101e09048928cd8027"
+ hash: "2015e4d29b3424a3683d7d8710ef60b4"
}
Frame {
msec: 720
- hash: "a5995b0341872c275ffbc5aaee6eb853"
+ hash: "530924a6f4bdf7e9ab37415109a28e2f"
}
Frame {
msec: 736
- hash: "bb4a37c1bd5e412ebce54d9539017723"
+ hash: "4dd20811ffa8cfb64cebc6ec6f43b029"
}
Frame {
msec: 752
- hash: "63dcde9e2751ca94ed7d739feb359221"
+ hash: "2238138f486a061e32607b130ba505f8"
}
Frame {
msec: 768
- hash: "5790c8407e2e4d1a6a937d86d57d8edb"
+ hash: "a2991487b51b9802f18a975a323dfb32"
}
Frame {
msec: 784
- hash: "3a1c77abf6822030db60a036027dc86e"
+ hash: "9cf19f7c9ee16bfdd56cb889358ab789"
}
Frame {
msec: 800
- hash: "2a13c573ab9846cce60384dd7138b2b4"
+ hash: "32eee6b05e73a36eef878c562badbb8f"
}
Frame {
msec: 816
- hash: "98983c2525265830033495b61071a5aa"
+ hash: "04cbb2d8fe38011c46ff95d84830ed2a"
}
Frame {
msec: 832
- hash: "26d2bba3d77053b410715afb497d4063"
+ hash: "c11c2591ecf40ab31e616f6803e37e95"
}
Frame {
msec: 848
- hash: "fd65d954c16acee425d9de65af68ef40"
+ hash: "a22cdeea89739bdf10850c7251fb62f2"
}
Frame {
msec: 864
- hash: "094fcc18d28b19ac6b452dd8106d813b"
+ hash: "7d13f611bc516cda6afe56a8ec59cbf4"
}
Frame {
msec: 880
- hash: "160105f6f99a960763535e4d51990ef6"
+ hash: "4b3a3469f1c64760bd6ce84ec0bfc2cc"
}
Frame {
msec: 896
- hash: "0d5d1e6a66fc1f49f1106f01fb5a1c52"
+ hash: "e1a3af06282f369427d967cb21771564"
}
Frame {
msec: 912
- hash: "f6abc32680865783a4d94ecb738f9ff6"
+ hash: "e1c90f78a2fe5e7cf43eeb700c867beb"
}
Frame {
msec: 928
- hash: "350509eceb134d5b18647e5ad07dbb47"
+ hash: "e63fbd42405a5d251ea6703d9564b2e0"
}
Frame {
msec: 944
- hash: "a84e4e7c5385dc1f24ca219f45d529a5"
+ hash: "a1b4f08ccf38575f789bdb8968c7cdeb"
}
Frame {
msec: 960
- image: "easing.0.png"
+ hash: "2604313688bddd75b1fbd146415097a7"
}
Frame {
msec: 976
- hash: "efcc5ae79da3fa2f4c7d6eaa35e32d33"
+ image: "easing.1.png"
}
Frame {
msec: 992
- hash: "ff4afce604c8ecb4f08d1ddef8552534"
+ hash: "df391105c7f6e0fbcdb0b4719e5af9e3"
}
Frame {
msec: 1008
- hash: "e2e63e12e9a5f8459720dd8b023ed17b"
+ hash: "33603ef5b2368a7f5a71de0318404ac7"
}
Frame {
msec: 1024
- hash: "991a01f92bcfa9cd9fe98e3f39d192fc"
+ hash: "78cdbf2a2522e057db08aba284bd7a07"
}
Frame {
msec: 1040
- hash: "bc3d2f0f3fac650c981457f3694c2518"
+ hash: "7aac87953a7e1ddf0040769a15878017"
}
Frame {
msec: 1056
- hash: "ee39fc9b1a602bf813d9118aa21901ac"
+ hash: "eae27f47c56ee0c491eeebed0f3855b2"
}
Frame {
msec: 1072
- hash: "42120d098f2adf1e331332b33442dd3e"
+ hash: "0f0c4d8dbc27bc301c993a768afeaa39"
}
Frame {
msec: 1088
- hash: "1660c69b77b800d1ab57b93f0fc12aa5"
+ hash: "ec844dffe8be01b9906ffa10a18784bc"
}
Frame {
msec: 1104
- hash: "0630a3d6b8cb5dece5dc660f05036ec6"
+ hash: "69f6dd26fd9268c474c422c2ce126424"
}
Frame {
msec: 1120
- hash: "9163f0bd9c5888794d7a09d3359bf1e5"
+ hash: "0e3f95c339c1868fc716a542e9acbd49"
}
Frame {
msec: 1136
- hash: "e0b7ad4883f679948c852ff152ba7907"
+ hash: "fa0762f9d8112e5c6889ef3a204d4838"
}
Frame {
msec: 1152
- hash: "f748fc44f99b706e42b899cb18dbaaf7"
+ hash: "18132a9adedd13fcd015ac5c7f741718"
}
Frame {
msec: 1168
- hash: "c84442f0cb1cf0bb50dae7d1c701aaf8"
+ hash: "f07aba4891c1aab84f656b3507d4f31a"
}
Frame {
msec: 1184
- hash: "d7b41567e3f3aa9576fe2793872134b7"
+ hash: "123dfe5bf375b698ae529fe370133d4d"
}
Frame {
msec: 1200
- hash: "a1d10ff1adb85000902486fc8e4faa8d"
+ hash: "d176cacbad1459d18729e99b52ed0c89"
}
Frame {
msec: 1216
- hash: "44b7b5d77068e360ead3af84e7d80232"
+ hash: "21d9f6aeb67b5bfa0d190d305ddbaabd"
}
Frame {
msec: 1232
- hash: "486c0b19c1379d9eefdf575a085e2875"
+ hash: "38884e097938bdd2fecb33a2d782e87e"
}
Frame {
msec: 1248
- hash: "1d474472856d4740d960eb2f788ca5a6"
+ hash: "d0fb3dbb20f4873784dde690c48efd4b"
}
Frame {
msec: 1264
- hash: "c74082553ab0f4ee00f5044e3369580b"
+ hash: "9821efad0c5bfc459029f42a32ad7c85"
}
Frame {
msec: 1280
- hash: "89fcd5514f336075ad32cae69518c1e5"
+ hash: "c19ef8982ffa6d5d1a0b2844d0bd77e1"
}
Frame {
msec: 1296
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "e5d09b511557ac724b488dcaa5079ac7"
}
Frame {
msec: 1312
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "a1bf72e745137dd8ae48ff3e5df22944"
}
Frame {
msec: 1328
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "6319a88b12b431b1715b0231c0b86f9e"
}
Frame {
msec: 1344
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "f69fc6078e0b6c863b19f2306ca22a17"
}
Frame {
msec: 1360
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "e0945fc7aea81263fb84fb5de83b7ffc"
}
Frame {
msec: 1376
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "bae0fc82e69b37d6f0d23faf5d877d9b"
}
Frame {
msec: 1392
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "764e6cf407b66cefb0e867c55b4d214b"
}
Frame {
msec: 1408
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "208a9d634e7c45211a8aea56b7cb17e1"
}
Frame {
msec: 1424
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "5426675426babcfb303d5534b66038e0"
}
Frame {
msec: 1440
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "f9b2505bf94f9ae9a6212aae64a8023f"
}
Frame {
msec: 1456
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1472
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1488
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1504
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1520
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1536
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1552
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1568
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1584
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1600
- hash: "9dd235eb98998d9bdd92e01300297257"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 111; y: 419
- modifiers: 0
- sendToViewport: true
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1616
- hash: "9dd235eb98998d9bdd92e01300297257"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1632
- hash: "b77240f32e83d4f332d815c626f1e560"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1648
- hash: "7d89669231224cf8e02d75338c37c278"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1664
- hash: "a8cf7c179011ee8187a8e1111683e52e"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1680
- hash: "3e87a57e05da09a8260801320431b922"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1696
- hash: "a2b0d99c8a232715fe03e8772a36634c"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1712
- hash: "5b4634cd495ae7bb9c69a5c9c346189e"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1728
- hash: "492f8f2b84af355ef41c1a7cda3a8a73"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 28; y: 245
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1744
- hash: "88e4eb08520fb5acc3d88ac4f0900542"
+ hash: "672e4366f9eb212a3dcb539476ffe83b"
}
Frame {
msec: 1760
- hash: "0c09cdcb906b4ce9840fd7502c39e5b9"
+ hash: "0312cf9bff66e992528cc24211a7a9ef"
}
Frame {
msec: 1776
- hash: "b054083bdd212cc03167a90df2d7eac5"
+ hash: "d29d071c26556302881badd90b1f1135"
}
Frame {
msec: 1792
- hash: "83971c2d37616ab92680364d6ac288a6"
+ hash: "747b398a00dec18a82fb3e2313ba318b"
}
Frame {
msec: 1808
- hash: "a73951d25e2cb7c1d04c88c86dfa0e4d"
+ hash: "1df120f0cc1e8583dd52b02b203ba7ff"
}
Frame {
msec: 1824
- hash: "31fc8b20302abac97e506c37a14bbb7e"
+ hash: "783f4c179f8468055f1b5585108c4c91"
}
Frame {
msec: 1840
- hash: "f760ccd7339e01a9423da7b592498291"
+ hash: "7307344c196f13348e7e23415c8eed1f"
}
Frame {
msec: 1856
- hash: "24dfcd5553f854908396de751fb15b88"
+ hash: "cf97103f94eb6b9e68e095ff5eaf2aeb"
}
Frame {
msec: 1872
- hash: "1daf38a6e6199f980e9494a3eb480047"
+ hash: "df8ef82f145ad55f084c3693cb601577"
}
Frame {
msec: 1888
- hash: "a39e2de1090209e5dbc8cc26577ec97d"
+ hash: "e25a344db6358ac5876cc95eb7ce35e7"
}
Frame {
msec: 1904
- hash: "f4edc780b063e34461263ed3b753be88"
+ hash: "4f4d55823e468ec2c0e73977a6851f5b"
}
Frame {
msec: 1920
- image: "easing.1.png"
+ hash: "894e23e77af266bde42f5ca6ac2184d7"
}
Frame {
msec: 1936
- hash: "a19b0353604491f56f72be0d20d76955"
+ image: "easing.2.png"
}
Frame {
msec: 1952
- hash: "9a70f109eebfcede2311ef77ceb50a44"
+ hash: "a48cc4f2c5282d9d2a8b55e0908324b7"
}
Frame {
msec: 1968
- hash: "7b28313d6860aeefd4a4e136d38d62f8"
+ hash: "f5cd3c873cf57f199ea7439a45f094d8"
}
Frame {
msec: 1984
- hash: "95d84f38473159fe6b38f84ffe371714"
+ hash: "8c6f4c913be02ee21efa551ce9a6544b"
}
Frame {
msec: 2000
- hash: "07f91261794edb0ac1fde9bb4ff36011"
+ hash: "fc979e4e4f6e82d704e0a53d3f9eef6e"
}
Frame {
msec: 2016
- hash: "f9a4a6b92a9c2d265688f1bfac18fa0a"
+ hash: "e8085e2e6741028a9218487181a8cc5b"
}
Frame {
msec: 2032
- hash: "cdec7cc00380fde4f73be997a992251a"
+ hash: "c67a1cec25d25687d369af58018ce213"
}
Frame {
msec: 2048
- hash: "a52b34f84e98fcd8babb1d39979fc9c7"
+ hash: "25b8e080f8fe5525bafa1e760b5845be"
}
Frame {
msec: 2064
- hash: "bf05b3c79a9616f2e6c33d348b30e0ba"
+ hash: "fef16bd6dc6dfa248ab5a33f53229528"
}
Frame {
msec: 2080
- hash: "c5931785685b4f4854d3ddfff5dd5466"
+ hash: "57b7e04b1722feda16fb80269dd51c2c"
}
Frame {
msec: 2096
- hash: "bae163e02b860a9ca19d1bcb60ac1f8e"
+ hash: "f2415e564efe5b5306b33001395a41f4"
}
Frame {
msec: 2112
- hash: "a36295a1ebb35e538f8899ae3ae3b36a"
+ hash: "40116a7a67be4de5b767ee1fe7ae0d02"
}
Frame {
msec: 2128
- hash: "b6448d61803d9b2c05b438aa8ce8bcd5"
+ hash: "52d71e7e8f44e554df361d7d9e281655"
}
Frame {
msec: 2144
- hash: "631bf4caff2d93ef96a426100ffc5b32"
+ hash: "226620a3c624f0a1659ee33616734a28"
}
Frame {
msec: 2160
- hash: "a8777c84a03996493f719f5fcfc80d00"
+ hash: "8849d02547a90ca47748749fc8615179"
}
Frame {
msec: 2176
- hash: "86e1759df103ef776bb03f24941f49da"
+ hash: "5523d277bc7a7161f3bbd79a4099e6c4"
}
Frame {
msec: 2192
- hash: "01a790ea60adeaf368c66bd53aa8fcb3"
+ hash: "6ff2c6b89c3a024e1597d1c110b5f5f3"
}
Frame {
msec: 2208
- hash: "79e5aca8ef6b9764f7f99cdfb51222ae"
+ hash: "732b9e2e601ad7fc11510f3c590dca20"
}
Frame {
msec: 2224
- hash: "82d10cc01b9be4683c5aa76096bd462c"
+ hash: "1ff9abdcb182fca444bc4b36e91b2a13"
}
Frame {
msec: 2240
- hash: "95d961a92c597e432611947f7480796a"
+ hash: "6f851aee4e3c4427fcb8672f37885d2d"
}
Frame {
msec: 2256
- hash: "e8ee89b5313c7e2c66741fe1c2090029"
+ hash: "3572977ef7c618404168514400fc22a4"
}
Frame {
msec: 2272
- hash: "2e3e8cf25dc1a3f09e7bf2a086f8e3bb"
+ hash: "e6e6f7cdf4f2ee1d182d18da482ab6a8"
}
Frame {
msec: 2288
- hash: "68ca8ad381f48db23d2bc5da9da0c17a"
+ hash: "fac4878038516ad0a5601f78ff3d3ab0"
}
Frame {
msec: 2304
- hash: "e29f2411667049e8fae6c080f61c5869"
+ hash: "b37e2cf2fb3b5a91845e50d2ab288572"
}
Frame {
msec: 2320
- hash: "5b0a6fadedf3024e8ecb7f2c73a2277d"
+ hash: "711ea820aa842c46f629f3eb36144ec2"
}
Frame {
msec: 2336
- hash: "af2eac625ef1fd928093ccd60bc0058e"
+ hash: "fcaa0576cbc8d4459b94498f332a4576"
}
Frame {
msec: 2352
- hash: "8a1ff780ebdc9e416e60ea0940e8f2d6"
+ hash: "dfa935d0ac700696a78c139585d2cc3f"
}
Frame {
msec: 2368
- hash: "7eb316c51cfd8ad972b7040247a651eb"
+ hash: "291042d40fc9fa8eebf80225b2cae93e"
}
Frame {
msec: 2384
- hash: "1bac7075c10c87a69e71c3859f0db41d"
+ hash: "4e1d6af5f5f9200b6871dfc63ec8d92e"
}
Frame {
msec: 2400
- hash: "0f16f40567729065cf9ecfcc15395a7b"
+ hash: "9c7ccdf3aba3c28717891e7ef4333aa5"
}
Frame {
msec: 2416
- hash: "719f4e776776f0db5c68ae7c6177e9b7"
+ hash: "b5bfa2eeb932ebc8913381bbea62ea9d"
}
Frame {
msec: 2432
- hash: "75172dbf31fd8d706f54748c59099845"
+ hash: "296bc4fcc206c6563630a6de8be9deac"
}
Frame {
msec: 2448
- hash: "d730b550e05167b05350e0e6636dd97d"
+ hash: "57d39578c1ba3a6a21efdef8c9323965"
}
Frame {
msec: 2464
- hash: "e1f33eb5f023d9d42a99f8bc23223c45"
+ hash: "16352e11b7fd763d82d26fcc02da24a7"
}
Frame {
msec: 2480
- hash: "8a4b0df5bed6c7be73c194ce2bb6a271"
+ hash: "02157cc0e120e1b751a9931ff65edb52"
}
Frame {
msec: 2496
- hash: "44a9ea371f12d4ac3a569121a995ae16"
+ hash: "23554c786732241aa9a59304cb4870b1"
}
Frame {
msec: 2512
- hash: "14747e2e9e072210b9d6db50b4f704a1"
+ hash: "e38f68e818b35b23361a7937b7a37bb7"
}
Frame {
msec: 2528
- hash: "eea52abf430f8cc1adc37e7180036584"
+ hash: "dd39869048e6ccfceb1b2882404ef1b3"
}
Frame {
msec: 2544
- hash: "0a9f6b14bc02e929a45bf4ebb736f9d3"
+ hash: "5587d88f5b8fcb3914efedee9ae3a939"
}
Frame {
msec: 2560
- hash: "a68a6eef0fc8754564c47c88b60d9a2a"
+ hash: "5a23991509d69d400249e403cd3fbe4d"
}
Frame {
msec: 2576
- hash: "eeb469e2fbda131d83538055e88ecdf7"
+ hash: "eed425fb759c92ec9966fcdc625321fb"
}
Frame {
msec: 2592
- hash: "0f7b673472050e807c9d935fde5afd83"
+ hash: "7bbf0748f5fbbf48605287342df8e687"
}
Frame {
msec: 2608
- hash: "80c90cce66bdd2324ca98bc591c22b44"
+ hash: "7722f0d3c358d57f3d614f2850fc23f9"
}
Frame {
msec: 2624
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "3ec5ccb1e6ed677617dcb3b699b10d58"
}
Frame {
msec: 2640
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "303a61969566062d5c77a3a1a65c847a"
}
Frame {
msec: 2656
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "aadf4d4cc978b5f88b97a7e453b21024"
}
Frame {
msec: 2672
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "2d24097717f5ec669e29250af78235fd"
}
Frame {
msec: 2688
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "2a58e7ce319cc1cd7dfcd740bfe59517"
}
Frame {
msec: 2704
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "6a21af6c920588f0f709bf91bb56f548"
}
Frame {
msec: 2720
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "f5a63f241f27c6e7cef969dde6790ac3"
}
Frame {
msec: 2736
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "33b64aad57e117f6b170432843c3c996"
}
Frame {
msec: 2752
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2768
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2784
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2800
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2816
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2832
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2848
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2864
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2880
- image: "easing.2.png"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2896
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ image: "easing.3.png"
}
Frame {
msec: 2912
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2928
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2944
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2960
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2976
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 2992
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 3008
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
}
Frame {
msec: 3024
- hash: "bb8e2ba14526dc5ad74f74e8ff3d96a5"
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3040
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3056
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3072
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3088
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3104
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3120
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3136
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3152
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3168
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3184
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3200
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3216
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3232
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3248
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3264
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3280
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3296
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3312
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3328
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3344
+ hash: "4f12d90df04192e3f28026249015fa41"
+ }
+ Frame {
+ msec: 3360
+ hash: "4f12d90df04192e3f28026249015fa41"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/easing/easing.qml b/tests/auto/declarative/qmlvisual/animation/easing/easing.qml
index 35b568a..625aeeb 100644
--- a/tests/auto/declarative/qmlvisual/animation/easing/easing.qml
+++ b/tests/auto/declarative/qmlvisual/animation/easing/easing.qml
@@ -1,9 +1,10 @@
import QtQuick 1.0
+/* This test just animates y of a block with every easing curve*/
Rectangle {
id: item
- width: 600
- height: layout.height
+ height: 300
+ width: layout.width
color: "white"
resources: [
ListModel {
@@ -133,10 +134,10 @@ Rectangle {
}
}
]
- Column {
+ Row {
id: layout
- anchors.left: item.left
- anchors.right: item.right
+ anchors.top: item.top
+ anchors.bottom: item.bottom
Repeater {
model: easingtypes
Component {
@@ -149,8 +150,8 @@ Rectangle {
color: index & 1 ? "black" : "white"
opacity: 0 // 1 for debugging
}
- width: 120
- height: 18
+ width: 15
+ height: 30
color: index & 1 ? "red" : "blue"
states: [
State {
@@ -158,7 +159,7 @@ Rectangle {
when: !mouse.pressed
PropertyChanges {
target: block
- x: 0
+ y: 0
}
},
State {
@@ -166,7 +167,7 @@ Rectangle {
when: mouse.pressed
PropertyChanges {
target: block
- x: item.width-block.width
+ y: item.height-block.height
}
}
]
@@ -176,7 +177,7 @@ Rectangle {
to: "to"
reversible: true
NumberAnimation {
- properties: "x"
+ properties: "y"
easing.type: type
duration: 1000
}
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.png
index f4301d3..ca37de9 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.png
index ceb0e20..a2d87ca 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.png
index 197c8c0..1cb2cb8 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.png
index 3a4327e..f58deca 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.png
index 2397719..1936361 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.png
index 70d91a2..758c223 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.png
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.6.png b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.6.png
new file mode 100644
index 0000000..b049e63
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml
index 58d0b26..3cbc074 100644
--- a/tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml
+++ b/tests/auto/declarative/qmlvisual/animation/loop/data/loop.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "eff7cc4b163dceb6084270cc589393f1"
+ image: "loop.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "loop.0.png"
+ hash: "0de25d97a43cf1a7551c8e8dd1943039"
}
Frame {
msec: 976
- hash: "2cc40e1119060483ae067f3881af0391"
+ image: "loop.1.png"
}
Frame {
msec: 992
@@ -482,11 +482,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "loop.1.png"
+ hash: "72c0bf8225504e86ff023242b84513a8"
}
Frame {
msec: 1936
- hash: "7f79dd50a0af8e8871191ee80afcad0f"
+ image: "loop.2.png"
}
Frame {
msec: 1952
@@ -722,11 +722,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "loop.2.png"
+ hash: "d57e1a10e48938e1f7fc219220fe1204"
}
Frame {
msec: 2896
- hash: "df41be1fa564353ceb2088af209610d3"
+ image: "loop.3.png"
}
Frame {
msec: 2912
@@ -962,11 +962,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "loop.3.png"
+ hash: "fd7157aef6dfb303472cd33b176f91d8"
}
Frame {
msec: 3856
- hash: "e6521a3c74c190c193af2c913e5326e2"
+ image: "loop.4.png"
}
Frame {
msec: 3872
@@ -1202,11 +1202,11 @@ VisualTest {
}
Frame {
msec: 4800
- image: "loop.4.png"
+ hash: "2fb9e078573ebd1a5cf0f615c97f1d20"
}
Frame {
msec: 4816
- hash: "31fa31ed47ea16390be8ea9d41f483e7"
+ image: "loop.5.png"
}
Frame {
msec: 4832
@@ -1442,11 +1442,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "loop.5.png"
+ hash: "99789b6e168355a3960986c7d1f21f82"
}
Frame {
msec: 5776
- hash: "ebd37ee719ca460480521fd4ec284a3f"
+ image: "loop.6.png"
}
Frame {
msec: 5792
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.0.png
new file mode 100644
index 0000000..a45e421
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.qml
index 8fd5944..f4991cc 100644
--- a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation-visual.qml
@@ -6,458 +6,238 @@ VisualTest {
}
Frame {
msec: 16
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ image: "parallelAnimation-visual.0.png"
}
Frame {
msec: 32
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 48
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 64
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 80
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 96
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 112
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 128
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "d5eb647077598cab2f3d0c016fbbb419"
}
Frame {
msec: 144
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "aa22c670b17a7372732f9bc85e41a082"
}
Frame {
msec: 160
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "19d09945e45f74d1edd9935e855369b3"
}
Frame {
msec: 176
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "ed391a3b7eba8e98d2f8e372f42e9210"
}
Frame {
msec: 192
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "ac3f7547a9576e0a313e7060ed7431e9"
}
Frame {
msec: 208
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "ddf41ca7289f44990d0d6d41a838bd6f"
}
Frame {
msec: 224
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "42eb324d288b39fa32bf11795d6633f6"
}
Frame {
msec: 240
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "8447851893d2d8f5661731761b6702fa"
}
Frame {
msec: 256
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "7d86bc9b509bcd45eebf2c7e70151424"
}
Frame {
msec: 272
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "c33a6731151fbce1156888129d53b8ec"
}
Frame {
msec: 288
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "028cd521f75d3ecc810a0baa2e857441"
}
Frame {
msec: 304
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "58e565d78d68a69b864c1d7bb8d6180f"
}
Frame {
msec: 320
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "7f21037b48949c2086e7692723a90abf"
}
Frame {
msec: 336
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "5c5c9101a0594bae2f5f8c5bb534a931"
}
Frame {
msec: 352
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "8c010e7bd746d3865e283cc9f5fb83b7"
}
Frame {
msec: 368
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "0a2b5c4aa4e8ca8b264c774e4cc90f23"
}
Frame {
msec: 384
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "bf18f1e0102f471773de1cbb0b24bfc3"
}
Frame {
msec: 400
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "bc8e1d5a6d38e38284313ede359582bc"
}
Frame {
msec: 416
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "3a34e518882bd28d11ebdd1646737a8b"
}
Frame {
msec: 432
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 448
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 464
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 480
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 496
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 512
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 528
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 544
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 560
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 576
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 592
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 608
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 624
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 640
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 656
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 672
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 688
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 704
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 720
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 736
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 752
- hash: "4faa7727bafeea0771f2db62f0141ac9"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 137; y: 74
- modifiers: 0
- sendToViewport: true
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 768
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 784
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 800
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 816
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 832
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 848
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 864
- hash: "4faa7727bafeea0771f2db62f0141ac9"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 137; y: 74
- modifiers: 0
- sendToViewport: true
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 880
- hash: "4faa7727bafeea0771f2db62f0141ac9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 896
- hash: "0fada111cb977c4de8c7499e44714f38"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 912
- hash: "1817e010332117dcddc1a1b1a2caf52d"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
Frame {
msec: 928
- hash: "e4add6bf93479c9bca571419fe2fabf9"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
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"
+ hash: "df113cd7cd502c0ae8cb2dd0f0c209a0"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.0.png b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.0.png
deleted file mode 100644
index 82c18d7..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.1.png b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.1.png
deleted file mode 100644
index b9a3b89..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.2.png b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.2.png
deleted file mode 100644
index 789615b..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/data/parallelAnimation.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation-visual.qml
index 9a75763..6974adb 100644
--- a/tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/parallelAnimation/parallelAnimation-visual.qml
@@ -9,34 +9,35 @@ import QtQuick 1.0
*/
Rectangle {
- width: 400; height: 200
+ width: 200; height: 100
Rectangle {
id: redRect
- width: 100; height: 100
+ width: 50; height: 50
color: "red"
}
Rectangle {
id: redRect2
- width: 100; height: 100
- y: 100
+ width: 50; height: 50
+ y: 50
color: "red"
}
- MouseArea {
- anchors.fill: parent
- onClicked: parent.state = "state1"
+ Timer{
+ interval: 100
+ running: true
+ onTriggered: parent.state = "state1"
}
states: State {
name: "state1"
PropertyChanges {
target: redRect
- x: 300
+ x: 150
color: "purple"
}
PropertyChanges {
target: redRect2
- x: 300
+ x: 150
color: "purple"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.0.png
new file mode 100644
index 0000000..41d51da
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.1.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.1.png
new file mode 100644
index 0000000..953e8bd
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.2.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.2.png
new file mode 100644
index 0000000..b311ae1
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.3.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.3.png
new file mode 100644
index 0000000..41d51da
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.4.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.4.png
new file mode 100644
index 0000000..5b68a73
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.qml
index edefd01..4296883 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation-visual.qml
@@ -6,1658 +6,1218 @@ VisualTest {
}
Frame {
msec: 16
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ image: "parentAnimation-visual.0.png"
}
Frame {
msec: 32
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 48
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 64
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 80
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 96
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 112
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 128
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 144
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 160
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 176
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 192
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 208
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 224
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 240
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 256
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 272
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 288
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 304
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 320
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 336
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 352
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 368
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 384
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 400
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "234b795b5dd412e4397f132f03f38175"
}
Frame {
msec: 416
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "eca09aebcc15501fd348b9eb19b54ee2"
}
Frame {
msec: 432
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "6ab63f771ac705439157cf0ed84bc274"
}
Frame {
msec: 448
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "42212db87d03c35e96e38ac200bd9ec2"
}
Frame {
msec: 464
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
}
Frame {
msec: 480
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "cdfee36535e491328f5045b6f3378b64"
}
Frame {
msec: 496
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "5cfc7db34110aa39f296fe4475de0c08"
}
Frame {
msec: 512
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "df59e3aa557a661ce513523c3059c41d"
}
Frame {
msec: 528
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "2d2f8fc7d695bcd20ef682b25a22186a"
}
Frame {
msec: 544
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "daac5f2d4b451501669a7767d0a19ccc"
}
Frame {
msec: 560
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "e10801e6c7086eac3eaaa48a3d39bb95"
}
Frame {
msec: 576
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "a5fdf57b20bf4d4aad99f02a13bbfc66"
}
Frame {
msec: 592
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "b48721b169b4a1118b040a9e41c252a1"
}
Frame {
msec: 608
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "242425f06d5706f0483e49812bfb4718"
}
Frame {
msec: 624
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "33bdd4d71b1736055d821ee5040bfaed"
}
Frame {
msec: 640
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 656
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 672
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 688
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 704
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 720
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 736
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 752
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 768
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 784
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 800
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 816
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 832
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 848
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 864
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 880
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 896
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 912
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 928
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 944
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 960
- image: "parentAnimation.0.png"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 976
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ image: "parentAnimation-visual.1.png"
}
Frame {
msec: 992
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1008
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1024
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1040
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1056
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1072
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1088
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1104
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1120
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1136
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1152
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 1168
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "b985be8701f0bbb73facfe745d43e32f"
}
Frame {
msec: 1184
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "6b3e91ff248516656fd2efe26db6c900"
}
Frame {
msec: 1200
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "40bd9296de59b3abc5b7a204a6ecff3f"
}
Frame {
msec: 1216
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "615817b53baf0d0cd290b18ad9deee4d"
}
Frame {
msec: 1232
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "c990d9afcebfc4dcc35457d555d7e9cb"
}
Frame {
msec: 1248
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "2d1a4687abe3fd7b1911f8e5020c4378"
}
Frame {
msec: 1264
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "b5e1399f1924dafa6782da6b739af882"
}
Frame {
msec: 1280
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "8686a36600410f4f39f558eadfb3479f"
}
Frame {
msec: 1296
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "39f1f7573198f86e1452211f62dc7f1a"
}
Frame {
msec: 1312
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbfbbcb5637c0f90396150abb0aecb14"
}
Frame {
msec: 1328
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "2c071570228d5a121a64c4c01c443ab2"
}
Frame {
msec: 1344
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "4e076ea1d8f566eca9aa5eb55ce02098"
}
Frame {
msec: 1360
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "72fd6c15e76fd6d74a9584be1e82399b"
}
Frame {
msec: 1376
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "b519ad1958ea69fc4682c06e83f22c42"
}
Frame {
msec: 1392
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "155b39717f45fe5d36348c499635e759"
}
Frame {
msec: 1408
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1424
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1440
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1456
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1472
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1488
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1504
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1520
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1536
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1552
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1568
- hash: "633b5668278295faa57d0cfffe8a29cb"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1584
- hash: "ccbf4505e0f05547d2f7ce874ab941c0"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1600
- hash: "be904489959fa365badb642fa9e85922"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1616
- hash: "de6a97ac6e2677feb223336199cbffe1"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1632
- hash: "997b0a547336a9bb6a67cd9beffe1831"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1648
- hash: "ac9a6e111050b8a7c4492f06c33d3969"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1664
- hash: "7313c0d2ee06e393f486670222c29bb4"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1680
- hash: "24cea420d03d1fdcddb1b9cf5112cbee"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 1696
- hash: "764688785eeaa01e9c84821476911edb"
+ hash: "234b795b5dd412e4397f132f03f38175"
}
Frame {
msec: 1712
- hash: "b24ae0cb512abfd2606ff9c20a6751bf"
+ hash: "eca09aebcc15501fd348b9eb19b54ee2"
}
Frame {
msec: 1728
- hash: "f1daed3391f10e27435a54222df8d0ab"
+ hash: "6ab63f771ac705439157cf0ed84bc274"
}
Frame {
msec: 1744
- hash: "99704e182267f2c12d0215b9c03f4d68"
+ hash: "42212db87d03c35e96e38ac200bd9ec2"
}
Frame {
msec: 1760
- hash: "143cd9259a41b8af5d41a5b2aaf8de64"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
}
Frame {
msec: 1776
- hash: "b5f0a0f838b5870c162a24cd767f068b"
+ hash: "cdfee36535e491328f5045b6f3378b64"
}
Frame {
msec: 1792
- hash: "c5c8cdcbfab7466e447eaff582bf7312"
+ hash: "5cfc7db34110aa39f296fe4475de0c08"
}
Frame {
msec: 1808
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "df59e3aa557a661ce513523c3059c41d"
}
Frame {
msec: 1824
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "2d2f8fc7d695bcd20ef682b25a22186a"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1840
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "2d2f8fc7d695bcd20ef682b25a22186a"
}
Frame {
msec: 1856
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "f611eb7652ce078c81dba533c6c0df5e"
}
Frame {
msec: 1872
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "2a4f853f3eeef5cbacc8fdacfdab3442"
}
Frame {
msec: 1888
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "86a201ea5c4af2a28b4047c0732d33c8"
}
Frame {
msec: 1904
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "e87f15694846a75ff3801aff063d35c7"
}
Frame {
msec: 1920
- image: "parentAnimation.1.png"
+ hash: "c3d42dd4ae49a843f32a3dcc818d0b68"
}
Frame {
msec: 1936
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ image: "parentAnimation-visual.2.png"
}
Frame {
msec: 1952
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1968
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
}
Frame {
msec: 1984
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "079898fb015f88ba9d7cd73f356d2c37"
}
Frame {
msec: 2000
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "5d03ca6d09d241bd686c878d53d9f269"
}
Frame {
msec: 2016
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "d986a00663eb3dafb24bf67b3d6c7a04"
}
Frame {
msec: 2032
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "4e609d8b8921428909a5b78ea1db78b9"
}
Frame {
msec: 2048
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "f611eb7652ce078c81dba533c6c0df5e"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2064
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "f611eb7652ce078c81dba533c6c0df5e"
}
Frame {
msec: 2080
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "2a4f853f3eeef5cbacc8fdacfdab3442"
}
Frame {
msec: 2096
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "86a201ea5c4af2a28b4047c0732d33c8"
}
Frame {
msec: 2112
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "2d498b4b440cd6bce6e02102dc62996d"
}
Frame {
msec: 2128
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "53c55f9fc1aab5f4c552387e8cae749e"
}
Frame {
msec: 2144
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "8d188a1ab2be377198142f3037d15fc3"
}
Frame {
msec: 2160
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "66550b5102e2803fb3cbd85f4b2543e0"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2176
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "66550b5102e2803fb3cbd85f4b2543e0"
}
Frame {
msec: 2192
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "e495d8163793da7503b9d29c6721ff6e"
}
Frame {
msec: 2208
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "065e5775930146539ae589782f4e4352"
}
Frame {
msec: 2224
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "7861ff76ec52f1c0408636f7b53b30b6"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2240
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "7861ff76ec52f1c0408636f7b53b30b6"
}
Frame {
msec: 2256
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "e87f15694846a75ff3801aff063d35c7"
}
Frame {
msec: 2272
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "67edcabe94a3968bbfe3dd1b0b2cd273"
}
Frame {
msec: 2288
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "a0f8e97d347970aca868538f4294a7ce"
}
Frame {
msec: 2304
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "c89421473e754235e209f35dea9afccb"
+ }
+ Mouse {
+ type: 4
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2320
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "c89421473e754235e209f35dea9afccb"
}
Frame {
msec: 2336
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "cdfee36535e491328f5045b6f3378b64"
}
Frame {
msec: 2352
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "ab31653cb8a31f753782ffff045e2b07"
}
Frame {
msec: 2368
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "86a201ea5c4af2a28b4047c0732d33c8"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2384
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "86a201ea5c4af2a28b4047c0732d33c8"
}
Frame {
msec: 2400
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "4bdc37cd35c71d8a25745cb0ff664fea"
}
Frame {
msec: 2416
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "5d03ca6d09d241bd686c878d53d9f269"
}
Frame {
msec: 2432
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "700ff7c6c4ae97b34309bd020807a0e1"
}
Frame {
msec: 2448
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "e812a79fb65142f6855974f87aabdc90"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2464
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "e812a79fb65142f6855974f87aabdc90"
}
Frame {
msec: 2480
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "795809181debf916afbef73c41a66dee"
}
Frame {
msec: 2496
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
+ hash: "b61c0e25fa9f3c15f1caf91c25937d75"
}
Frame {
msec: 2512
- hash: "eaeeb8c51d43e3c38ff7dde632d1f9c8"
+ hash: "9dd01662ee9d0add862b3afadac72929"
}
Frame {
msec: 2528
- hash: "ec0e68c2e7a75fedd1091ce633dadd4f"
+ hash: "0a96c8fec8f6509dbbe16480fe8ebfb7"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2544
- hash: "a5d60efc176dee9083a2d746e7ad8315"
+ hash: "0a96c8fec8f6509dbbe16480fe8ebfb7"
}
Frame {
msec: 2560
- hash: "48bcbbacf413080247f818e35e496e04"
+ hash: "ce67814de0091d5ab5cc2172a830bc93"
}
Frame {
msec: 2576
- hash: "c521af8efa19fbac39119ad75cd469f5"
+ hash: "d986a00663eb3dafb24bf67b3d6c7a04"
}
Frame {
msec: 2592
- hash: "0e74613c67fc9d9acb21a3d382c5efcd"
+ hash: "69e21aefb8bdbfaaa5e1e7969d827ec3"
}
Frame {
msec: 2608
- hash: "eeb3f4467ebd7ee678c3b7371db28519"
+ hash: "cdfee36535e491328f5045b6f3378b64"
}
Frame {
msec: 2624
- hash: "9c5b9009a35b74d0ddec8fec85f204bf"
+ hash: "cdb20c4866bdf55bd454864a31676053"
}
Frame {
msec: 2640
- hash: "aefc70824e23428aebf0a40830a57469"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
}
Frame {
msec: 2656
- hash: "1fa9c23760193b74b0063b4e4c434070"
+ hash: "c2535eb78e0cf46151f15cd2ec7c4838"
}
Frame {
msec: 2672
- hash: "8091700d4729163bd87521385853e608"
+ hash: "7a1455f07b916a63e43b89da4311a033"
}
Frame {
msec: 2688
- hash: "a13558e609570f9390f20a85d244fa22"
+ hash: "f9a2c0ef913ecd7026d9775648a063d6"
}
Frame {
msec: 2704
- hash: "7be5e3609bbeb9a2c1df7d52f3953d4d"
+ hash: "5da8f6f7d847c174da393015dfc33537"
}
Frame {
msec: 2720
- hash: "51c8ae31f858121d86ef09cc9a5c5ef3"
+ hash: "1d5f20cb721f1e5cb067095bee1b51fe"
}
Frame {
msec: 2736
- hash: "84ce8f39207f4b07c2c3323425a8c238"
+ hash: "ca7f5fa76264d1eb1182e46e371ee81c"
}
Frame {
msec: 2752
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "2467dc0ffdb051e092c5bfd5d371e6b6"
}
Frame {
msec: 2768
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "0b04e516eb08978914c39ec2d742e161"
}
Frame {
msec: 2784
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "5abec56587da54876c204d2e32efe7ad"
}
Frame {
msec: 2800
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2816
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2832
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2848
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2864
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2880
- image: "parentAnimation.2.png"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2896
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ image: "parentAnimation-visual.3.png"
}
Frame {
msec: 2912
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2928
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2944
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2960
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2976
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 2992
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3008
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3024
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3040
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3056
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3072
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3088
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3104
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3120
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3136
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "234b795b5dd412e4397f132f03f38175"
}
Frame {
msec: 3152
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "eca09aebcc15501fd348b9eb19b54ee2"
}
Frame {
msec: 3168
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "6ab63f771ac705439157cf0ed84bc274"
}
Frame {
msec: 3184
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "42212db87d03c35e96e38ac200bd9ec2"
}
Frame {
msec: 3200
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "46a79ff030b89a4c8791fd853a96b64f"
}
Frame {
msec: 3216
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "cdfee36535e491328f5045b6f3378b64"
}
Frame {
msec: 3232
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "5cfc7db34110aa39f296fe4475de0c08"
}
Frame {
msec: 3248
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "df59e3aa557a661ce513523c3059c41d"
}
Frame {
msec: 3264
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "2d2f8fc7d695bcd20ef682b25a22186a"
}
Frame {
msec: 3280
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "daac5f2d4b451501669a7767d0a19ccc"
}
Frame {
msec: 3296
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "e10801e6c7086eac3eaaa48a3d39bb95"
}
Frame {
msec: 3312
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "a5fdf57b20bf4d4aad99f02a13bbfc66"
}
Frame {
msec: 3328
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "b48721b169b4a1118b040a9e41c252a1"
}
Frame {
msec: 3344
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "242425f06d5706f0483e49812bfb4718"
}
Frame {
msec: 3360
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "33bdd4d71b1736055d821ee5040bfaed"
}
Frame {
msec: 3376
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3392
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3408
- hash: "633b5668278295faa57d0cfffe8a29cb"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3424
- hash: "ccbf4505e0f05547d2f7ce874ab941c0"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3440
- hash: "be904489959fa365badb642fa9e85922"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3456
- hash: "de6a97ac6e2677feb223336199cbffe1"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3472
- hash: "997b0a547336a9bb6a67cd9beffe1831"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3488
- hash: "ac9a6e111050b8a7c4492f06c33d3969"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3504
- hash: "7313c0d2ee06e393f486670222c29bb4"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3520
- hash: "24cea420d03d1fdcddb1b9cf5112cbee"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3536
- hash: "764688785eeaa01e9c84821476911edb"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3552
- hash: "b24ae0cb512abfd2606ff9c20a6751bf"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3568
- hash: "b24ae0cb512abfd2606ff9c20a6751bf"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3584
- hash: "d7bf1b48f1a03974e7f095468e07f037"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3600
- hash: "a59ab4fe1c22d27b5cdde949cf90e6f4"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3616
- hash: "7c3082720e65b8a6217bf5a5fe4d48c0"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3632
- hash: "350d1ff24fb8fba0ab8a6694d99544b3"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 181; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3648
- hash: "81d17a62c33d79ed25968ec47771d292"
+ hash: "dce97e76b2541bbee52b0df1c1bb3d44"
}
Frame {
msec: 3664
- hash: "43fd3ef88bd7a2e5bf4546f088783077"
+ hash: "b985be8701f0bbb73facfe745d43e32f"
}
Frame {
msec: 3680
- hash: "041938ad2e023202db18df28f2329c8f"
+ hash: "6b3e91ff248516656fd2efe26db6c900"
}
Frame {
msec: 3696
- hash: "ec8677eae06cbf77a9508953325b179e"
- }
- Mouse {
- type: 4
- button: 1
- buttons: 1
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "40bd9296de59b3abc5b7a204a6ecff3f"
}
Frame {
msec: 3712
- hash: "ec8677eae06cbf77a9508953325b179e"
+ hash: "615817b53baf0d0cd290b18ad9deee4d"
}
Frame {
msec: 3728
- hash: "453026339c3901ee286831b4b41088f6"
+ hash: "c990d9afcebfc4dcc35457d555d7e9cb"
}
Frame {
msec: 3744
- hash: "d58a7a41ade691cc0acfb0303bfc3b68"
+ hash: "2d1a4687abe3fd7b1911f8e5020c4378"
}
Frame {
msec: 3760
- hash: "a200b05ef3d7e39e11513fd2f8ff1497"
+ hash: "b5e1399f1924dafa6782da6b739af882"
}
Frame {
msec: 3776
- hash: "faa1223975acdf2d4b48045d7f2ce445"
+ hash: "8686a36600410f4f39f558eadfb3479f"
}
Frame {
msec: 3792
- hash: "964d9b80d82d0fe3d3fb328a1661a60e"
+ hash: "39f1f7573198f86e1452211f62dc7f1a"
}
Frame {
msec: 3808
- hash: "705871bc384de93100354acb19b371b0"
+ hash: "fbfbbcb5637c0f90396150abb0aecb14"
}
Frame {
msec: 3824
- hash: "1a4480463adfc5a3d525916b03c2c3ce"
+ hash: "2c071570228d5a121a64c4c01c443ab2"
}
Frame {
msec: 3840
- image: "parentAnimation.3.png"
+ hash: "4e076ea1d8f566eca9aa5eb55ce02098"
}
Frame {
msec: 3856
- hash: "9a55bdf428f45f02d9c8cf414dcd7754"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ image: "parentAnimation-visual.4.png"
}
Frame {
msec: 3872
- hash: "9a55bdf428f45f02d9c8cf414dcd7754"
+ hash: "b519ad1958ea69fc4682c06e83f22c42"
}
Frame {
msec: 3888
- hash: "0f6d82d02ce7d79a1bdf6bf81791f321"
+ hash: "155b39717f45fe5d36348c499635e759"
}
Frame {
msec: 3904
- hash: "b145b9d299714020686069baec11cb71"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3920
- hash: "5dbf5e4151c01f10cf23b07ca1df56ab"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3936
- hash: "822d4397ac514673ca1015ad05c9b4ac"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3952
- hash: "461d35e865153d22e9a67bb0ffddefb7"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3968
- hash: "676fff498e6879144090d5596056c6c8"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 3984
- hash: "854da7ed627237250e20b263f9eb9d90"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4000
- hash: "157ec877797883d329ff329537205d02"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4016
- hash: "613669ca60240fcc490d548fe802390d"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4032
- hash: "803e84f027c773db96f9530511e5fedb"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4048
- hash: "803e84f027c773db96f9530511e5fedb"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4064
- hash: "f47cfd1f1094b782c08490be2f49c6ed"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4080
- hash: "db5953f3ee4e2db87e33b85464167f74"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4096
- hash: "8313cb750b9abc586a43b9422de08f53"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4112
- hash: "deb390ce992fee85c56733168b4bd1ec"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4128
- hash: "29a1cda3647c49731e9adcd107a2d13c"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4144
- hash: "bfa17a3afa06699107b217df6e4aed43"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4160
- hash: "8e639ef01ab6d8876c3f40adc44928c6"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4176
- hash: "14038aedf42de0ca62d872d317018ee0"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4192
- hash: "c1288465163d44ed40e28f21e0298ea6"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4208
- hash: "d6915f22a905737488d27e8138002f31"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4224
- hash: "5b1621451a5a3af40302603ec31bb8bb"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4240
- hash: "16fd73c0cb615cc717cdc4a6787471c2"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4256
- hash: "16fd73c0cb615cc717cdc4a6787471c2"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4272
- hash: "db5caf42e11705ecdb2006e1ed6b0c4f"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4288
- hash: "4b7e51e4e9fb1dacb32aac11a4a46ceb"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4304
- hash: "63c93cda9892f733809125991af997b6"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4320
- hash: "0e74613c67fc9d9acb21a3d382c5efcd"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4336
- hash: "58e813a6619828b6c9ec9cf300ff0e2d"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4352
- hash: "181a6e334d745381f091bf1b55fc1690"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4368
- hash: "f25bbc9ddc8cc72036c49d50b45bece8"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4384
- hash: "88e8f0496debfee6bc2426895fe1c3d9"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4400
- hash: "db5953f3ee4e2db87e33b85464167f74"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
Frame {
msec: 4416
- hash: "9818a899adb916b6ba5f7537697ef062"
- }
- Frame {
- msec: 4432
- hash: "3842f40093d70089a4004fb803c05981"
- }
- Frame {
- msec: 4448
- hash: "be904489959fa365badb642fa9e85922"
- }
- Frame {
- msec: 4464
- hash: "cbae27751ff0ebce4fcc164564f4cf1b"
- }
- Frame {
- msec: 4480
- hash: "3a1b468bd3fd747bbe6b069426b170a9"
- }
- Frame {
- msec: 4496
- hash: "57fbcd580eb1607a2a7526a65842dfeb"
- }
- Frame {
- msec: 4512
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4528
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4544
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4560
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4576
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4592
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4608
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4624
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 4640
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 4656
- hash: "633b5668278295faa57d0cfffe8a29cb"
- }
- Frame {
- msec: 4672
- hash: "ccbf4505e0f05547d2f7ce874ab941c0"
- }
- Frame {
- msec: 4688
- hash: "be904489959fa365badb642fa9e85922"
- }
- Frame {
- msec: 4704
- hash: "de6a97ac6e2677feb223336199cbffe1"
- }
- Frame {
- msec: 4720
- hash: "997b0a547336a9bb6a67cd9beffe1831"
- }
- Frame {
- msec: 4736
- hash: "ac9a6e111050b8a7c4492f06c33d3969"
- }
- Frame {
- msec: 4752
- hash: "7313c0d2ee06e393f486670222c29bb4"
- }
- Frame {
- msec: 4768
- hash: "24cea420d03d1fdcddb1b9cf5112cbee"
- }
- Frame {
- msec: 4784
- hash: "764688785eeaa01e9c84821476911edb"
- }
- Frame {
- msec: 4800
- image: "parentAnimation.4.png"
- }
- Frame {
- msec: 4816
- hash: "f1daed3391f10e27435a54222df8d0ab"
- }
- Frame {
- msec: 4832
- hash: "99704e182267f2c12d0215b9c03f4d68"
- }
- Frame {
- msec: 4848
- hash: "143cd9259a41b8af5d41a5b2aaf8de64"
- }
- Frame {
- msec: 4864
- hash: "b5f0a0f838b5870c162a24cd767f068b"
- }
- Frame {
- msec: 4880
- hash: "c5c8cdcbfab7466e447eaff582bf7312"
- }
- Frame {
- msec: 4896
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4912
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4928
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4944
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4960
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4976
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 4992
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5008
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5024
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5040
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5056
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5072
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5088
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5104
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5120
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5136
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5152
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5168
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5184
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5200
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5216
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5232
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5248
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5264
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5280
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5296
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5312
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5328
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5344
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 237; y: 299
- modifiers: 0
- sendToViewport: true
- }
- Frame {
- msec: 5360
- hash: "f1bc451d1f62cfb5dd60a7ea483d3844"
- }
- Frame {
- msec: 5376
- hash: "eaeeb8c51d43e3c38ff7dde632d1f9c8"
- }
- Frame {
- msec: 5392
- hash: "ec0e68c2e7a75fedd1091ce633dadd4f"
- }
- Frame {
- msec: 5408
- hash: "a5d60efc176dee9083a2d746e7ad8315"
- }
- Frame {
- msec: 5424
- hash: "48bcbbacf413080247f818e35e496e04"
- }
- Frame {
- msec: 5440
- hash: "c521af8efa19fbac39119ad75cd469f5"
- }
- Frame {
- msec: 5456
- hash: "0e74613c67fc9d9acb21a3d382c5efcd"
- }
- Frame {
- msec: 5472
- hash: "eeb3f4467ebd7ee678c3b7371db28519"
- }
- Frame {
- msec: 5488
- hash: "9c5b9009a35b74d0ddec8fec85f204bf"
- }
- Frame {
- msec: 5504
- hash: "aefc70824e23428aebf0a40830a57469"
- }
- Frame {
- msec: 5520
- hash: "1fa9c23760193b74b0063b4e4c434070"
- }
- Frame {
- msec: 5536
- hash: "8091700d4729163bd87521385853e608"
- }
- Frame {
- msec: 5552
- hash: "a13558e609570f9390f20a85d244fa22"
- }
- Frame {
- msec: 5568
- hash: "7be5e3609bbeb9a2c1df7d52f3953d4d"
- }
- Frame {
- msec: 5584
- hash: "51c8ae31f858121d86ef09cc9a5c5ef3"
- }
- Frame {
- msec: 5600
- hash: "84ce8f39207f4b07c2c3323425a8c238"
- }
- Frame {
- msec: 5616
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5632
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5648
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5664
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5680
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5696
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5712
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5728
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5744
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5760
- image: "parentAnimation.5.png"
- }
- Frame {
- msec: 5776
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5792
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5808
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5824
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5840
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5856
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5872
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5888
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5904
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5920
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5936
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5952
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5968
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 5984
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6000
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6016
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 67108864
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 6032
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6048
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6064
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6080
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6096
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6112
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6128
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6144
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6160
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6176
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6192
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6208
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6224
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6240
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6256
- hash: "4135271d78a5c63c3837a09c86f35ebe"
- }
- Frame {
- msec: 6272
- hash: "4135271d78a5c63c3837a09c86f35ebe"
+ hash: "fbf01bb217e393b79a6a2c567750de89"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.0.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.0.png
deleted file mode 100644
index 7d41abc..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.1.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.1.png
deleted file mode 100644
index 16b95ab..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.2.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.2.png
deleted file mode 100644
index 7d41abc..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.3.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.3.png
deleted file mode 100644
index 800bf12..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.4.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.4.png
deleted file mode 100644
index d0155bb..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.5.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.5.png
deleted file mode 100644
index 7d41abc..0000000
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/data/parentAnimation.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation-visual.qml
index 42cec3a..025aa80 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation/parentAnimation-visual.qml
@@ -10,14 +10,14 @@ then a final full transition.
*/
Rectangle {
- width: 800;
- height: 480;
+ width: 400;
+ height: 240;
color: "black";
Rectangle {
id: gr
color: "green"
- width: 100; height: 100
+ width: 50; height: 50
}
MouseArea {
@@ -27,21 +27,21 @@ Rectangle {
Rectangle {
id: np
- x: 300
- width: 300; height: 300
+ x: 150
+ width: 150; height: 150
color: "yellow"
clip: true
Rectangle {
color: "red"
- x: 100; y: 100; height: 100; width: 100
+ x: 50; y: 50; height: 50; width: 50
}
}
Rectangle {
id: vp
- x: 200; y: 200
- width: 100; height: 100
+ x: 100; y: 100
+ width: 50; height: 50
color: "blue"
rotation: 45
scale: 2
@@ -53,7 +53,7 @@ Rectangle {
ParentChange {
target: gr
parent: np
- x: 100; y: 100; width: 200;
+ x: 50; y: 50; width: 100;
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.0.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.0.png
index 135911c..03ae932 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.1.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.1.png
index 0d71292..175adc3 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.2.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.2.png
index 920d992..4dbe6a4 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.3.png b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.3.png
index 1c4d89e..b9ea6b8 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.qml b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.qml
index 9e1b923..1d7817b 100644
--- a/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.qml
+++ b/tests/auto/declarative/qmlvisual/animation/parentAnimation2/data/parentAnimation2.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "b3bfd7a06d3e246f4256ab5a267360b0"
+ image: "parentAnimation2.0.png"
}
Frame {
msec: 32
@@ -258,11 +258,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "parentAnimation2.0.png"
+ hash: "5983f3e0800859134bff0182fe9e0142"
}
Frame {
msec: 976
- hash: "95b4fe1e5eeffe1673e199308e8ce76c"
+ image: "parentAnimation2.1.png"
}
Frame {
msec: 992
@@ -514,11 +514,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "parentAnimation2.1.png"
+ hash: "3210f97ac2799d84fc1d872c4c2994f7"
}
Frame {
msec: 1936
- hash: "60ed700e49bf2c51aba9b44400b56294"
+ image: "parentAnimation2.2.png"
}
Frame {
msec: 1952
@@ -762,11 +762,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "parentAnimation2.2.png"
+ hash: "acab4a79f22ebc8a45759ae282e8f3db"
}
Frame {
msec: 2896
- hash: "acab4a79f22ebc8a45759ae282e8f3db"
+ image: "parentAnimation2.3.png"
}
Mouse {
type: 3
@@ -1018,6 +1018,6 @@ VisualTest {
}
Frame {
msec: 3840
- image: "parentAnimation2.3.png"
+ hash: "b3bfd7a06d3e246f4256ab5a267360b0"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.0.png
new file mode 100644
index 0000000..cb0971a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.1.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.1.png
new file mode 100644
index 0000000..c579ded
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.2.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.2.png
new file mode 100644
index 0000000..49e2b9f
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.3.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.3.png
new file mode 100644
index 0000000..cb0971a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.4.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.4.png
new file mode 100644
index 0000000..e62485b
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.5.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.5.png
new file mode 100644
index 0000000..61e7463
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.6.png b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.6.png
new file mode 100644
index 0000000..8c31e7d
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.qml
index 8e1e1d7..34deb9b 100644
--- a/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/pauseAnimation/data/pauseAnimation-visual.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ image: "pauseAnimation-visual.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "pauseAnimation.0.png"
+ hash: "f1e0301430d153fb9d15eaffdfcd5c58"
}
Frame {
msec: 976
- hash: "5f18a81707f23d377e81a27c1fc41ce9"
+ image: "pauseAnimation-visual.1.png"
}
Frame {
msec: 992
@@ -482,11 +482,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "pauseAnimation.1.png"
+ hash: "3042003c067b257de2cb32f650dde693"
}
Frame {
msec: 1936
- hash: "a725b59b4947357546bbfc7df3d830af"
+ image: "pauseAnimation-visual.2.png"
}
Frame {
msec: 1952
@@ -722,11 +722,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "pauseAnimation.2.png"
+ hash: "a350b70c5238a340e85fd4a3ec0390a3"
}
Frame {
msec: 2896
- hash: "a350b70c5238a340e85fd4a3ec0390a3"
+ image: "pauseAnimation-visual.3.png"
}
Frame {
msec: 2912
@@ -962,11 +962,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "pauseAnimation.3.png"
+ hash: "7c27ef654e645679c90520d6cf00b0c4"
}
Frame {
msec: 3856
- hash: "20258f07c613958c32f783466771391a"
+ image: "pauseAnimation-visual.4.png"
}
Frame {
msec: 3872
@@ -1202,11 +1202,11 @@ VisualTest {
}
Frame {
msec: 4800
- image: "pauseAnimation.4.png"
+ hash: "336d31586171f22d541b989d24b95cbb"
}
Frame {
msec: 4816
- hash: "f0d8132489c2f2ef760e905b3c093726"
+ image: "pauseAnimation-visual.5.png"
}
Frame {
msec: 4832
@@ -1442,11 +1442,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "pauseAnimation.5.png"
+ hash: "ce57e27af329eba4fac3ab891f0407ce"
}
Frame {
msec: 5776
- hash: "41ba853c3403f68a23e708df82e21c53"
+ image: "pauseAnimation-visual.6.png"
}
Frame {
msec: 5792
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png
index 64d6b06..7d2b66e 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png
index f7fce15..a02c063 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png
index 3080df5..1af3243 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.3.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.3.png
new file mode 100644
index 0000000..7d2b66e
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
index 36b39fa..3c24f59 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
@@ -6,934 +6,810 @@ VisualTest {
}
Frame {
msec: 16
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ image: "propertyAction-visual.0.png"
}
Frame {
msec: 32
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 48
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 64
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 80
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 96
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 112
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 128
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 144
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 160
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 176
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 192
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 208
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 224
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 240
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 256
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 272
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 288
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 304
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 320
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 336
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 352
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 368
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 384
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 400
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 416
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 432
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 448
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 464
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 480
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 496
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 512
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 528
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 544
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 560
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 576
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 592
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 608
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 624
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 640
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 656
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 672
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 688
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 704
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 720
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 736
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 27; y: 19
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 752
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 768
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 784
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 800
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 816
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "e8e6b7d7f81895ae556936ba5e0848a5"
}
Frame {
msec: 832
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f"
}
Frame {
msec: 848
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f"
}
Frame {
msec: 864
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "02e3d071d5fc0832041688950d3610b8"
}
Frame {
msec: 880
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "aad38d9678bdeeed750f381a40e22a61"
}
Frame {
msec: 896
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "a8753ac7d026d94224c488fa16d5774a"
}
Frame {
msec: 912
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "9de26e2d70bd285116df820ca87c2e4d"
}
Frame {
msec: 928
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "985c6ee9cb5f259135a4eeb3c2f1d271"
}
Frame {
msec: 944
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "985c6ee9cb5f259135a4eeb3c2f1d271"
}
Frame {
msec: 960
- image: "propertyAction-visual.0.png"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 976
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ image: "propertyAction-visual.1.png"
}
Frame {
msec: 992
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 1008
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68"
}
Frame {
msec: 1024
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68"
}
Frame {
msec: 1040
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "81c157daf3086b21ea2ba39277a31f3d"
}
Frame {
msec: 1056
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "a19d2e389a71472929fed6691dbe40ec"
}
Frame {
msec: 1072
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "0fc67582f36db63dc3df1027bf7ad90b"
}
Frame {
msec: 1088
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c53f1a42113fdc2e525c43460ed40f81"
}
Frame {
msec: 1104
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c8968753e599419bc2d70adb95b643f2"
}
Frame {
msec: 1120
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "449fbda0dc3e45d022832f9d15203466"
}
Frame {
msec: 1136
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "7778e32071419dd53920536bac1eb21a"
}
Frame {
msec: 1152
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "279510c6ca5429a22855a08e88a1b4b5"
}
Frame {
msec: 1168
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "ac86ca53dc52c7c54bd993faa2daf0b9"
}
Frame {
msec: 1184
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "7e20361da8a49f9699e290673bdd60ee"
}
Frame {
msec: 1200
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "aa5f6e188212cee2dbf8d1e52692ac88"
}
Frame {
msec: 1216
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "14018d9d2370c46b5f0c280cb169225e"
}
Frame {
msec: 1232
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1248
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1264
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1280
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1296
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1312
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1328
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1344
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1360
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1376
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1392
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1408
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1424
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1440
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1456
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1472
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1488
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1504
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1520
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1536
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1552
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1568
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1584
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1600
- hash: "55b713dcb7c810bf126e06cc97d26d24"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 109; y: 247
- modifiers: 0
- sendToViewport: true
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1616
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1632
- hash: "c91921dba899d7a86de3cd013773889f"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1648
- hash: "888c0fc86155e10b5fc577ef6ec5755a"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1664
- hash: "7fd61a8910bf7b0d2bf57653a268c5d8"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1680
- hash: "f42f5073f90a423adf011d0e168c8a9b"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1696
- hash: "a3d89deb6cfa2bbbaa1d7d5b5e5b48d5"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 27; y: 19
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1712
- hash: "f10e997d7a17c18251a32d58b018105a"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1728
- hash: "09ffb57d5f67edfa34d6aad36a002554"
+ hash: "29ad10997d8045ccfd69fe78475dd2f3"
}
Frame {
msec: 1744
- hash: "01f3a2f5b9815f1397a907b099339360"
+ hash: "7b99c5dd3750291043f62479314ccb2f"
}
Frame {
msec: 1760
- hash: "58c0910c49748edd2ef8472960179472"
+ hash: "d3409cf579db724440f3f59cfc902974"
}
Frame {
msec: 1776
- hash: "cc82c5f7f93c5bc1af1c6c509268566a"
+ hash: "2ad2a4b3f933e3a27acb232adf06eb7f"
}
Frame {
msec: 1792
- hash: "3ef272c6439b85fbc166375d1b98403c"
+ hash: "35074cf4f2753c77e112092e92630c71"
}
Frame {
msec: 1808
- hash: "98c576f0900e4b8752d1f951bb6bf391"
+ hash: "f7038f7e6d7b6498ff1a4098c79f9d2a"
}
Frame {
msec: 1824
- hash: "4d66dd64d8736ef50163e08723873478"
+ hash: "fec23135661d2368cf3cf64f7d62af73"
}
Frame {
msec: 1840
- hash: "9a5d8455b6763456185625811253e0b1"
+ hash: "4143603bf203319f423d21f204fac3b0"
}
Frame {
msec: 1856
- hash: "77e85731efa786a2492aae19a87523c6"
+ hash: "f3d41bdc8ae60f6fbf109206ac9023de"
}
Frame {
msec: 1872
- hash: "f3199d0c860f1236e0b9472bef8785bc"
+ hash: "41064ea276aabfba45966130d2ec4b06"
}
Frame {
msec: 1888
- hash: "f3199d0c860f1236e0b9472bef8785bc"
+ hash: "dfbe242fc8bc3c70207be901ac2db139"
}
Frame {
msec: 1904
- hash: "32ccdab249268b01d9f1658a736052f1"
+ hash: "a8a9f435774def4255ae433646cc5263"
}
Frame {
msec: 1920
- image: "propertyAction-visual.1.png"
+ hash: "81c157daf3086b21ea2ba39277a31f3d"
}
Frame {
msec: 1936
- hash: "db3010ef552146df938c237f6c92bff5"
+ image: "propertyAction-visual.2.png"
}
Frame {
msec: 1952
- hash: "101e8595d0301e88376ec52ba9361f84"
+ hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68"
}
Frame {
msec: 1968
- hash: "119d548c59baa7e47266d2ceca663288"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 1984
- hash: "f141fafe102a0b9a2bf33e8c3fc800ff"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 2000
- hash: "b01f9ca8d4fbff17b3d48c70898a044d"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 2016
- hash: "cf67954a2d1b22e8d2cfdc26419bafb8"
+ hash: "4ba1bf769de9bc45630485d06642dc30"
}
Frame {
msec: 2032
- hash: "7680b2b5a63dea13d733947297e01355"
+ hash: "985c6ee9cb5f259135a4eeb3c2f1d271"
}
Frame {
msec: 2048
- hash: "af1c017acf6b3c8cff86c9ceb60db3cb"
+ hash: "9de26e2d70bd285116df820ca87c2e4d"
}
Frame {
msec: 2064
- hash: "0b23ec51f71fddae5e2238ab5754f1db"
+ hash: "a8753ac7d026d94224c488fa16d5774a"
}
Frame {
msec: 2080
- hash: "976643961ecbdc86335180ba812b874e"
+ hash: "aad38d9678bdeeed750f381a40e22a61"
}
Frame {
msec: 2096
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "abddb88af9b07e782f6c2103479abe3d"
}
Frame {
msec: 2112
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "02e3d071d5fc0832041688950d3610b8"
}
Frame {
msec: 2128
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f"
}
Frame {
msec: 2144
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "e8e6b7d7f81895ae556936ba5e0848a5"
}
Frame {
msec: 2160
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 2176
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 2192
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "a858eee4b2753915ec84d2ffa098260c"
}
Frame {
msec: 2208
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2224
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2240
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2256
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2272
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2288
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2304
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2320
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2336
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2352
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2368
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2384
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2400
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2416
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2432
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2448
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2464
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2480
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2496
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2512
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2528
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2544
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2560
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2576
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2592
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2608
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2624
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2640
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2656
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2672
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2688
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2704
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2720
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2736
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2752
- hash: "aeed60899abb6c486a5b1df81f9a0224"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 109; y: 247
- modifiers: 0
- sendToViewport: true
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2768
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2784
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2800
- hash: "ab924ae435262e76381c2e4af5d64342"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2816
- hash: "d60758fc12471a19d31c85f058f2ded7"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2832
- hash: "c62e2956f8eb5d2c8cd76ba05c5929d5"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2848
- hash: "f2967ee7e035a9ff258116a2706529f8"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2864
- hash: "885c4705c6c29f69c56c44abc1251d75"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2880
- image: "propertyAction-visual.2.png"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2896
- hash: "f4af6871e522511f95bc4c5abfc2a562"
+ image: "propertyAction-visual.3.png"
}
Frame {
msec: 2912
- hash: "b27e1e7e0d90468525309528ccfe2823"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2928
- hash: "78e7d84a4466258b40315fe61b7ca15c"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2944
- hash: "471013d921d8d6e7468fd6aba0b75c71"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2960
- hash: "856048da893c9136ac5740bc89b64128"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2976
- hash: "32ccdab249268b01d9f1658a736052f1"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 2992
- hash: "2264fa3acd979f104633c1301a0efd8f"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3008
- hash: "f3199d0c860f1236e0b9472bef8785bc"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3024
- hash: "ad899d1ecaa43a5541be7b70413caee5"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3040
- hash: "4e652524c992f5ee1b987275ca509728"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3056
- hash: "a44b3dec2a016694bc8553a51b29d46c"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3072
- hash: "7fbe20346bc3c28c345e0797b55599f3"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3088
- hash: "bcff18ad433bb4f08126ee66efb037d1"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3104
- hash: "836666c64f73c38e87de95944ff2fe72"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3120
- hash: "4379982d23db239b1741b5d72c53e160"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3136
- hash: "0ed9476337214e1493c1510b8a4c90f8"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3152
- hash: "dab637406577a1924c7dbb30680e1af3"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
Frame {
msec: 3168
- hash: "38b7e5894cf49a19ac055264d6447b9f"
- }
- 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"
+ hash: "1e5ac43e0f553886bcb2b4016f7e3414"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml
index 6c3e52d..3ff4214 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml
@@ -1,17 +1,17 @@
import QtQuick 1.0
/*
-This test starts with a red rectangle at 0,0. It should animate a color change to blue,
+This test starts with a 30x40 rectangle at 0,0. It should animate a width change to 40,
then jump 50 pixels right, and then animate moving 50 pixels down. Afer this it should
do an exact visual reversal (animate up 50 pixels, jump left 50 pixels, and then animate
-a change back to red).
+a change back to 30px wide).
*/
Rectangle {
- width: 400; height: 400
+ width: 100; height: 100
Rectangle {
id: myRect
- width: 100; height: 100
+ width: 30; height: 40
color: "red"
}
MouseArea {
@@ -24,8 +24,7 @@ Rectangle {
when: clickable.pressed
PropertyChanges {
target: myRect
- x: 50; y: 50
- color: "blue"
+ x: 50; y: 50; width: 40
}
}
@@ -33,7 +32,7 @@ Rectangle {
to: "state1"
reversible: true
SequentialAnimation {
- ColorAnimation {}
+ NumberAnimation { properties: "width"; easing.type: "InOutQuad" }
PropertyAction { properties: "x" }
NumberAnimation { properties: "y"; easing.type: "InOutQuad" }
}
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png
index d8be67b..4af1744 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png
index 249e0dd..29ca02a 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png
index 044f823..c7da359 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png
index d8be67b..7373951 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png
new file mode 100644
index 0000000..8552406
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml
index dc8e2e2..05b5c99 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml
@@ -6,1146 +6,1102 @@ VisualTest {
}
Frame {
msec: 16
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ image: "qtbug10586.0.png"
}
Frame {
msec: 32
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 48
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 64
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 80
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 96
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 112
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 128
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 144
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 160
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 176
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 192
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 208
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 224
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 240
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 256
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 272
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 288
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 304
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 320
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 336
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 352
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 368
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 384
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 400
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 416
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 432
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 448
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 464
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 480
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 496
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 512
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 528
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 544
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 560
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 576
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 592
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 608
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 624
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 640
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 656
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 672
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 688
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 704
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 155; y: 261
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 154; y: 260
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 720
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 260
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 144; y: 258
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 736
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 126; y: 254
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 105; y: 249
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 752
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "3e70a9fcacf40284c4bbf6a8376edfec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 76; y: 247
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 51; y: 245
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 768
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "3b65fbe0980fabd4bcba5757323c8fcf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 20; y: 243
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -25; y: 241
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 784
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0a79d810c2ff479fcc42d40125f6ccda"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -68; y: 238
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: -68; y: 238
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 800
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "9e5b85c715a2a573f0dd3bc7e342625f"
}
Frame {
msec: 816
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "371faa0d3bb3815470ef48713f0363b6"
}
Frame {
msec: 832
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "2f948f765ec2d861841439f03e402bcf"
}
Frame {
msec: 848
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "74dbda8d6d005fb8fb307fc4cf146e1e"
}
Frame {
msec: 864
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "bdf1f0db0411a3456ddc0efff0584e9c"
}
Frame {
msec: 880
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "cb5c7c9fc7e4707f1d8b7bbb9f19065d"
}
Frame {
msec: 896
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "f60df4e47f5b9d16b576ab4107a0c11c"
}
Frame {
msec: 912
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "6fcc1b9d2d1829c48cdfefba632c6a91"
}
Frame {
msec: 928
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "e53272919fa23f7023ce66d3b15c2f05"
}
Frame {
msec: 944
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "dc043143bf35a808fcdf2b692753dc86"
}
Frame {
msec: 960
- image: "qtbug10586.0.png"
+ hash: "dff3c85f1bb42138410e9db7be98425b"
}
Frame {
msec: 976
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ image: "qtbug10586.1.png"
}
Frame {
msec: 992
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d4122caf5fc8cfd59e6048b830acc3fb"
}
Frame {
msec: 1008
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1024
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1040
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1056
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1072
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1088
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1104
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1120
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1136
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1152
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1168
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1184
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1200
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1216
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1232
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1248
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1264
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1280
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1296
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1312
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 174; y: 204
- modifiers: 0
- sendToViewport: true
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1328
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1344
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1360
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1376
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "be218d7ebfb01cf288b284cf40337913"
}
Frame {
msec: 1392
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 170; y: 204
- modifiers: 0
- sendToViewport: true
+ hash: "bd1af1e9187a58841b33862047ad4ae3"
}
Frame {
msec: 1408
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 156; y: 204
- modifiers: 0
- sendToViewport: true
+ hash: "6154c00e9290393daaf1e7a0618874c7"
}
Frame {
msec: 1424
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "6ed42be04df8a4cc15d9d885e4b157f5"
}
Frame {
msec: 1440
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 130; y: 204
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 130; y: 204
- modifiers: 0
- sendToViewport: true
+ hash: "2187c8e798b2b60567284af6923a9418"
}
Frame {
msec: 1456
- hash: "8b7dd0f0a3881f10d76b47cbec4754c3"
+ hash: "39ef8ac3108be3c5b8c85aaa06539952"
}
Frame {
msec: 1472
- hash: "b6fc4990acb245e015c35261a3c6fd75"
+ hash: "a30c2d3bbebdf3ae84c8148dfff53abf"
}
Frame {
msec: 1488
- hash: "849fa4174134804dadc000323141b341"
+ hash: "f9b5ef6675c326a3c6462f8ad173c875"
}
Frame {
msec: 1504
- hash: "35f2d6405ed7d992bb62eb6e24478492"
+ hash: "eab82ad570e59a68c41450df5146aea6"
}
Frame {
msec: 1520
- hash: "673ebb4499522c3f27b775dff1dbbe44"
+ hash: "2caf2dae27a5603de6665c1cafbe6576"
}
Frame {
msec: 1536
- hash: "96945f5489ffd0dc8ab995c96eb5da43"
+ hash: "601b397404250d01ec9e483683c32776"
}
Frame {
msec: 1552
- hash: "2e4543754429ac3db831a2432098c063"
+ hash: "06dd6ec2e0f016fc0cb6bbce27e3dcd3"
}
Frame {
msec: 1568
- hash: "02253fe8a9fd5009a07265c2c6ffc8e4"
+ hash: "9ebba3740bb33db00ebb62706e1d27a5"
}
Frame {
msec: 1584
- hash: "200a89949df1e9ef58d005a139857d2c"
+ hash: "9ebba3740bb33db00ebb62706e1d27a5"
}
Frame {
msec: 1600
- hash: "ceb28be34c7ea8eff5fa00fdea087439"
+ hash: "06dd6ec2e0f016fc0cb6bbce27e3dcd3"
}
Frame {
msec: 1616
- hash: "a9ece475c51f126094c5eff4e20f4a19"
+ hash: "601b397404250d01ec9e483683c32776"
}
Frame {
msec: 1632
- hash: "aa0776f84aef87d6971affdfa2d8dd82"
+ hash: "a80dcdc8ce2c4e2653e01423ea053eba"
}
Frame {
msec: 1648
- hash: "4c74661e1c73fefc9c5154b257239352"
+ hash: "8fe7230266084f07f8fd9c6991461163"
}
Frame {
msec: 1664
- hash: "c10d23df3a75966aad5016bd8ba8e9d8"
+ hash: "5d9ed702af5c520f4b268077b957586a"
}
Frame {
msec: 1680
- hash: "41692977d654a55d3b1d037aea9f2c03"
+ hash: "6cccabc3a6ac3eef95794e6712404234"
}
Frame {
msec: 1696
- hash: "2f1835a1de94f962eb5dc781c85b4c32"
+ hash: "8bfc492064d6c93727b59fd3ca2a8dc8"
}
Frame {
msec: 1712
- hash: "7cb78e2e5f6d35d456c95f2bd8652eb5"
+ hash: "e506cf18d730f4ab1e8e803b7663238a"
}
Frame {
msec: 1728
- hash: "4388aee9b1c8b4fde43634ad08f03557"
+ hash: "2187c8e798b2b60567284af6923a9418"
}
Frame {
msec: 1744
- hash: "1cdc71100fd11cb6e60c9ab7e65e95bf"
+ hash: "6ed42be04df8a4cc15d9d885e4b157f5"
}
Frame {
msec: 1760
- hash: "feddbf269adfc8bb1b1a3656b5b5736d"
+ hash: "b887f64a8e44a243f11e37692d54d2d1"
}
Frame {
msec: 1776
- hash: "76b39ce0ee9b9b4af8aa0141577b8460"
+ hash: "d5f157d073cd8de8cc58124455a38675"
}
Frame {
msec: 1792
- hash: "bac963d3df2841ab7a3770a371f3a94d"
+ hash: "d39f213d4b91229bd76d48589a067623"
}
Frame {
msec: 1808
- hash: "403007bb6c0782fece1cedbd40994550"
+ hash: "7b2413f4fd12fd4d38fc40ebbbd893f3"
}
Frame {
msec: 1824
- hash: "72076c743fdd33fab2ac789c7c22973a"
+ hash: "bd1af1e9187a58841b33862047ad4ae3"
}
Frame {
msec: 1840
- hash: "662be553c32b0145b3f4fee9bb0d659d"
+ hash: "1e54f1b5ef6bb7085a36d433af94a9b3"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 145; y: 286
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 286
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 195; y: 288
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1856
- hash: "e6b9049949a0ee4ff8a0fcaf5464f479"
+ hash: "d84bf962449716cc64cb34b285926c48"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 290
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 253; y: 290
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1872
- hash: "eb1939458851780b7bb51ee50f0a3bd7"
+ hash: "d84bf962449716cc64cb34b285926c48"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 286; y: 292
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 315; y: 292
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1888
- hash: "41c8d2686ddb882981a7d3a5c8c69005"
+ hash: "d84bf962449716cc64cb34b285926c48"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 346; y: 294
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 385; y: 294
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1904
- hash: "7d3b1fc34082a160cbea4409af85fc9c"
+ hash: "d84bf962449716cc64cb34b285926c48"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 420; y: 294
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 420; y: 294
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1920
- image: "qtbug10586.1.png"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1936
- hash: "17be4a9c3d4d19e93bf1fc3a13a374a2"
+ image: "qtbug10586.2.png"
}
Frame {
msec: 1952
- hash: "d449593024a59487eb92195ee6b77a64"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1968
- hash: "c6ccbc2acec8e32f043f2cfb7b7848a9"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 1984
- hash: "cef9f8e8cdd5e2d33b86a9a6fb64ecb4"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2000
- hash: "2a8956de5ce417431bdb156144985370"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2016
- hash: "73721425a9c658bd9d40eac3fcbe8e25"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2032
- hash: "9a9cf8eee0bf2f09944a4fb3b1c139d5"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2048
- hash: "3673cdee04343ce679ec2cebadc9f512"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2064
- hash: "eedd62019867e3189f9cf6e2b4149c6d"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2080
- hash: "7a66bc37f5cf917e8b121003af0530b0"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2096
- hash: "401667ed0f38858553de27164e9cadb5"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2112
- hash: "b391699437c4092de3ad1684a35bfd30"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2128
- hash: "109c91215f075292910095a25eaded49"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2144
- hash: "c44d3f6ce1fa1ab324dd9ef394f37f87"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2160
- hash: "299d43cb3dcf7b95af8803df3eb17a46"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2176
- hash: "7ddd97266383d954a008fbe7b95a3169"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2192
- hash: "941f2837ff5145a26df9a0d9f6d20bd9"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2208
- hash: "d99d76cba43f3ae953605d7732d6ce21"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2224
- hash: "929f49416f7ca80d7f5f2be3b13b849e"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2240
- hash: "929f49416f7ca80d7f5f2be3b13b849e"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2256
- hash: "fff9bbf16d1c3f7510ddfc44af616a5e"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2272
- hash: "70b6cdb95ad6723d18c623e1dc79a8db"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2288
- hash: "70b6cdb95ad6723d18c623e1dc79a8db"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2304
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2320
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2336
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2352
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2368
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2384
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2400
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2416
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2432
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2448
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2464
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2480
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2496
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d84bf962449716cc64cb34b285926c48"
}
Frame {
msec: 2512
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "4c6ff9097308cb3840ef39a081bdc94f"
}
Frame {
msec: 2528
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "93a2b229f21b76354a8cf94f150c69e2"
}
Frame {
msec: 2544
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "e65350b411affe4274499fd577ccf842"
}
Frame {
msec: 2560
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "499968d33068c7e08898a19cce691766"
}
Frame {
msec: 2576
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "fe884e410a8c7b2167f814ebdf7700af"
}
Frame {
msec: 2592
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "c0225009d42b670f5f1ce0871be90db6"
}
Frame {
msec: 2608
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "320d205e147fa6470d71538d686ff458"
}
Frame {
msec: 2624
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "ec0a1fa273e6568d041ee2497a715704"
}
Frame {
msec: 2640
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "159c558e0d1b59db8e9459c4203d56f3"
}
Frame {
msec: 2656
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "00d237cd7ad6df807b4f9281bbc72992"
}
Frame {
msec: 2672
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "c472991635460a93f744538328cd89f4"
}
Frame {
msec: 2688
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "318ba06f590d4e3a1dea6affcc60243b"
}
Frame {
msec: 2704
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "d344b62df42e88e14d45def62565791a"
}
Frame {
msec: 2720
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "5c2658568080a663440e09acbcf2fa8d"
}
Frame {
msec: 2736
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 29; y: 239
- modifiers: 0
- sendToViewport: true
+ hash: "8e64867dabeaeae51149362c5f42545b"
}
Frame {
msec: 2752
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "abd81e11370469803bad5de9a9c77f63"
}
Frame {
msec: 2768
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "1cce356ebd61d7c88edb84c58a564def"
}
Frame {
msec: 2784
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "0ab027423651612ceba2b35e57d75d91"
}
Frame {
msec: 2800
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
+ hash: "515b6375cf0fefc8580d62cd5b2680f7"
}
Frame {
msec: 2816
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 35; y: 241
- modifiers: 0
- sendToViewport: true
+ hash: "f44c12b701e73a7e4d35fd10ea0f5003"
}
Frame {
msec: 2832
- hash: "cdb3c12b1b0b6ab269ba7fcf75320f69"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 63; y: 243
- modifiers: 0
- sendToViewport: true
+ hash: "76bee658c9915fda03967fcb2e595683"
}
Frame {
msec: 2848
- hash: "2732b282b8ac482033694cd04c6f5b7e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 106; y: 244
- modifiers: 0
- sendToViewport: true
+ hash: "064d5525e1fa7c8ec5f571a56e666754"
}
Frame {
msec: 2864
- hash: "7d253797885f8b304d8fb3ba727a3c5d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 158; y: 243
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 158; y: 243
- modifiers: 0
- sendToViewport: true
+ hash: "ffd23fa2b1281cd120d6b11912bb8641"
}
Frame {
msec: 2880
- image: "qtbug10586.2.png"
+ hash: "7454984bc5316de021b87d04daf0e8bb"
}
Frame {
msec: 2896
- hash: "d85a416e4ddf59dfd0723b0be0e2b418"
+ image: "qtbug10586.3.png"
}
Frame {
msec: 2912
- hash: "f1934f6ca6a3c5ac5df3451596b8d8ba"
+ hash: "1fcf6b150607c0ea807026f8f9e28f61"
}
Frame {
msec: 2928
- hash: "28fc74a76f9eaeeccbd3063dc55a1000"
+ hash: "e16a333231b3c65c85ff498e941f8c05"
}
Frame {
msec: 2944
- hash: "eb8ad8dae734b624664fcf584cda6ba0"
+ hash: "3e49589f1b4a6b8212f5c10d234f8ffa"
}
Frame {
msec: 2960
- hash: "a6d0f4aba3e5ae1e003520f45b75d6dd"
+ hash: "02ce2b719ddbd977bb933882a40024f5"
}
Frame {
msec: 2976
- hash: "4e5a4d04dfa5f06292774e6bf4f86508"
+ hash: "a161119d1f022885db1af71ededa2b8c"
}
Frame {
msec: 2992
- hash: "fc9e16fd8c7379d774a09fe50d4259dc"
+ hash: "62a006aab9629dc1e8359c52664ee34b"
}
Frame {
msec: 3008
- hash: "721ea322d9a5e9d48117336476f568cb"
+ hash: "62a006aab9629dc1e8359c52664ee34b"
}
Frame {
msec: 3024
- hash: "5930448341bce1c50de7acaba1f64ca1"
+ hash: "b98a2c58933bd4f49ed7a1d72bff7e66"
}
Frame {
msec: 3040
- hash: "7194bacd56906f83948844224ce6a3e7"
+ hash: "b98a2c58933bd4f49ed7a1d72bff7e66"
}
Frame {
msec: 3056
- hash: "fcf11cf70b8ac210d4bb2bc716942053"
+ hash: "b98a2c58933bd4f49ed7a1d72bff7e66"
}
Frame {
msec: 3072
- hash: "767d707db4dbb02b6f97153b3822a1d1"
+ hash: "b98a2c58933bd4f49ed7a1d72bff7e66"
}
Frame {
msec: 3088
- hash: "f8eb75b97f5233aa82b887aab34a38e3"
+ hash: "b98a2c58933bd4f49ed7a1d72bff7e66"
}
Frame {
msec: 3104
- hash: "1d3beb06b39fa1d5cabd31ec4297f59f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3120
- hash: "cadc775e0764afa7b50c5bab782035dd"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3136
- hash: "385f5a6e80da0d3ddf24539a64f26eb9"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3152
- hash: "34204871a684ea251c9d07fb125436da"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3168
- hash: "bc3e496535e66ff0d1e800092b7c78ca"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3184
- hash: "d6c4ff5bf223361be42c78d6d81248c3"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3200
- hash: "cb09d41612df66a8d099153026adcbf3"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3216
- hash: "f82180b8c0389ddc3623107a049c3366"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3232
- hash: "1b0f65e4599c65b8a603abd8da718d48"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3248
- hash: "897391a8206178356858139b3d1a4ce8"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3264
- hash: "b66d268dc7a42a7b1172b1ff566f4eb8"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3280
- hash: "0fe5d38a253dbd1ebcc67cca7ea86dc7"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3296
- hash: "b788f8a7e1e42f768fd1fe1198ca0344"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3312
- hash: "4f7f8b7f5bb78bb9327b6fa8142ce3a2"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3328
- hash: "30f041278c08174671568a0dfb7cbdf7"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3344
- hash: "6ecd90fc89ab9b6c4813fa6a6e9dffdb"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3360
- hash: "6ecd90fc89ab9b6c4813fa6a6e9dffdb"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3376
- hash: "6d79d9d0ba8da0b5654b39768b25591f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3392
- hash: "6d79d9d0ba8da0b5654b39768b25591f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3408
- hash: "6d79d9d0ba8da0b5654b39768b25591f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3424
- hash: "6d79d9d0ba8da0b5654b39768b25591f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3440
- hash: "6d79d9d0ba8da0b5654b39768b25591f"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3456
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3472
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3488
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3504
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3520
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3536
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3552
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3568
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3584
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3600
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3616
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3632
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3648
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
Frame {
msec: 3664
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3680
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3696
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3712
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3728
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3744
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3760
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3776
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3792
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3808
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3824
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3840
- image: "qtbug10586.3.png"
- }
- Frame {
- msec: 3856
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3872
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3888
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3904
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3920
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3936
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3952
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3968
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 3984
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4000
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4016
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4032
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4048
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4064
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 67108864
- text: ""
- autorep: false
- count: 1
- }
- Frame {
- msec: 4080
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4096
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4112
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4128
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4144
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4160
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4176
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
- }
- Frame {
- msec: 4192
- hash: "cba9afe3f351e6cd6dc72d7f263401b0"
+ hash: "0755ae54acb6af587bbf7ca509146e0f"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml b/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml
index 9ccebfa..65caedd 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml
@@ -1,5 +1,6 @@
import QtQuick 1.0
+/* This test checks that animations do occur while the flickable is flicking */
Rectangle {
width: 200
height: 400
@@ -11,11 +12,6 @@ Rectangle {
border.color: "black"
border.width: 10
width: 1000; height: 1000
- rotation: 90
- gradient: Gradient {
- GradientStop { position: 0; color: "black" }
- GradientStop { position: 1; color: "white" }
- }
}
}
Rectangle {
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.0.png b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.0.png
index 16adc51..29f7c75 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.1.png b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.1.png
new file mode 100644
index 0000000..d9a9959
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.qml b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.qml
index 0cc98ce..179dbc9 100644
--- a/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.qml
+++ b/tests/auto/declarative/qmlvisual/animation/qtbug13398/data/qtbug13398.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "2452007928bf86b9c42e666c7a7afc89"
+ image: "qtbug13398.0.png"
}
Frame {
msec: 32
@@ -266,11 +266,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "qtbug13398.0.png"
+ hash: "e09a359578935b988ac1cc8c40b25547"
}
Frame {
msec: 976
- hash: "e09a359578935b988ac1cc8c40b25547"
+ image: "qtbug13398.1.png"
}
Frame {
msec: 992
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.png
index 454f6c1..f08e048 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.png
index 9dde537..f08e048 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.png
index 454f6c1..9fb2be5 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.png
index 454f6c1..d229e87 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.png
index 043b487..f08e048 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.png
index 79c791d..7d1d2cd 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.png
index 454f6c1..b537ace 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.png
index 454f6c1..f08e048 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.png
index a7d6674..d229e87 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.png
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.9.png b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.9.png
new file mode 100644
index 0000000..432f814
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml
index b4ee569..5146be2 100644
--- a/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml
+++ b/tests/auto/declarative/qmlvisual/animation/reanchor/data/reanchor.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "213811853dbefdc418099721e3bf8651"
+ image: "reanchor.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "reanchor.0.png"
+ hash: "213811853dbefdc418099721e3bf8651"
}
Frame {
msec: 976
- hash: "213811853dbefdc418099721e3bf8651"
+ image: "reanchor.1.png"
}
Frame {
msec: 992
@@ -498,11 +498,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "reanchor.1.png"
+ hash: "ad3837dcf3e69274ac2918d796974f29"
}
Frame {
msec: 1936
- hash: "ad3837dcf3e69274ac2918d796974f29"
+ image: "reanchor.2.png"
}
Frame {
msec: 1952
@@ -770,11 +770,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "reanchor.2.png"
+ hash: "213811853dbefdc418099721e3bf8651"
}
Frame {
msec: 2896
- hash: "eb3eeb37ab7b26692cbf100adfaf3772"
+ image: "reanchor.3.png"
}
Frame {
msec: 2912
@@ -1026,11 +1026,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "reanchor.3.png"
+ hash: "213811853dbefdc418099721e3bf8651"
}
Frame {
msec: 3856
- hash: "213811853dbefdc418099721e3bf8651"
+ image: "reanchor.4.png"
}
Frame {
msec: 3872
@@ -1282,11 +1282,11 @@ VisualTest {
}
Frame {
msec: 4800
- image: "reanchor.4.png"
+ hash: "df51ffd71a82742af7c06f8a786f6bf2"
}
Frame {
msec: 4816
- hash: "c4559982aa3f3d291364deed4bd96d65"
+ image: "reanchor.5.png"
}
Frame {
msec: 4832
@@ -1522,11 +1522,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "reanchor.5.png"
+ hash: "1137e22c68e043950811dee295e19b04"
}
Frame {
msec: 5776
- hash: "1137e22c68e043950811dee295e19b04"
+ image: "reanchor.6.png"
}
Frame {
msec: 5792
@@ -1778,11 +1778,11 @@ VisualTest {
}
Frame {
msec: 6720
- image: "reanchor.6.png"
+ hash: "213811853dbefdc418099721e3bf8651"
}
Frame {
msec: 6736
- hash: "213811853dbefdc418099721e3bf8651"
+ image: "reanchor.7.png"
}
Frame {
msec: 6752
@@ -2034,11 +2034,11 @@ VisualTest {
}
Frame {
msec: 7680
- image: "reanchor.7.png"
+ hash: "213811853dbefdc418099721e3bf8651"
}
Frame {
msec: 7696
- hash: "eb3eeb37ab7b26692cbf100adfaf3772"
+ image: "reanchor.8.png"
}
Frame {
msec: 7712
@@ -2290,11 +2290,11 @@ VisualTest {
}
Frame {
msec: 8640
- image: "reanchor.8.png"
+ hash: "b36a09269dfc9173ff8583a62ae87e8a"
}
Frame {
msec: 8656
- hash: "6ed9b6118a0dc81c22af9fee108b7432"
+ image: "reanchor.9.png"
}
Frame {
msec: 8672
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png
new file mode 100644
index 0000000..5bf32dd
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png
new file mode 100644
index 0000000..e7571f2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.2.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.2.png
new file mode 100644
index 0000000..60d09e9
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml
index d1de5d0..f93458d 100644
--- a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml
@@ -6,530 +6,510 @@ VisualTest {
}
Frame {
msec: 16
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ image: "scriptAction-visual.0.png"
}
Frame {
msec: 32
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 48
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 64
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 80
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 96
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 112
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 128
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 144
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 160
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 176
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 192
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 208
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 224
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 240
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 256
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 272
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 288
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 304
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 320
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 336
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 352
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 368
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 384
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 400
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 416
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 432
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 448
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 54; y: 52
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 464
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c5d2b291578c11c11452c29dc02bcad9"
}
Frame {
msec: 480
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "650770d62a63031754b3c68f666a5805"
}
Frame {
msec: 496
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "eb28945becabee0dffe618632d4db061"
}
Frame {
msec: 512
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "6c7b66dff531723362418dacd23ea59e"
}
Frame {
msec: 528
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "093bd3dd02a6d9f4dbd75a329bbf63f5"
}
Frame {
msec: 544
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "5328b1f3932c8bf817a5031102e21c25"
}
Frame {
msec: 560
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "ee2b8dc4ebdaaed41ae820385f56db83"
}
Frame {
msec: 576
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "adf71c703dff4514d6ae247fd6b89030"
}
Frame {
msec: 592
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c93d78e604406a3c61c2b34e5e0893a4"
}
Frame {
msec: 608
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "c91dbb897289d2949d08c6381583ad5e"
}
Frame {
msec: 624
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1e3a370e3d390e8d73731d659fae5908"
}
Frame {
msec: 640
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "e6d3505120260677f5f1355abf0f2b1d"
}
Frame {
msec: 656
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "251d68b91b37ef95ff61055f7b2ba0b5"
}
Frame {
msec: 672
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "333a25691bafa88fbc92a153886c3b47"
}
Frame {
msec: 688
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "e63367e5001732975bc4c002c079dbd8"
}
Frame {
msec: 704
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "04e25f2fd913c38ee24558b52fb3ed37"
}
Frame {
msec: 720
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "739f155ad3d703fa0255afed51baf51c"
}
Frame {
msec: 736
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "739f155ad3d703fa0255afed51baf51c"
}
Frame {
msec: 752
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "16de427e26afa1a1d91541fca1537033"
}
Frame {
msec: 768
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "11a874ab1c429e1bcf5498808f3c42f7"
}
Frame {
msec: 784
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "e97f33a71bf889815782c17067bcd736"
}
Frame {
msec: 800
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "9f2f0728689a5ff76f87b13c92e9fd40"
}
Frame {
msec: 816
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "9186cd14c3d9f2ad560be047cc483b50"
}
Frame {
msec: 832
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "af2eb37824ad3567ce9db0329f647d50"
}
Frame {
msec: 848
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "f09d264ed5f44313c19f2f985a26b9cd"
}
Frame {
msec: 864
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "3ed8b3051d0d603bd514783fe04124a7"
}
Frame {
msec: 880
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "38c7f8d39fd9a77400138da4e3ebb963"
}
Frame {
msec: 896
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "6682f53fdda2d8662a31b725d23b08f6"
}
Frame {
msec: 912
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "0f16d2640b51c9ada08c7aa0e8853d86"
}
Frame {
msec: 928
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "22b9025d523dd1adb87f9b4c89295b29"
}
Frame {
msec: 944
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 960
- image: "scriptAction.0.png"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 976
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ image: "scriptAction-visual.1.png"
}
Frame {
msec: 992
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1008
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1024
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1040
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1056
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1072
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1088
- hash: "55b713dcb7c810bf126e06cc97d26d24"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 146; y: 259
- modifiers: 0
- sendToViewport: true
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1104
- hash: "55b713dcb7c810bf126e06cc97d26d24"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1120
- hash: "9850cd8ed4643900409d1a87ef0bc4cf"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1136
- hash: "1cf03396b01e931e4e7e8e7e57e19c5f"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1152
- hash: "25fe648b85ec2d82621853dcbdbf695a"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1168
- hash: "1ca701e56fe387d5849f6933eb53aee9"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1184
- hash: "b39ecb792659a053a8985e2a849d6d51"
+ hash: "1761f6606bbdf5772594cf96412337ca"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 54; y: 52
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1200
- hash: "9a783432a054beec81cc5687f75a36dc"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1216
- hash: "edbd222d7ba6c6f819ded45fe316d461"
+ hash: "1761f6606bbdf5772594cf96412337ca"
}
Frame {
msec: 1232
- hash: "eaf20159c4b90f90872bbd514d3a0cec"
+ hash: "77ab7b0bad67c80c5f685b02e264d333"
}
Frame {
msec: 1248
- hash: "964807dd9b91e765577a773ef1ce2593"
+ hash: "27c3099b0e9f0607e9ebc983b2613eb9"
}
Frame {
msec: 1264
- hash: "16e12026ab14657b0f36b8315684455d"
+ hash: "81bd467b2314fb877825323a6120de4a"
}
Frame {
msec: 1280
- hash: "d001a6b2fec3c66baaa45d9ff93b3f63"
+ hash: "5cd632ac5399826249137ff2f27ef734"
}
Frame {
msec: 1296
- hash: "fef11eb5f635bc11cd9679b7213b3b92"
+ hash: "3b6732d7539d7b9b6ac13b6f8291b993"
}
Frame {
msec: 1312
- hash: "0a0cd5f5004048d88712cfe6943470c0"
+ hash: "6bde822175f1ee22a8bb0528d6170a5a"
}
Frame {
msec: 1328
- hash: "0d83178afdae5feaa9915d56c24373ad"
+ hash: "a8401f0c19db5c395cf122f3fe6f3be2"
}
Frame {
msec: 1344
- hash: "0a9e6e0b7b23ce93dc4e1f886cf9c7d1"
+ hash: "10e5126a9f97caf19df3d0ec4485222f"
}
Frame {
msec: 1360
- hash: "f3199d0c860f1236e0b9472bef8785bc"
+ hash: "f7b0bde6f4c9e9c9aecdbf11f0ec525c"
}
Frame {
msec: 1376
- hash: "f3199d0c860f1236e0b9472bef8785bc"
+ hash: "7501da757e6b0ba3923635765ef63f5b"
}
Frame {
msec: 1392
- hash: "32ccdab249268b01d9f1658a736052f1"
+ hash: "c66f5f30f7a545fcf0b52debd68d96c1"
}
Frame {
msec: 1408
- hash: "dc98f32a1a2d6e74998123b5232107b0"
+ hash: "ea679c31fd51733076716a325d2d4dc1"
}
Frame {
msec: 1424
- hash: "db3010ef552146df938c237f6c92bff5"
+ hash: "01ffc159e0d0796e4de7cffd46685481"
}
Frame {
msec: 1440
- hash: "101e8595d0301e88376ec52ba9361f84"
+ hash: "c53b75720a772a43a6c7d046ffb4d39b"
}
Frame {
msec: 1456
- hash: "119d548c59baa7e47266d2ceca663288"
+ hash: "1338c0458f32869e35163a2dcb950b8e"
}
Frame {
msec: 1472
- hash: "f141fafe102a0b9a2bf33e8c3fc800ff"
+ hash: "1338c0458f32869e35163a2dcb950b8e"
}
Frame {
msec: 1488
- hash: "b01f9ca8d4fbff17b3d48c70898a044d"
+ hash: "d894739536bb7033d321f8862264b5e6"
}
Frame {
msec: 1504
- hash: "cf67954a2d1b22e8d2cfdc26419bafb8"
+ hash: "52d5556f4b2404ae896ae36e0bc866ed"
}
Frame {
msec: 1520
- hash: "7680b2b5a63dea13d733947297e01355"
+ hash: "5ff9d9ab8099b2b9469df9efe672f46d"
}
Frame {
msec: 1536
- hash: "af1c017acf6b3c8cff86c9ceb60db3cb"
+ hash: "acadb950bd78c6fade9161f8e53628e7"
}
Frame {
msec: 1552
- hash: "0b23ec51f71fddae5e2238ab5754f1db"
+ hash: "7583b99a5f3aede70fc10728d77f57cc"
}
Frame {
msec: 1568
- hash: "976643961ecbdc86335180ba812b874e"
+ hash: "f72881eb92792727985482996bf689f9"
}
Frame {
msec: 1584
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "26e0d64d5afeecdc4d93492f1eaaa54f"
}
Frame {
msec: 1600
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "93206a830cf787d00a6bb2d3c91d40bc"
}
Frame {
msec: 1616
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "af0a99b072a754cd0ecb75a7198849c1"
}
Frame {
msec: 1632
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "84adc92e299feeb494b108a009d1b662"
}
Frame {
msec: 1648
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "4fac6d471517625d4f5ce6ed6aaebe0b"
}
Frame {
msec: 1664
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6952c27025740aca006a13da87379f9f"
}
Frame {
msec: 1680
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "3297ed7bffb48a4f2ca90dd81eaf7c7a"
}
Frame {
msec: 1696
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "3297ed7bffb48a4f2ca90dd81eaf7c7a"
}
Frame {
msec: 1712
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1728
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1744
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1760
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1776
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1792
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1808
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1824
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1840
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1856
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1872
- hash: "aeed60899abb6c486a5b1df81f9a0224"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 67108864
- text: ""
- autorep: false
- count: 1
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1888
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1904
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1920
- image: "scriptAction.1.png"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
Frame {
msec: 1936
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ image: "scriptAction-visual.2.png"
}
Frame {
msec: 1952
- hash: "aeed60899abb6c486a5b1df81f9a0224"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
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"
+ hash: "6741d853f099a5a98fcdf87053b69ec8"
}
}
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png
deleted file mode 100644
index 64d6b06..0000000
--- a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png
deleted file mode 100644
index 1a25c63..0000000
--- a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml
index 1427c9d..0a14542 100644
--- a/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml
@@ -6,10 +6,10 @@ then immediately change blue, and then animate moving 50 pixels down.
*/
Rectangle {
- width: 400; height: 400
+ width: 100; height: 100
Rectangle {
id: myRect
- width: 100; height: 100
+ width: 50; height: 50
color: "red"
}
MouseArea {
diff --git a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
index 02fa5c9..52fd55c 100644
--- a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
+++ b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/fillmode/face.png b/tests/auto/declarative/qmlvisual/fillmode/face.png
index 9623b1a..e087316 100644
--- a/tests/auto/declarative/qmlvisual/fillmode/face.png
+++ b/tests/auto/declarative/qmlvisual/fillmode/face.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/fillmode/fillmode.qml b/tests/auto/declarative/qmlvisual/fillmode/fillmode.qml
index 2ac98da..b2ecfee 100644
--- a/tests/auto/declarative/qmlvisual/fillmode/fillmode.qml
+++ b/tests/auto/declarative/qmlvisual/fillmode/fillmode.qml
@@ -6,16 +6,16 @@ import QtQuick 1.0
*/
Rectangle {
- id: screen; width: 750; height: 600; color: "gray"
+ id: screen; width: 360; height: 200; 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 }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.Stretch }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.PreserveAspectFit; smooth: true }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.PreserveAspectCrop }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.Tile; smooth: true }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.TileHorizontally }
+ Image { width: 120; height: 100; source: screen.source; fillMode: Image.TileVertically }
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png
deleted file mode 100644
index 0f33d99..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png
deleted file mode 100644
index 0f33d99..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png
deleted file mode 100644
index 06a3dbd..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png
deleted file mode 100644
index e0d02d6..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png
deleted file mode 100644
index e0d02d6..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png
deleted file mode 100644
index e0d02d6..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml
deleted file mode 100644
index ee9a550..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml
+++ /dev/null
@@ -1,1599 +0,0 @@
-import Qt.VisualTest 4.7
-
-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/qmlvisual/focusscope/data-MAC/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png
deleted file mode 100644
index fa711c1..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png
deleted file mode 100644
index fa711c1..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml
deleted file mode 100644
index 5d84bfe..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml
+++ /dev/null
@@ -1,607 +0,0 @@
-import Qt.VisualTest 4.7
-
-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/qmlvisual/focusscope/data-MAC/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png
index 9309e37..e469a79 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png
index 20e6c8e..905603f 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png
index c7559ac..5cbd3bd 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png
index bf2844b..851c1ba 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png
deleted file mode 100644
index beef0bf..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png
deleted file mode 100644
index 1847dc7..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png
deleted file mode 100644
index c7559ac..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png
deleted file mode 100644
index 20e6c8e..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png
deleted file mode 100644
index 9309e37..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png
deleted file mode 100644
index 7ac879b..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml
index cd73a3c..0c9747e 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml
@@ -6,255 +6,287 @@ VisualTest {
}
Frame {
msec: 16
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 32
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 48
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 64
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 80
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 96
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 112
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 128
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 144
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 160
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 176
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 192
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 208
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 224
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 240
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 256
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 272
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 288
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 304
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 320
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 336
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 352
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 368
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 384
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 400
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 416
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 432
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 448
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 464
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 480
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 496
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 512
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 528
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 544
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "be06cc567f08fbc0cd60d753a19df162"
}
Frame {
msec: 560
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "c4cf6807b423553872e848146e79efb3"
}
Frame {
msec: 576
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "b83923f1eef68a4a8dd36acad0f4b592"
}
Frame {
msec: 592
- hash: "d38da3f61cd2944eec8bdfbef70c928f"
+ hash: "5599829a04f2c2a6c6181c5857762ba0"
+ }
+ Frame {
+ msec: 608
+ hash: "95da52b5add95150dd446bc5055a2b60"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 608
- hash: "ce962a38caeb7bf7eef05112fbb52f91"
- }
- Frame {
msec: 624
- hash: "779f0660ce5bc2c2fc9f05d8b86158a8"
+ hash: "9bb2757c3b1bbc051edd9ebd240611f8"
}
Frame {
msec: 640
- hash: "615e07a3c83539321befb44aa8fac811"
+ hash: "25213fbced4c67f42ce35d07db93bb32"
}
Frame {
msec: 656
- hash: "8a00b9f66ca7fdb0e4975f547025f873"
+ hash: "2a9ded25ed2dbb9563f9c14084234a22"
}
Frame {
msec: 672
- hash: "43bbe82799b1d8453f89a7ef928b1e54"
+ hash: "2f532511a50d743aa1c7ebcc9b2b7350"
}
Frame {
msec: 688
- hash: "2cc468d6e14c27ff1c0bd6064ae47509"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "2f532511a50d743aa1c7ebcc9b2b7350"
}
Frame {
msec: 704
- hash: "1dc9d1b95016ccbeaca5b7a867a5cc3a"
+ hash: "2f532511a50d743aa1c7ebcc9b2b7350"
}
Frame {
msec: 720
- hash: "f36734c91fe41a7947965dac97393ad4"
+ hash: "2f532511a50d743aa1c7ebcc9b2b7350"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 736
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "8c9f7d72e077a7e75d185a2ecbdcc77c"
}
Frame {
msec: 752
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "55a417e91f182ebd28dd7264d8b76363"
}
Frame {
msec: 768
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "01a637de9f60c82bfd9140e852e17574"
}
Frame {
msec: 784
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "01194b2c3489ea7298e961979064aab3"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 800
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "f6126328d483536d3f161f71d40821df"
}
Frame {
msec: 816
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "b99dd9793a63bbdab37cfe236d56c589"
}
Frame {
msec: 832
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "825f39b42d0b2e0d894874713b731cfc"
}
Frame {
msec: 848
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "7729b9c2133c52e50f43d6100a24e9c2"
}
Frame {
msec: 864
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "e2f3bec9571b08b451309221b34ace5e"
}
Frame {
msec: 880
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "e2f3bec9571b08b451309221b34ace5e"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 896
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "8e59b002437ec17043d11c92556365fd"
}
Frame {
msec: 912
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "3809a54af9c9a4b15aa8b82caa5b703f"
}
Frame {
msec: 928
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "96cb1ab7123c54d4fa0d93b6501a439d"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 944
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "de74cd5be709954522dd02945d6da9c9"
}
Frame {
msec: 960
@@ -262,271 +294,311 @@ VisualTest {
}
Frame {
msec: 976
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "d3ff94471da3620701d62b87f37fca8b"
}
Frame {
msec: 992
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "15bccb078b9061ef50c73a974e2f43fa"
}
Frame {
msec: 1008
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "ea2059d511fdab60e77e9261f81aadfb"
}
Frame {
msec: 1024
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "ea2059d511fdab60e77e9261f81aadfb"
}
Frame {
msec: 1040
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "ea2059d511fdab60e77e9261f81aadfb"
}
Frame {
msec: 1056
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "ea2059d511fdab60e77e9261f81aadfb"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1072
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "5b68568968d0de3a9bad8d053045f45c"
}
Frame {
msec: 1088
- hash: "57e009de047c348d3ae14a6271b2e6f2"
+ hash: "6b6da385fbc00e3542d7007524ff87f6"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1104
- hash: "1c29b3d1086b261c2a9e94d49567484f"
+ hash: "bba5021ad78a5a142cf54d4db8d8689e"
}
Frame {
msec: 1120
- hash: "6ab17a210b45dae1ed99fd1689bb3e46"
+ hash: "5c223d5dcf028cd3bac18b21359253f3"
}
Frame {
msec: 1136
- hash: "feb504605f7f27ca3a2bf080c1fb1e19"
+ hash: "c5b09a11d466fd90e1014f58755ec77b"
}
Frame {
msec: 1152
- hash: "bec2d2e2222587a379af12a30e078886"
+ hash: "f4ba8fcc4f955e25c2364d8ee1054d0d"
}
Frame {
msec: 1168
- hash: "39cb2bdc44273023b557a0f56df61d85"
+ hash: "2a6009e790cd98e3a67c107b0f08e00b"
}
Frame {
msec: 1184
- hash: "2cda045b452c4645be1cdb4efd238532"
+ hash: "caa1b5ee40dc20c87516b7292a86f79b"
}
Frame {
msec: 1200
- hash: "1f3efbfadd22734b5fd656596c11885b"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Frame {
msec: 1216
- hash: "7277c05a06e481a5af13e4fe39e322f8"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Key {
- type: 7
+ type: 6
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1232
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "2333dcdf0f46ade554e036caa5e3cb31"
}
Frame {
msec: 1248
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "9b09c65db96f483dec7ba3a55b5a91e6"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1264
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "49fc76245e741968095ab689195da40c"
}
Frame {
msec: 1280
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "4e991b92348d813f5a3a1080270a88a3"
}
Frame {
msec: 1296
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "1e4a07fc966dab9ee0d39b25a4c43c09"
}
Frame {
msec: 1312
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "ade33b908f2a5e6916a74bc00b08414e"
}
Frame {
msec: 1328
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "481b41b7bc8fafcb40b7d09fcfc2e86e"
}
Frame {
msec: 1344
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1360
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1376
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1392
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1408
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1424
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1440
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1456
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1472
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 1488
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1504
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "2a8a2867f38ff05a9ef5fa50fe7de229"
}
Frame {
msec: 1520
- hash: "bdf37518633a43d8dc47245f5b68550b"
+ hash: "824ec4f9e596a67fe6ca17ea03529c1f"
+ }
+ Frame {
+ msec: 1536
+ hash: "bf7d9c49d0a0ff4d03ceadf8d797a774"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 1536
- hash: "c5f88e95ead1f4542b766577d80e70fd"
- }
- Frame {
msec: 1552
- hash: "d38118f26b9c2b68dc8fdb8d2a959134"
+ hash: "3e3c62601c2965e851e8b5c0adb73651"
}
Frame {
msec: 1568
- hash: "44c483c899220f040aa7808f15fac429"
+ hash: "ed7357b2596da4683bb19cbf1dcd6458"
}
Frame {
msec: 1584
- hash: "02a63967944c8c53a9741318e99a326e"
+ hash: "32ed0774f926341af504b716bd9394e1"
}
Frame {
msec: 1600
- hash: "7fc10e91212af979e09c8d3b98625c1b"
+ hash: "2d4ffbd7cf53ca4824d206d4a4608ebb"
}
Frame {
msec: 1616
- hash: "d14b69d18adc548dfb68dae1559effdb"
+ hash: "a7a0b6bd336f00a10818bdd9992a29bb"
}
Frame {
msec: 1632
- hash: "cb9bce7fa14a367197fa34ad3acc4cdd"
+ hash: "55801794958126a1890bc0122084ee20"
}
Frame {
msec: 1648
- hash: "105a0e3d36296eba16077c4cf93547ae"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "55801794958126a1890bc0122084ee20"
}
Frame {
msec: 1664
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "55801794958126a1890bc0122084ee20"
}
Frame {
msec: 1680
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "55801794958126a1890bc0122084ee20"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1696
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "49573efd5a0bc65107a074fb35d67f63"
}
Frame {
msec: 1712
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "c9bf07bc12f97c6d0eef816ce4423f5b"
}
Frame {
msec: 1728
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "ab91f24c27d52123502815381e926cdc"
}
Frame {
msec: 1744
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "32ca7e06569a63d56ab71c67c9f82d60"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1760
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "9e5f04f019ccd1f27b511faeb7470e10"
}
Frame {
msec: 1776
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "5544186a3338dd788367fa4262815204"
}
Frame {
msec: 1792
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "c01aa7b7363faf99f69b90be8843f059"
}
Frame {
msec: 1808
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "6bd1ec848b817ef978b4dfae4eb23c1e"
}
Frame {
msec: 1824
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
}
Frame {
msec: 1840
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
}
Frame {
msec: 1856
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
}
Frame {
msec: 1872
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1888
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "04a3efd4b810417632726048bdffa904"
}
Frame {
msec: 1904
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "c347e7d3dccba41102e2b669c9e9c0a0"
}
Frame {
msec: 1920
@@ -534,271 +606,295 @@ VisualTest {
}
Frame {
msec: 1936
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "47c9794374c383e1f595e60ea6890e11"
}
Frame {
msec: 1952
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "73cdfe34edab93baea779896169b4195"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1968
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "53add51d9e11a1fc4d0f6e3d1c6a70bc"
}
Frame {
msec: 1984
- hash: "8f443766efd0f74e96e79ed3c267892c"
+ hash: "90143346b171faf5bdb7d4d0c0556b24"
}
Frame {
msec: 2000
- hash: "8f443766efd0f74e96e79ed3c267892c"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "e4e642507d3a631f5813a11cb7673c91"
}
Frame {
msec: 2016
- hash: "6e4e4321cda32abab394419a9e6494dc"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2032
- hash: "45b79c56379afa7243547fedfa3260db"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2048
- hash: "4635555c632f325a151d340a3eb742b9"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2064
- hash: "0255da44fa95548427139073c994234c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2080
- hash: "eac0c428ea7b7aa55a469562d2cb3fd6"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2096
- hash: "06ab23a83a5900cfdde98d4563414511"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2112
- hash: "808e4a745c58872d52ec6a3e669aea5c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2128
- hash: "e6231b43f93fd6ae3e0990def1168c39"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2144
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2160
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2176
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2192
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2208
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2224
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2240
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2256
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2272
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2288
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2304
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2320
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2336
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2352
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2368
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2384
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2400
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2416
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2432
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2448
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
}
Frame {
msec: 2464
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "f5f1725edd19f1735139d178955533f8"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2480
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "512e992c6d621225735c37e2626714ad"
}
Frame {
msec: 2496
- hash: "e97f921f1c34246fc229c48a4b66466c"
+ hash: "1a708d62af48302e93dda0ef0822aebb"
}
Frame {
msec: 2512
- hash: "e97f921f1c34246fc229c48a4b66466c"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "220660969092ba1b17addc6ba7148e06"
}
Frame {
msec: 2528
- hash: "e1c32968e36cb95be250121187ddf13e"
+ hash: "9dcdd42efc9beb957abdeaf2ee01fc43"
}
Frame {
msec: 2544
- hash: "70498453babe3ab5e0fec62bcd0ff332"
+ hash: "5995ac01ee680d6747dc78c36f70b577"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2560
- hash: "76fc1b1e6b22771bf08dfdd16b3f24e9"
+ hash: "c6eb964d8f4bf849df63eebdfbf6e286"
}
Frame {
msec: 2576
- hash: "c6be4f26750b8bc1a5b71ff381e462c6"
+ hash: "cff1925a172e278a36068886f0efbcbf"
}
Frame {
msec: 2592
- hash: "986f738d0f0f70b88f951d9f028ef61b"
+ hash: "4c725a05332806387713ab54302c559f"
}
Frame {
msec: 2608
- hash: "2201ad4f92bcf24ab62d0ddb8b2a64c1"
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
+ }
+ Frame {
+ msec: 2624
+ hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b"
}
Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 2624
- hash: "27e9a18cb70c8f2ab9e4dd7af321e8e4"
- }
- Frame {
msec: 2640
- hash: "3a352127f49f8c589b7b7da1232caf6b"
+ hash: "0cb7eeb24a6845d43ce0662c91b72bd3"
}
Frame {
msec: 2656
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "6dedbf7dc59b05dc57355141de0b660d"
}
Frame {
msec: 2672
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "5f82259afdabef688dd76729b5f847c7"
}
Frame {
msec: 2688
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "b67d418427db34726ddada60f76178a6"
}
Frame {
msec: 2704
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "780c9551f55fd46d294a1eef3b34aa34"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2720
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "521efe1778b2d2031071b55f30999de9"
}
Frame {
msec: 2736
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "49539356de68b7cd2cea52986ed2bb67"
}
Frame {
msec: 2752
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "55801794958126a1890bc0122084ee20"
}
Frame {
msec: 2768
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "55801794958126a1890bc0122084ee20"
}
Frame {
msec: 2784
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "55801794958126a1890bc0122084ee20"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2800
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "b08ee15bfd1916b9619a0a3eeeec90b6"
}
Frame {
msec: 2816
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "3b4e65a0d4ee764d418d82a055ba9c87"
}
Frame {
msec: 2832
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "269d37497b0cd292a5b03124d1687ff6"
}
Frame {
msec: 2848
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "59fecd7ec62bf8c89e2222744d36e194"
}
Frame {
msec: 2864
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "71deceeac8b42a70868bb3ff788543b5"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2880
@@ -806,271 +902,319 @@ VisualTest {
}
Frame {
msec: 2896
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "ad790d242e84fec0bd75e1d7771682d7"
}
Frame {
msec: 2912
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "c09f4fca4ae14e0e41d9b58c1b83096f"
}
Frame {
msec: 2928
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
}
Frame {
msec: 2944
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "68b528414ba662f14ea71511a01f8d33"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2960
- hash: "e3b2de8a4e3229880971d2144e55de1b"
+ hash: "015bf8203d45e5d477242055a3f19bfb"
}
Frame {
msec: 2976
- hash: "e3b2de8a4e3229880971d2144e55de1b"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "ba2fb1258a2f3a81882780d3c7d5320a"
}
Frame {
msec: 2992
- hash: "20f96d3fbef9d51d8b8a28a6d58fabb2"
+ hash: "3637ffd219d403ed433fd72cd68a9b23"
}
Frame {
msec: 3008
- hash: "1e5d888fd4685960b8ae0a79e2287e89"
+ hash: "b0d858f1d51872969022f717c12480ed"
}
Frame {
msec: 3024
- hash: "2115c2e6689ce6669abf9f3741eb5df1"
+ hash: "0504b13a8f7cd68a1d64a22e46ea8654"
}
Frame {
msec: 3040
- hash: "c67949eb5f2210c6b2dad4ff352831ed"
+ hash: "d07cffa36609433e4a677e373ee7a3ff"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3056
- hash: "d982500bee0a6f6fb0861fb3c32319eb"
+ hash: "c1fd98ebc22e512f7199e0f319e88728"
}
Frame {
msec: 3072
- hash: "ffb111084712d5ecf072ade52103b985"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Frame {
msec: 3088
- hash: "e5d594c8f08b9d283a3998648a383332"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Frame {
msec: 3104
- hash: "20632ba6a4c14386eb01167059f7b617"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Frame {
msec: 3120
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
+ }
+ Frame {
+ msec: 3136
+ hash: "200dd4ac9c40c6eb32ad43570995f17d"
}
Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 3136
- hash: "bfd0497c6505d42aefe6341adb850d89"
- }
- Frame {
msec: 3152
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "5822b744b64944c515e8a01f52c7429f"
}
Frame {
msec: 3168
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "7d4ab5a17e7d6184f124299053cf94e3"
}
Frame {
msec: 3184
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "253cfd5001e4e4541d9cfd6370291cd2"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3200
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "1b1cab9d331c613dde896829027110f5"
}
Frame {
msec: 3216
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "8127f681a5c475133cfca95483fef2ce"
}
Frame {
msec: 3232
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "1a944877735fe3531d95b418dd75d576"
}
Frame {
msec: 3248
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "47ddcfaed130bf7dd539d965ebebedc1"
}
Frame {
msec: 3264
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "d0c37d1a7e97034d0f41ea6c2fff8f34"
}
Frame {
msec: 3280
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "ea2059d511fdab60e77e9261f81aadfb"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3296
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "11a907436350afa5ff592880303b4344"
}
Frame {
msec: 3312
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "39801aef92c2b1e0ca39bede36840911"
}
Frame {
msec: 3328
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "93463b61a00078f488f3941bc4729100"
}
Frame {
msec: 3344
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "f8d9cbe20b87017d81fbf627f3a3b2cd"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3360
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "2b8d37e7dcfb14394caf19aa8bc4b956"
}
Frame {
msec: 3376
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "bf91006930a3f22f12b62787c57bb91b"
}
Frame {
msec: 3392
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "7ce1d106e9d78a4a64f35f5982d32298"
}
Frame {
msec: 3408
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "e2f3bec9571b08b451309221b34ace5e"
}
Frame {
msec: 3424
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "e2f3bec9571b08b451309221b34ace5e"
}
Frame {
msec: 3440
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "e2f3bec9571b08b451309221b34ace5e"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3456
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "71cd749e039a54aaaa05e1d3ccc738b4"
}
Frame {
msec: 3472
- hash: "bfd0497c6505d42aefe6341adb850d89"
- }
- Frame {
- msec: 3488
- hash: "bfd0497c6505d42aefe6341adb850d89"
+ hash: "39e7afb00d53e098c005a1d96a8cc727"
}
Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
+ msec: 3488
+ hash: "a9d2fa99fc70919e55293c07427147a2"
+ }
+ Frame {
msec: 3504
- hash: "f60a72dd52f6f319706dc97f873a484f"
+ hash: "96bb62cd9ebc2eba9797605190820349"
}
Frame {
msec: 3520
- hash: "a21fbcbb3c0ede708f2862959b84654f"
+ hash: "111b0d230c44d5d156e082a50c2a2a66"
}
Frame {
msec: 3536
- hash: "40e5f7530391e7641498c7870ce986c9"
+ hash: "1085cebcc8fdaefb2ec03392763c7657"
}
Frame {
msec: 3552
- hash: "809daf15ad3e9f981f1306da18dd6872"
+ hash: "451d670f44ae42d8cbb6a12cc6469d61"
}
Frame {
msec: 3568
- hash: "4b053d234c8c9a5afb7800abe28ea96f"
+ hash: "5c65a7b6ed7b4e85bb883c671aae5136"
}
Frame {
msec: 3584
- hash: "e011e3aaf143befc8e207945fdfc9f47"
+ hash: "2f532511a50d743aa1c7ebcc9b2b7350"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3600
- hash: "55539d51f833b8a98fc14031a4a70c4c"
+ hash: "41424200cb76a0d5d64f8919645f6afb"
}
Frame {
msec: 3616
- hash: "07c2b526c022d0deae61acba26d7ea24"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "7a910e4b17fb7f5d10308e07ea8ce0a3"
}
Frame {
msec: 3632
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "4d9cc5670105acf3bc080cba8e100376"
}
Frame {
msec: 3648
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "a09d3b45bef532ed86d737839592ffc8"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3664
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "70179b7be24acd6d5d0d0de9d8fff74d"
}
Frame {
msec: 3680
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "95964eef01bfc86216a8e91261b867ed"
}
Frame {
msec: 3696
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "12b5e2bbfd573b2b8e33a745cd5af5a6"
}
Frame {
msec: 3712
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3728
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3744
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3760
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3776
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3792
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3808
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3824
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3840
@@ -1078,1802 +1222,106 @@ VisualTest {
}
Frame {
msec: 3856
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3872
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3888
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3904
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3920
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3936
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3952
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3968
- hash: "cc0ab553f98262662e52191e0b370486"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 3984
- hash: "cc0ab553f98262662e52191e0b370486"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4000
- hash: "7d2f24d5a68397bedc2f9e3652715126"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4016
- hash: "55ff9205bb36d8f8965fb122a8686203"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4032
- hash: "8968377cbbdf7a46b6f13690826ac711"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4048
- hash: "8ce9afffac571f1a2cc6986d79dd2c8f"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4064
- hash: "f75c375cdf8e1b83398e9b18e7c39852"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4080
- hash: "20c8db7fb344c056465175ed0fa9518a"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4096
- hash: "8135c2cae0dcf8ee6eccbfdd7b711bc0"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4112
- hash: "659fc24d328058eb118be5613ea25257"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4128
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4144
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4160
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4176
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4192
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4208
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4224
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
Frame {
msec: 4240
- hash: "ef9a34bf49c632be0f88f6658196dfe6"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
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"
+ hash: "cb8a5743fd3c5093740bb2a4f57ade81"
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png
deleted file mode 100644
index f68f7dc..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png
deleted file mode 100644
index f68f7dc..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png
deleted file mode 100644
index e26c028..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png
deleted file mode 100644
index 9c4b2f2..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png
deleted file mode 100644
index 9c4b2f2..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png
deleted file mode 100644
index 9c4b2f2..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml
deleted file mode 100644
index 8d36200..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml
+++ /dev/null
@@ -1,1599 +0,0 @@
-import Qt.VisualTest 4.7
-
-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/qmlvisual/focusscope/data-X11/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png
deleted file mode 100644
index 6be7aef..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png
deleted file mode 100644
index 6be7aef..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml
deleted file mode 100644
index 813665d..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml
+++ /dev/null
@@ -1,607 +0,0 @@
-import Qt.VisualTest 4.7
-
-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/qmlvisual/focusscope/data-X11/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png
deleted file mode 100644
index 5f93c67..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png
deleted file mode 100644
index 3b4e0e6..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png
deleted file mode 100644
index 54a3934..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png
deleted file mode 100644
index 4f08fd2..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png
deleted file mode 100644
index 9aee1f8..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png
deleted file mode 100644
index 04eb05c..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png
deleted file mode 100644
index 54a3934..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png
deleted file mode 100644
index 3b4e0e6..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png
deleted file mode 100644
index 2df55df..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png
deleted file mode 100644
index 91816fd..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml
deleted file mode 100644
index 0fba451..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml
+++ /dev/null
@@ -1,2879 +0,0 @@
-import Qt.VisualTest 4.7
-
-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/qmlvisual/focusscope/data/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png
index 67b99e0..fd28a93 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png
index 67b99e0..986a164 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png
index 69f0366..986a164 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png
index afe0bd9..fd28a93 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png
deleted file mode 100644
index afe0bd9..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png
deleted file mode 100644
index afe0bd9..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test.qml
index 460ba1a..e2bf23f 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.qml
@@ -6,1594 +6,918 @@ VisualTest {
}
Frame {
msec: 16
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ image: "test.0.png"
}
Frame {
msec: 32
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 48
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 64
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 80
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 96
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 112
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 128
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 144
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 160
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 176
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 192
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 208
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 224
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 240
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 256
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 272
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 288
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 304
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 320
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 336
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 352
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 368
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 384
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 400
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 416
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 432
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 448
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 464
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 480
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 496
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 512
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 528
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 544
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 560
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 576
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
}
Frame {
msec: 592
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "7d929804a37a70ffd487e95a3be8ea5f"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 608
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 624
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 640
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 656
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 672
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 688
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 7
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 704
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 720
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 736
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 752
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 768
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 784
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 800
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 816
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 832
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 848
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 864
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 880
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 896
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 912
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 928
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 944
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 960
- image: "test.0.png"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 976
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ image: "test.1.png"
}
Frame {
msec: 992
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1008
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1024
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1040
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1056
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1072
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1088
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1104
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1120
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1136
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1152
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1168
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1184
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1200
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1216
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1232
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 1248
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Key {
type: 6
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1264
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1280
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1296
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1312
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1328
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Frame {
+ msec: 1344
+ hash: "f369109744055d30eadf2832a028a104"
}
Key {
type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 1344
- hash: "6f85c2226e6e408f4699762f687b83e1"
- }
- Frame {
msec: 1360
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1376
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1392
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1408
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1424
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1440
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1456
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Key {
+ type: 6
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1472
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1488
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1504
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1520
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1536
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
+ }
+ Key {
+ type: 7
+ key: 16777237
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1552
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1568
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1584
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1600
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1616
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1632
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1648
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1664
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1680
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1696
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1712
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
}
Frame {
msec: 1728
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "0914d1f71cdaf1f1a37b95ea41c57d4f"
+ }
+ Key {
+ type: 6
+ key: 16777235
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1744
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1760
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1776
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1792
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1808
- hash: "6f85c2226e6e408f4699762f687b83e1"
+ hash: "f369109744055d30eadf2832a028a104"
}
Key {
- type: 6
- key: 16777234
- modifiers: 536870912
- text: "1c"
+ type: 7
+ key: 16777235
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1824
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1840
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1856
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1872
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1888
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1904
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1920
- image: "test.1.png"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 1936
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ image: "test.2.png"
}
Frame {
msec: 1952
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Frame {
+ msec: 1968
+ hash: "f369109744055d30eadf2832a028a104"
}
Key {
- type: 7
+ type: 6
key: 16777234
- modifiers: 536870912
- text: "1c"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 1968
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
- }
- Frame {
msec: 1984
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2000
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2016
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2032
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2048
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2064
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2080
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2096
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2112
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2128
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2144
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2160
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2176
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2192
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2208
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2224
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2240
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2256
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2272
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2288
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2304
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2320
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2336
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
}
Frame {
msec: 2352
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "f369109744055d30eadf2832a028a104"
+ }
+ Frame {
+ msec: 2368
+ hash: "f369109744055d30eadf2832a028a104"
}
Key {
type: 6
- key: 16777237
- modifiers: 536870912
- text: "1f"
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 2368
- hash: "7e4814e27214ecbeb55992e319a88102"
- }
- Frame {
msec: 2384
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2400
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2416
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2432
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2448
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2464
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Key {
type: 7
- key: 16777237
- modifiers: 536870912
- text: "1f"
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 2480
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2496
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2512
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2528
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2544
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2560
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2576
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2592
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2608
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2624
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2640
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2656
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2672
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2688
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2704
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2720
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2736
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2752
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2768
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2784
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2800
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2816
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2832
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2848
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2864
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2880
- image: "test.2.png"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2896
- hash: "7e4814e27214ecbeb55992e319a88102"
+ image: "test.3.png"
}
Frame {
msec: 2912
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2928
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2944
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2960
- hash: "7e4814e27214ecbeb55992e319a88102"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2976
- hash: "7e4814e27214ecbeb55992e319a88102"
- }
- Key {
- type: 6
- key: 16777235
- modifiers: 536870912
- text: "1e"
- autorep: false
- count: 1
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 2992
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
Frame {
msec: 3008
- hash: "e7722f02692fbae81b9ec78547e1e4e9"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
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"
+ hash: "94675f9c9afb6834b91a69fd0ce35a22"
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png
index 555a968..22d7496 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png
index 555a968..22d7496 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml
index 03ece10..62eff17 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml
@@ -6,602 +6,318 @@ VisualTest {
}
Frame {
msec: 16
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ image: "test2.0.png"
}
Frame {
msec: 32
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 48
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 64
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 80
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 96
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 112
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 128
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 144
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 160
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 176
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 192
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 208
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 224
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 240
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 256
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 272
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 288
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 304
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 320
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 336
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 352
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 368
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 384
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 400
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 416
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 432
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 448
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 464
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 480
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 496
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 512
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 528
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 544
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 560
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 576
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 592
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 608
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 624
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 640
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 656
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 672
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 688
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 704
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 720
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 736
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 752
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 768
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 784
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 800
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 816
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 832
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 848
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 864
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 880
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 896
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 912
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 928
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 944
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 960
- image: "test2.0.png"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 976
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ image: "test2.1.png"
}
Frame {
msec: 992
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1008
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1024
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1040
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1056
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1072
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1088
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1104
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1120
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1136
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1152
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1168
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1184
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1200
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1216
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1232
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
Frame {
msec: 1248
- hash: "bb4131579c66dc948f2e27e236deb4ab"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
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"
+ hash: "4823f4520db0c1f64d887f172b3efa17"
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png
index 374acf5..c092535 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png
index b75cb10..861b459 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png
index 9b2f919..2ede7c9 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png
index bf63032..055f184 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png
index 6981a06..c092535 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png
deleted file mode 100644
index 5856325..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png
deleted file mode 100644
index 9b2f919..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png
deleted file mode 100644
index b75cb10..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png
deleted file mode 100644
index 374acf5..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png
deleted file mode 100644
index 11a08bd..0000000
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml
index dd48e39..8ed9c7d 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml
@@ -6,2874 +6,1322 @@ VisualTest {
}
Frame {
msec: 16
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ image: "test3.0.png"
}
Frame {
msec: 32
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 48
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 64
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 80
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 96
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 112
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 128
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 144
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 160
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 176
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 192
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 208
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 224
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 240
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 256
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 272
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 288
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 304
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 320
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 336
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 352
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 368
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 384
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 400
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 416
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 432
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 448
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 464
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 480
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 496
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 512
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 528
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 544
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "e24319b7e562a668e86ac17f4914bcb7"
}
Frame {
msec: 560
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "742f87f00d2d7e64b4a579823fa99df2"
}
Frame {
msec: 576
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "db6793df1b6d00f4b6286253173ee2b5"
}
Frame {
msec: 592
- hash: "f192b84337784a6d31c309af7e32b5f7"
+ hash: "3da67f52ad1bc0ee55f8d6637286f420"
+ }
+ Frame {
+ msec: 608
+ hash: "89e8c8fd913cb229f5adc221090d789c"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 608
- hash: "c114718c158f107e8a7d06bf49d30855"
- }
- Frame {
msec: 624
- hash: "c71bf3c6ef7addc3c1f55e3f92c001ac"
+ hash: "d47cc2fe207628f4deddd58c3697171a"
}
Frame {
msec: 640
- hash: "b075c33ed606041dfb57a03f92cf5574"
+ hash: "9ab1f939324602533b14b20d6160ae57"
}
Frame {
msec: 656
- hash: "1933a060fc0b889082df94054a2d3c7e"
+ hash: "798b200076ec6688cda78fd273a9fde1"
}
Frame {
msec: 672
- hash: "cc4133e796a242493538131c789c392c"
+ hash: "5c485ac62f637db9e3aa327dd1bee801"
}
Frame {
msec: 688
- hash: "cbc16ad8bcb8dcf73ae101ca4899adac"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "5c485ac62f637db9e3aa327dd1bee801"
}
Frame {
msec: 704
- hash: "1a5e008ef5640ad85a19b307244a36f7"
+ hash: "5c485ac62f637db9e3aa327dd1bee801"
}
Frame {
msec: 720
- hash: "6a0c9d0f3ac068d65d590c844dae4ebb"
+ hash: "5c485ac62f637db9e3aa327dd1bee801"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 736
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "75bbe5082eebec814c726adc8fc076ec"
}
Frame {
msec: 752
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "58d8051766872d54831bec4c8c7cbd63"
}
Frame {
msec: 768
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "f474b747b4b7bb2a5b2c418f35aa1b09"
}
Frame {
msec: 784
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "d561cf0dbded0b2bd85c7c88fb3afdd6"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 800
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "49c0616c4d5cedeb9fdb12fb7d7f504d"
}
Frame {
msec: 816
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "9e5c66cfc3af51b7a10f6a969452dafe"
}
Frame {
msec: 832
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "72d765f52ce8ab3748cd43d859285ca7"
}
Frame {
msec: 848
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "732987bbdc421c4650d7503387acd4de"
}
Frame {
msec: 864
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "439456ecedad4674b6ecef415e53334b"
}
Frame {
msec: 880
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "439456ecedad4674b6ecef415e53334b"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 896
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "5f2d5dc55b551713c4219bc55124f7db"
}
Frame {
msec: 912
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "54e2150829c6201b3ba8eb61f4142de7"
}
Frame {
msec: 928
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "f916ac803817b7cd7e29c05ac23449fc"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 944
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "590b45a3fb1571428c8da48f026fab3b"
}
Frame {
msec: 960
- image: "test3.0.png"
+ hash: "b5a811e6d1b956af67c6df4c9eabd0a3"
}
Frame {
msec: 976
- hash: "216a02433edb100e6ff3db4944f6b061"
+ image: "test3.1.png"
}
Frame {
msec: 992
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "877ca6b70b6535f868d3a450045f70a0"
}
Frame {
msec: 1008
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "559a5c06ed2d1030d21f56aaaded8869"
}
Frame {
msec: 1024
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "559a5c06ed2d1030d21f56aaaded8869"
}
Frame {
msec: 1040
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "559a5c06ed2d1030d21f56aaaded8869"
}
Frame {
msec: 1056
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "559a5c06ed2d1030d21f56aaaded8869"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1072
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "f6d3d4fd5d9d1be96646891cbf0740e5"
}
Frame {
msec: 1088
- hash: "216a02433edb100e6ff3db4944f6b061"
+ hash: "2ba5d4da68051a96fed2b54804854a8e"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1104
- hash: "ac2f6e2f5f379ad8717aa3754f2aab80"
+ hash: "2b1b72dfac63903377b427ef4149dfd7"
}
Frame {
msec: 1120
- hash: "e896c5b5a4fd121e5c25aba0a17c11f3"
+ hash: "7ada77586dd0583a66c801b6faf78e2a"
}
Frame {
msec: 1136
- hash: "1d1228cf0b205e46a969a0016245bb9e"
+ hash: "a5c527fa2095e2d8949d36351994624a"
}
Frame {
msec: 1152
- hash: "d07b1d53655e549c503223fddfa62038"
+ hash: "f89bf3f20d3f7284ba52338c1cfb91e1"
}
Frame {
msec: 1168
- hash: "d774614f13d1a19eff3c451c4abce7e5"
+ hash: "e7de3174a111f26f4d92a273e2c43b61"
}
Frame {
msec: 1184
- hash: "0e8445283c961a41c22ede2f26ab0d0c"
+ hash: "d9ef1156a1f7bfe86f97717a600b31c9"
}
Frame {
msec: 1200
- hash: "f85ced79a9d521b70b093d43d1335914"
+ hash: "0b216b28513d00939531e409aac328e8"
}
Frame {
msec: 1216
- hash: "3f70531768847686f202336827ed5c51"
+ hash: "0b216b28513d00939531e409aac328e8"
}
Key {
- type: 7
+ type: 6
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
msec: 1232
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "d92131f183e9d926a2718559f58f17cb"
}
Frame {
msec: 1248
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "9e5985271ddec748803ea3c72d40ad97"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1264
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "2462ddfcf93f96ad6a3164c7f21e2948"
}
Frame {
msec: 1280
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "4ce27e3e77d9c80982c5197c2a440dc4"
}
Frame {
msec: 1296
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "e4afa6dc35ddd52876af514ec151900e"
}
Frame {
msec: 1312
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "3e542da8a83e53c66fd96d2c003a8b67"
}
Frame {
msec: 1328
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "6b0afb12551ada7501346125ac29071c"
}
Frame {
msec: 1344
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1360
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1376
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1392
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1408
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1424
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1440
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1456
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1472
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 1488
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1504
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "ca6c00b583f88efb6efe285a0903392b"
}
Frame {
msec: 1520
- hash: "30c5f9005238542c83b2d994cb61de16"
+ hash: "2a2fcb90a6a7ae6d3d08f49c7a7177c0"
+ }
+ Frame {
+ msec: 1536
+ hash: "3a7cd960ff367793e09d73302e57b6e4"
}
Key {
- type: 6
+ type: 7
key: 16777236
- modifiers: 536870912
- text: "1d"
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 1536
- hash: "c59557a62fb22756ecae00bf36589f19"
- }
- Frame {
msec: 1552
- hash: "c2938aac121e121eb138b2cdc485a23c"
+ hash: "581121ab5334a6122bf9ca4489c9b971"
}
Frame {
msec: 1568
- hash: "aa582bd07789a0ce000bb014b4924969"
+ hash: "8690456fa25a12ef28f014b86cc94c81"
}
Frame {
msec: 1584
- hash: "59d7a7fed20a11ecb12de08c77f0f303"
+ hash: "27a395e2e25eedba8f361a20f917590b"
}
Frame {
msec: 1600
- hash: "9a1d7649e44e2c2436855b92abbae030"
+ hash: "5eae6bbdd6acd7f21eccf277f21f4893"
}
Frame {
msec: 1616
- hash: "e46c47a221da37bbdffcdf671e84774b"
+ hash: "f5ebab53b77dcea32e821c8e551077e4"
}
Frame {
msec: 1632
- hash: "85ff7ef61ef08dc97065b0536f9f8766"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
}
Frame {
msec: 1648
- hash: "1159f274e5c2947875484d04a3ac6694"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
}
Frame {
msec: 1664
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
}
Frame {
msec: 1680
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1696
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "7c83c13e1d9e6456023ba7e2a1f3875c"
}
Frame {
msec: 1712
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "f12f6c5111de654e90d462a4d44f12ec"
}
Frame {
msec: 1728
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "dcb7712d8320bf4096a3af794facad4d"
}
Frame {
msec: 1744
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "84f7c046592d31f403b56ee1fd6fcbc4"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1760
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "1b05381e85ec8bbf69edacbedce01fb8"
}
Frame {
msec: 1776
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "b2c148675ffe1ef5110602f7a4feab74"
}
Frame {
msec: 1792
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "d082931d05d2b2dc24ccfa5d7a703291"
}
Frame {
msec: 1808
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "99783e2541d03a7ce9ee4e69a2b21993"
}
Frame {
msec: 1824
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "503ff7e940ac59006c1486e3d2027d35"
}
Frame {
msec: 1840
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "503ff7e940ac59006c1486e3d2027d35"
}
Frame {
msec: 1856
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "503ff7e940ac59006c1486e3d2027d35"
}
Frame {
msec: 1872
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "503ff7e940ac59006c1486e3d2027d35"
+ }
+ Key {
+ type: 6
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1888
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "06fbf3d840cbf170c94377d767d1d49f"
}
Frame {
msec: 1904
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "34f538738046a1d6932ef1a6f59eb6be"
}
Frame {
msec: 1920
- image: "test3.1.png"
+ hash: "2553f91e5ea5a4da70eb3825a0cdfa10"
}
Frame {
msec: 1936
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ image: "test3.2.png"
}
Frame {
msec: 1952
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "115f1c37d6492bbc4848cc4be6ddd2b0"
+ }
+ Key {
+ type: 7
+ key: 16777236
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 1968
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "40d5255e7e5ca12b90f5cbede1e9b2cd"
}
Frame {
msec: 1984
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
+ hash: "3a6f6b4cee75f8b1b0b2b5674c3df0a8"
}
Frame {
msec: 2000
- hash: "113dd40f9b5c9869ad04a00dda9078c6"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "2c24eab593d56a7554f9ba925f858d5b"
}
Frame {
msec: 2016
- hash: "26e5e7612374c7a4f7ac26a284c735b4"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2032
- hash: "03c63a8bab380ebcd02f2bf2f588df85"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2048
- hash: "1a7c4738de4f1123c7e639c935095476"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2064
- hash: "8362cb8a253dcb2e9ef7fb070579d639"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2080
- hash: "8fae548ad1f2e16738c14636b905efef"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2096
- hash: "05fca78fea63817204b2303495baaec7"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2112
- hash: "5bf7b04177db667f23f1bc4f0066bc44"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2128
- hash: "aa10d0614604f0563d4fc458b7bb9260"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2144
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2160
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2176
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2192
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2208
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2224
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2240
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2256
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2272
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2288
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2304
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2320
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2336
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2352
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2368
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2384
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2400
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2416
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2432
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2448
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
}
Frame {
msec: 2464
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "bb10ef1703674147351968121ebe0154"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2480
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "1e61fbb8c054c6b8fdb895d236514bfa"
}
Frame {
msec: 2496
- hash: "0461d0e31648d2c155bee0145094c153"
+ hash: "3a1b093963a0cb898a68f87a3c2056a9"
}
Frame {
msec: 2512
- hash: "0461d0e31648d2c155bee0145094c153"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "9fe3eb5cbc621401be9ab7bc7d28bb24"
}
Frame {
msec: 2528
- hash: "1823a5c00778550c6b46416e6a2b730f"
+ hash: "1bb16e3d17506913e295d68e8d4ffa88"
}
Frame {
msec: 2544
- hash: "7ca64f71eee9d3a926335de026be5fe2"
+ hash: "19389ae4da2ad3bc7076632366db55c7"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2560
- hash: "5f9e44b8374a490793b479440ce3b701"
+ hash: "5f1731dd62f61ddafb7cfe66167b7408"
}
Frame {
msec: 2576
- hash: "b0969884a9654d87da9941fb9eb4c99a"
+ hash: "e37b8399f9ea92a91b0d98b01a4ef72b"
}
Frame {
msec: 2592
- hash: "aeadf244a67b3c9e5c119b52aa0f15a0"
+ hash: "e1282e3afc46fa8828a138e4722707b5"
}
Frame {
msec: 2608
- hash: "2d990e5ae8d3660079bdea7f2b5245a7"
+ hash: "503ff7e940ac59006c1486e3d2027d35"
+ }
+ Frame {
+ msec: 2624
+ hash: "503ff7e940ac59006c1486e3d2027d35"
}
Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 2624
- hash: "5998faffa17f9ffbf1cb39cdc09cdd54"
- }
- Frame {
msec: 2640
- hash: "bf8089df5d863f627cd44294f322d796"
+ hash: "925852b350354bb596d749fe31828147"
}
Frame {
msec: 2656
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "1e302775a002185b888b590cc6533b28"
}
Frame {
msec: 2672
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "b147169c3688148bda5b82afa1f5d2dc"
}
Frame {
msec: 2688
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "34964e45ff808595845f4a868be3782e"
}
Frame {
msec: 2704
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "b86ef7d97f20c3894dc5a551f41ab9c4"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2720
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "dc9981cb1833b34fc4fc9b833281348e"
}
Frame {
msec: 2736
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "b28644e06195849afd44143bd60aa27d"
}
Frame {
msec: 2752
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
}
Frame {
msec: 2768
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
}
Frame {
msec: 2784
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "738278d39b73bfa15fc8b19b5720bbd7"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2800
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "745230d107911d033ebeb58dc8a94445"
}
Frame {
msec: 2816
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "81cc4ac88a51518cf50cd6b46c3e0cb7"
}
Frame {
msec: 2832
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "10b7cff34298222ee305c9895bcdef21"
}
Frame {
msec: 2848
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "622a027091c1577a646ece0331016783"
}
Frame {
msec: 2864
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "ab527747f9918774c7a4cfb476cc31f4"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2880
- image: "test3.2.png"
+ hash: "1bf8a37b5aeb9df37f97083ce19a0c1a"
}
Frame {
msec: 2896
- hash: "f75305426b87e1cdc325ae6668367be9"
+ image: "test3.3.png"
}
Frame {
msec: 2912
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "19a2f59bfe96a0a33ff45ab72cc2a2fc"
}
Frame {
msec: 2928
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
}
Frame {
msec: 2944
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "202d4ca464f73e28a286ebed05e86d9d"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 2960
- hash: "f75305426b87e1cdc325ae6668367be9"
+ hash: "6b172121f35f9667f40b0006d5875685"
}
Frame {
msec: 2976
- hash: "f75305426b87e1cdc325ae6668367be9"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "6e65dfe717a69de65d58e059904bb00a"
}
Frame {
msec: 2992
- hash: "d707cb6e2587eecba275d1e7ceb9d020"
+ hash: "e660212f2d7d477213ef8b8262e8f2b1"
}
Frame {
msec: 3008
- hash: "fddd144d4d2e475330ff87f4e6febe35"
+ hash: "df1e770a7177b7871cf734c47e1227ba"
}
Frame {
msec: 3024
- hash: "06115e65296d1a77ab956cd3984303ee"
+ hash: "9d103d49ea30b04f3e97ecad3c13a816"
}
Frame {
msec: 3040
- hash: "6881ec448625fdc23f1241bd60362460"
+ hash: "4602aaf8b65c4ff5b9c8d4ba8d5b89d5"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3056
- hash: "d94fdfd178377328e3b840c32f774958"
+ hash: "bf029f1cb5ddf0dc3931b47895a2141d"
}
Frame {
msec: 3072
- hash: "d2cba0b3aac8002aa2de51f7b1442985"
+ hash: "0b216b28513d00939531e409aac328e8"
}
Frame {
msec: 3088
- hash: "c0ea81cddf6b1f5b4b4157dade6b8ca0"
+ hash: "0b216b28513d00939531e409aac328e8"
}
Frame {
msec: 3104
- hash: "964a80740cc7ba474d5d10b76cca1b14"
+ hash: "0b216b28513d00939531e409aac328e8"
}
Frame {
msec: 3120
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "0b216b28513d00939531e409aac328e8"
+ }
+ Frame {
+ msec: 3136
+ hash: "0b216b28513d00939531e409aac328e8"
}
Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
- msec: 3136
- hash: "3e44d7064e55c510401b5008a06d9b82"
- }
- Frame {
msec: 3152
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "807fe46158fdc72c45cd6c8024ce705d"
}
Frame {
msec: 3168
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "58dc1ca8e39488479acdb79762000ad5"
}
Frame {
msec: 3184
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "48dd97d986ee545f6727128b7a06529f"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3200
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "a7f0c00cb4bbbd65c02b3949c90564ad"
}
Frame {
msec: 3216
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "3f1c40e8d17b83ff3a251d9284bd4282"
}
Frame {
msec: 3232
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "d7527558128467c64cf0a07289158238"
}
Frame {
msec: 3248
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "3af9f7618d0c9ffedb942ae422d61dcb"
}
Frame {
msec: 3264
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "eb1703107106afc54d47d8600ea40f18"
}
Frame {
msec: 3280
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "559a5c06ed2d1030d21f56aaaded8869"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3296
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "c9a69d9ad499e6537ef047382dc01460"
}
Frame {
msec: 3312
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "594911681db91c825b93633b6aa3fe1f"
}
Frame {
msec: 3328
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "f566d5e728e9a45c7d339282c0c6709c"
}
Frame {
msec: 3344
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "49f1d0164a1ae3c361421635a2038697"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3360
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "a22b4ea9973c03042a3cfa5d23a79c86"
}
Frame {
msec: 3376
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "abab27079cd52caaaf421d1b4d8d8066"
}
Frame {
msec: 3392
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "e528a9ab6ae13518fa541d7f2c6e09a8"
}
Frame {
msec: 3408
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "439456ecedad4674b6ecef415e53334b"
}
Frame {
msec: 3424
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "439456ecedad4674b6ecef415e53334b"
}
Frame {
msec: 3440
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "439456ecedad4674b6ecef415e53334b"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3456
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "57543f91e958840efcad1948a19aa8e1"
}
Frame {
msec: 3472
- hash: "3e44d7064e55c510401b5008a06d9b82"
- }
- Frame {
- msec: 3488
- hash: "3e44d7064e55c510401b5008a06d9b82"
+ hash: "534fc45fdace49ebf444e393b57c1315"
}
Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
autorep: false
count: 1
}
Frame {
+ msec: 3488
+ hash: "0eee986f096e3ebddf61d3b0a18f2eff"
+ }
+ Frame {
msec: 3504
- hash: "56634199c96e5c4588c2954f0595fcaa"
+ hash: "74f702ca61d97d31f79d8ce3be53eee7"
}
Frame {
msec: 3520
- hash: "a51221b77045e51cba2b0913546961cb"
+ hash: "1f0b630548fe93f93550439b4945bdda"
}
Frame {
msec: 3536
- hash: "9910569a15164882056802e5ecfaef42"
+ hash: "1eb442ca5e7e1f476d8297c3bdb7bbd1"
}
Frame {
msec: 3552
- hash: "17080817e0b23212828d2cee23eff98f"
+ hash: "1689cba06c74a6204d80cc651b1d2150"
}
Frame {
msec: 3568
- hash: "791fee9758645fe21fe52918e5435f7d"
+ hash: "8711b6647c4146dfa3e3c680fbd1bf08"
}
Frame {
msec: 3584
- hash: "e0fcea2889a4825075322524025a4bdf"
+ hash: "5c485ac62f637db9e3aa327dd1bee801"
+ }
+ Key {
+ type: 6
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3600
- hash: "825f58093f328182fa32b3cbc573101f"
+ hash: "0ac2726d000ba2ef1097a49f37d5c209"
}
Frame {
msec: 3616
- hash: "550972282584bd52108728290bd4aa5e"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "83d00571e499039b7f577e393eed881a"
}
Frame {
msec: 3632
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "46724d427a8f6d7737abcacd76701259"
}
Frame {
msec: 3648
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "a63554a4839e8874cbebe5204d43c6d5"
+ }
+ Key {
+ type: 7
+ key: 16777234
+ modifiers: 0
+ text: ""
+ autorep: false
+ count: 1
}
Frame {
msec: 3664
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "5946c98c4204d454a41575242db5fd45"
}
Frame {
msec: 3680
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "a3d0107e71a6b454f8fdc7557eb9ce18"
}
Frame {
msec: 3696
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "86d9ad1831acc4a73075e6792efb7db4"
}
Frame {
msec: 3712
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3728
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3744
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3760
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3776
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3792
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3808
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3824
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3840
- image: "test3.3.png"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3856
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ image: "test3.4.png"
}
Frame {
msec: 3872
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3888
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3904
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3920
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3936
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3952
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3968
- hash: "0cf213791ef1263f9dfc867df96e8211"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 3984
- hash: "0cf213791ef1263f9dfc867df96e8211"
- }
- Key {
- type: 6
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4000
- hash: "a2386a0135e8ffd9f2ac12345ede3553"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4016
- hash: "9550cdc0032bc3ea0a611f2584f43cca"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4032
- hash: "3f39909102a04f0e41a97b10dde4425a"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4048
- hash: "535d56a4d450cf0222f94573a88bbf80"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4064
- hash: "c4b782cfb9399689b0cbfc2a97305984"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4080
- hash: "23604b04198d53e0ba4a0955d8bcf124"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4096
- hash: "a440962d680f70eb47af38a91390b8c0"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4112
- hash: "da4b079f00248a073ce49f749ff0cc77"
- }
- Key {
- type: 7
- key: 16777236
- modifiers: 536870912
- text: "1d"
- autorep: false
- count: 1
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4128
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4144
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4160
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4176
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4192
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4208
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4224
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
Frame {
msec: 4240
- hash: "861a8438a60e8a937d96f6b11fa1e3b3"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
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"
+ hash: "cb3a3cca07a49fadf8bb00834ea24f73"
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/test.qml b/tests/auto/declarative/qmlvisual/focusscope/test.qml
index 6b2ee25..7342e35 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/test.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/test.qml
@@ -1,9 +1,16 @@
import QtQuick 1.0
+/*
+ Blue border indicates scoped focus
+ Black border indicates NOT scoped focus
+ Red box indicates active focus
+ Use arrow keys to navigate
+ Press "9" to print currently focused item
+*/
Rectangle {
color: "white"
- width: 800
- height: 600
+ width: 480
+ height: 480
Keys.onDigit9Pressed: console.log("Error - Root")
@@ -55,8 +62,6 @@ Rectangle {
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
diff --git a/tests/auto/declarative/qmlvisual/focusscope/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/test2.qml
index 4df75cf..072eddb 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/test2.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/test2.qml
@@ -2,35 +2,33 @@ import QtQuick 1.0
Rectangle {
color: "white"
- width: 800
- height: 600
-
- Text { text: "All five rectangles should be red" }
+ width: 400
+ height: 50
+ //All five rectangles should be red
FocusScope {
- y: 100
focus: true
- Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" }
+ Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" }
FocusScope {
- y: 100
+ x: 80
focus: true
- Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" }
+ Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" }
FocusScope {
- y: 100
+ x: 80
focus: true
- Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" }
+ Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" }
FocusScope {
- y: 100
+ x: 80
focus: true
- Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" }
+ Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" }
FocusScope {
- y: 100
+ x: 80
focus: true
- Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" }
+ Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" }
}
}
}
diff --git a/tests/auto/declarative/qmlvisual/focusscope/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/test3.qml
index 184763a..90c2357 100644
--- a/tests/auto/declarative/qmlvisual/focusscope/test3.qml
+++ b/tests/auto/declarative/qmlvisual/focusscope/test3.qml
@@ -1,21 +1,26 @@
import QtQuick 1.0
+/*
+ Currently selected element should be red
+ Pressing "9" should print the number of the currently selected item
+ Be sure to scroll all the way to the right, pause, and then all the way to the left
+*/
Rectangle {
color: "white"
- width: 800
- height: 600
+ width: 400
+ height: 100
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" }
+ ListElement { name: "red" }
+ ListElement { name: "orange" }
+ ListElement { name: "yellow" }
+ ListElement { name: "green" }
+ ListElement { name: "cyan" }
+ ListElement { name: "blue" }
+ ListElement { name: "indigo" }
+ ListElement { name: "violet" }
+ ListElement { name: "pink" }
}
Component {
@@ -28,8 +33,7 @@ Rectangle {
focus: true
Keys.onDigit9Pressed: console.log(name)
width: 50; height: 50;
- color: root.ListView.isCurrentItem?"red":"green"
- Text { text: name; anchors.centerIn: parent }
+ color: root.ListView.isCurrentItem?"black":name
}
}
}
@@ -45,8 +49,4 @@ Rectangle {
}
- 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/qmlvisual/qdeclarativeborderimage/animated-smooth.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated-smooth.qml
index 8c21cee..33d8cb8 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated-smooth.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated-smooth.qml
@@ -4,52 +4,63 @@ 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
+ width: 520; height: 260
+ Grid{
+ columns: 4
+ spacing: 4
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ antialiased: true
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ antialiased: true
+ }
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml
index fb5cac0..21f6b5f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/animated.qml
@@ -4,52 +4,55 @@ 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
+ width: 520; height: 260
+ Grid{
+ columns: 4
+ spacing: 4
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 60; maxHeight: 120
+ source: "content/colors.png"; margin: 15
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Repeat; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Stretch; verticalMode: BorderImage.Repeat
+ }
+ MyBorderImage {
+ minWidth: 60; maxWidth: 120
+ minHeight: 40; maxHeight: 120
+ source: "content/bw.png"; margin: 10
+ horizontalMode: BorderImage.Round; verticalMode: BorderImage.Round
+ }
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml
index f4ead54..923db47 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml
@@ -13,21 +13,21 @@ Item {
property int margin
id: container
- width: 240; height: 240
+ width: maxWidth; height: maxHeight
BorderImage {
id: image; x: container.width / 2 - width / 2; y: container.height / 2 - height / 2
SequentialAnimation on width {
loops: Animation.Infinite
- NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 2000; easing.type: "InOutQuad"}
- NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 2000; easing.type: "InOutQuad" }
+ NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 600; easing.type: "InOutQuad"}
+ NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 600; easing.type: "InOutQuad" }
}
SequentialAnimation on height {
loops: Animation.Infinite
- NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 2000; easing.type: "InOutQuad"}
- NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 2000; easing.type: "InOutQuad" }
+ NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 600; easing.type: "InOutQuad"}
+ NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 600; easing.type: "InOutQuad" }
}
border.top: container.margin
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci
index 506f6f5..0d91764 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-round.sci
@@ -1,7 +1,7 @@
-border.left:30
-border.top:30
-border.right:30
-border.bottom:30
+border.left:15
+border.top:15
+border.right:15
+border.bottom:15
horizontalTileRule:Round
verticalTileRule:Round
source:colors.png
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci
index e4989a7..16ac8cc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors-stretch.sci
@@ -1,5 +1,5 @@
-border.left:30
-border.top:30
-border.right:30
-border.bottom:30
+border.left:15
+border.top:15
+border.right:15
+border.bottom:15
source:colors.png
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.png
index dfb62f3..116907d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/colors.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/qmldir b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/qmldir
new file mode 100644
index 0000000..0c732d2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/qmldir
@@ -0,0 +1 @@
+MyBorderImage 1.0 MyBorderImage.qml
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png
index 9a6b079..b7d06e4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png
index 4366d53..d904aa0 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png
deleted file mode 100644
index 85a2729..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png
deleted file mode 100644
index de6ff7c..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png
deleted file mode 100644
index fe7d3dd..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png
deleted file mode 100644
index e73bef5..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png
deleted file mode 100644
index 0c75422..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
index e974234..6c7a940 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
@@ -6,1818 +6,314 @@ VisualTest {
}
Frame {
msec: 16
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ image: "animated-smooth.0.png"
}
Frame {
msec: 32
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 48
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 64
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "8ba2cebd7b80bd58612ce46470e7763b"
}
Frame {
msec: 80
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "9ab9c8f788bbca58552bbb6009386d69"
}
Frame {
msec: 96
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "7f4b50df7848ad07fb75cb19f2c4b04a"
}
Frame {
msec: 112
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "425e48ae492190eb6b8028be11352d7e"
}
Frame {
msec: 128
- hash: "cd2180be80101c2aa4350b51b7a6f502"
+ hash: "183e1f8321edb7b8d1cc2cc858039360"
}
Frame {
msec: 144
- hash: "de471829f8ad3b43bf1b4df9d1d65a4d"
+ hash: "83d82bc27b0e3387dddb8e7e09380e02"
}
Frame {
msec: 160
- hash: "ed9f2ca797894612600bc4b7fbaecb84"
+ hash: "bca94a64a283e7e30ec8c1fe3249f981"
}
Frame {
msec: 176
- hash: "59470d71fa4426d0283e86371f2bfc2a"
+ hash: "26cbcf6233c8fd222a857a8ae801749a"
}
Frame {
msec: 192
- hash: "9a2f92efb51bcc6293d6a8e82d5314ea"
+ hash: "ac1d21dba648ab729e1670ead441b173"
}
Frame {
msec: 208
- hash: "7b66e21652a7d0982226e281a48411a9"
+ hash: "e42811f8029c6cd70041f8492a31ff27"
}
Frame {
msec: 224
- hash: "a716c8d2c94433dee719f92f0822c8ec"
+ hash: "f0b06b2ccf1be47ab7c5f6863ccdc495"
}
Frame {
msec: 240
- hash: "f22a47b846cfee96ebdf39bbce2e6d51"
+ hash: "9b398166d385facb2d02c86cd92ab85f"
}
Frame {
msec: 256
- hash: "5a8932d13d624932a65694fd19ec05cd"
+ hash: "a4414a5ae4e44320383d49441d7acb51"
}
Frame {
msec: 272
- hash: "48e62dd171f5da82b5aa26c765e4042c"
+ hash: "f09208fa210f3b0b271af9ef6f3741e8"
}
Frame {
msec: 288
- hash: "63d3c47f7dec1236440a05e0a8380900"
+ hash: "054f7aebcef583f9c8469aaa2e62f9ea"
}
Frame {
msec: 304
- hash: "323af110731b7af0c30f8862ff59b833"
+ hash: "1331b1218fa6134922ab248bfde5d3f6"
}
Frame {
msec: 320
- hash: "83c029e328e80af83158c37089cf0ece"
+ hash: "601b97220c77c185d9ed3ae3726815a5"
}
Frame {
msec: 336
- hash: "3f9a09ae19be34348bb2552915360cf7"
+ hash: "487c739f3849834e3d7fa2885bb28375"
}
Frame {
msec: 352
- hash: "df624d70cae1bcefda8d69c0ff055d83"
+ hash: "c41dc19ab7f3c80349ac52ab2c3b410d"
}
Frame {
msec: 368
- hash: "d671a3b971468e1d8aa30ab655e020a9"
+ hash: "c6e8b055e5919aecbf2ef4d88de6cabd"
}
Frame {
msec: 384
- hash: "74c837b29f7f05b615123f0e608b523f"
+ hash: "f9d99999cccd8a3a9d7cb74cadb08059"
}
Frame {
msec: 400
- hash: "277ef98ea859fb7685fe6cd44a538a7d"
+ hash: "c466c57cda1c7666a46bab9478031c86"
}
Frame {
msec: 416
- hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9"
+ hash: "02f9c85d8cbd9041ed18d2fe0071c526"
}
Frame {
msec: 432
- hash: "456be9c208d690c479ba12bf6325dde0"
+ hash: "355d2b1b30a721a26f80c414bd9164f6"
}
Frame {
msec: 448
- hash: "10307beea6d99ab0ff5863f8e35555ed"
+ hash: "bfc8b1bdb53f4a4c44285a5c10819ae7"
}
Frame {
msec: 464
- hash: "170a1d5fe3422cf5223a78015a6a45fd"
+ hash: "c272ac121fe5392f12ef3180d4c694c8"
}
Frame {
msec: 480
- hash: "64ecb03aa538e74d0b99c6dec7751401"
+ hash: "83324ab9209ac5246c39274ecec2dbcf"
}
Frame {
msec: 496
- hash: "f3a7e74a1839f9366f9eeec4d2b80d1e"
+ hash: "b128fd583f5fa460bcd1c062226274fb"
}
Frame {
msec: 512
- hash: "0f347763f25350ebb62dda1536372b45"
+ hash: "f46f1f1069806b1e17f340140e82bfd3"
}
Frame {
msec: 528
- hash: "0af81ee0d76ff8335a0e347dc086ca37"
+ hash: "dff621d5da5f4d008a8f874914f90637"
}
Frame {
msec: 544
- hash: "061406edcbd2d4930ab89c3fcab63c7f"
+ hash: "c5920a84e215f4bbda3032bbfbca4070"
}
Frame {
msec: 560
- hash: "31d65134f340d82dd40f2401bda3fb7e"
+ hash: "ecc23f198a4bf346bf6eee51f7adea69"
}
Frame {
msec: 576
- hash: "16c16c77c65b36d1e0954d5ead2642be"
+ hash: "dcc8f5b1b6aac31c3c5856560b37c501"
}
Frame {
msec: 592
- hash: "61c16009b65a55bffb63e27727e1615e"
+ hash: "203fa4bd23440aa88fc2a27b66ee091d"
}
Frame {
msec: 608
- hash: "e1474c2cdd8768ca1ef45bf3bc5234ca"
+ hash: "a2662209c8f9aa7bd9c5b4066b289cde"
}
Frame {
msec: 624
- hash: "89c159ef00d273ecfe61332e1bf7244d"
+ hash: "a2662209c8f9aa7bd9c5b4066b289cde"
}
Frame {
msec: 640
- hash: "f4d0d3bca25e67908b38910f47b4757e"
+ hash: "203fa4bd23440aa88fc2a27b66ee091d"
}
Frame {
msec: 656
- hash: "0e0c40f8e11a7bd499c80562ac6f8a82"
+ hash: "dcc8f5b1b6aac31c3c5856560b37c501"
}
Frame {
msec: 672
- hash: "4310a4c3037d845f088f21ad608f366a"
+ hash: "ecc23f198a4bf346bf6eee51f7adea69"
}
Frame {
msec: 688
- hash: "3d518cd0348d6202243364af1dd6ce89"
+ hash: "c5920a84e215f4bbda3032bbfbca4070"
}
Frame {
msec: 704
- hash: "41987e6b4248d7944c0dbc6eb3862023"
+ hash: "dff621d5da5f4d008a8f874914f90637"
}
Frame {
msec: 720
- hash: "3e81338d38723d56f2d6c428271f81c1"
+ hash: "f46f1f1069806b1e17f340140e82bfd3"
}
Frame {
msec: 736
- hash: "74af3457583fbaf73f14556aeccc8403"
+ hash: "b128fd583f5fa460bcd1c062226274fb"
}
Frame {
msec: 752
- hash: "efc119983701908a904deb24108c59cb"
+ hash: "83324ab9209ac5246c39274ecec2dbcf"
}
Frame {
msec: 768
- hash: "3a77785cfd7755f567619d8e04583f6a"
+ hash: "c272ac121fe5392f12ef3180d4c694c8"
}
Frame {
msec: 784
- hash: "fd85d1dd931033973283a408b5e328a8"
+ hash: "bfc8b1bdb53f4a4c44285a5c10819ae7"
}
Frame {
msec: 800
- hash: "5d3e85acabe5e5ff802eb7731676274f"
+ hash: "355d2b1b30a721a26f80c414bd9164f6"
}
Frame {
msec: 816
- hash: "ae12f1f37a746e16b06e6b869c89fac1"
+ hash: "02f9c85d8cbd9041ed18d2fe0071c526"
}
Frame {
msec: 832
- hash: "d2ed2cf3a12e41bac299399cc35abe6a"
+ hash: "c466c57cda1c7666a46bab9478031c86"
}
Frame {
msec: 848
- hash: "84ef6dda8318b623832f58c46d762e89"
+ hash: "f9d99999cccd8a3a9d7cb74cadb08059"
}
Frame {
msec: 864
- hash: "b699285764f5e8866a9996f4a0dccc69"
+ hash: "c6e8b055e5919aecbf2ef4d88de6cabd"
}
Frame {
msec: 880
- hash: "ddd8a006ef048c8d929144aa9fcd7c5a"
+ hash: "c41dc19ab7f3c80349ac52ab2c3b410d"
}
Frame {
msec: 896
- hash: "177666cb3bb784c83196886b2c6cf6b6"
+ hash: "487c739f3849834e3d7fa2885bb28375"
}
Frame {
msec: 912
- hash: "9cd29b4b023a8b92573575fb3c3dda83"
+ hash: "601b97220c77c185d9ed3ae3726815a5"
}
Frame {
msec: 928
- hash: "adc670a9aa0326744cb23e4f5912e6c7"
+ hash: "1331b1218fa6134922ab248bfde5d3f6"
}
Frame {
msec: 944
- hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6"
+ hash: "054f7aebcef583f9c8469aaa2e62f9ea"
}
Frame {
msec: 960
- image: "animated-smooth.0.png"
+ hash: "f09208fa210f3b0b271af9ef6f3741e8"
}
Frame {
msec: 976
- hash: "64b21b89576fdd0083f60a26f57b9c11"
+ image: "animated-smooth.1.png"
}
Frame {
msec: 992
- hash: "0d407ee07692d0e5a480a60952807b3c"
+ hash: "9b398166d385facb2d02c86cd92ab85f"
}
Frame {
msec: 1008
- hash: "845170815a87565dc4229792032b3357"
+ hash: "f0b06b2ccf1be47ab7c5f6863ccdc495"
}
Frame {
msec: 1024
- hash: "8b8120cfc14de03e048632fdea61be21"
+ hash: "e42811f8029c6cd70041f8492a31ff27"
}
Frame {
msec: 1040
- hash: "b0070117f1c24a4da87434725d4bb989"
+ hash: "ac1d21dba648ab729e1670ead441b173"
}
Frame {
msec: 1056
- hash: "0239d697642ca1d1b1d1daa3ea048e1e"
+ hash: "26cbcf6233c8fd222a857a8ae801749a"
}
Frame {
msec: 1072
- hash: "3df54504f8891306fa8f1e9e2075a5e2"
+ hash: "bca94a64a283e7e30ec8c1fe3249f981"
}
Frame {
msec: 1088
- hash: "853429387cc639496c7338244de7e1b7"
+ hash: "83d82bc27b0e3387dddb8e7e09380e02"
}
Frame {
msec: 1104
- hash: "bd70500fbdfe5aa2fe4362a97a1dee2d"
+ hash: "183e1f8321edb7b8d1cc2cc858039360"
}
Frame {
msec: 1120
- hash: "b375e723b2396b13b8f55cfc0c81c3c3"
+ hash: "425e48ae492190eb6b8028be11352d7e"
}
Frame {
msec: 1136
- hash: "53f05993ba3b426949badd2e4cd66d84"
+ hash: "7f4b50df7848ad07fb75cb19f2c4b04a"
}
Frame {
msec: 1152
- hash: "23291a0239c69ea07db959e709b1ff5f"
+ hash: "9ab9c8f788bbca58552bbb6009386d69"
}
Frame {
msec: 1168
- hash: "85ef33fcb3f91e4fc20391bf94455984"
+ hash: "8ba2cebd7b80bd58612ce46470e7763b"
}
Frame {
msec: 1184
- hash: "d6615fc345831a3cc5b9a7196284b632"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1200
- hash: "07acba64dc608439a8a54fcb080379e8"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1216
- hash: "2a1fcfb753ca237b518da26e67c928e5"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1232
- hash: "1f964c6c9bebdc9945dc69a6095400f7"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1248
- hash: "bd045f4532d78bba0ef1b64118fd9f24"
- }
- Frame {
- msec: 1264
- hash: "2084ccc60ddd493399c128717816d33b"
- }
- 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: "45d891d804609ebbe1d5ac3f826d0c17"
- }
- 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: "880640372bf584955627f6835f24be13"
- }
- Frame {
- msec: 1632
- hash: "d1110817827c318ceb0c112e8c2bfc1d"
- }
- Frame {
- msec: 1648
- hash: "705d9c8de05c859a42769f73761c6a63"
- }
- Frame {
- msec: 1664
- hash: "3bae40654ec551d69e7c8c72f631c7a5"
- }
- Frame {
- msec: 1680
- hash: "774740a393f3e9b8f12b81cce8da8280"
- }
- Frame {
- msec: 1696
- hash: "64cd225202ed6c91b02c368a9160a656"
- }
- Frame {
- msec: 1712
- hash: "2b7eb8a9fe26b032be8b4b9c00995912"
- }
- Frame {
- msec: 1728
- hash: "47e920e3884ccf2f0f49e78070af6929"
- }
- Frame {
- msec: 1744
- hash: "fe899138116774df4c4441687e3019c5"
- }
- Frame {
- msec: 1760
- hash: "5d9ee853f083d514fbe51d6953d8e000"
- }
- Frame {
- msec: 1776
- hash: "5736362b42bc2d801e02edabb983663a"
- }
- Frame {
- msec: 1792
- hash: "c3ea530de646612f9203c5800cad884b"
- }
- 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: "b980703c1d0018937e83a8ba8862469e"
- }
- Frame {
- msec: 1968
- hash: "05312f9529c94d3331ace7d73c544284"
- }
- Frame {
- msec: 1984
- hash: "a94de4e90a8f8eb4ec33fe902afd226c"
- }
- Frame {
- msec: 2000
- hash: "ee297a2d68c9e58157d9bf189d353713"
- }
- Frame {
- msec: 2016
- hash: "00f3c9b8b37cb104cf2a7701639bc61f"
- }
- Frame {
- msec: 2032
- hash: "ee297a2d68c9e58157d9bf189d353713"
- }
- 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: "c3ea530de646612f9203c5800cad884b"
- }
- 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: "705d9c8de05c859a42769f73761c6a63"
- }
- Frame {
- msec: 2400
- hash: "d1110817827c318ceb0c112e8c2bfc1d"
- }
- Frame {
- msec: 2416
- hash: "880640372bf584955627f6835f24be13"
- }
- 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: "45d891d804609ebbe1d5ac3f826d0c17"
- }
- 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: "1f964c6c9bebdc9945dc69a6095400f7"
- }
- Frame {
- msec: 2816
- hash: "2a1fcfb753ca237b518da26e67c928e5"
- }
- Frame {
- msec: 2832
- hash: "07acba64dc608439a8a54fcb080379e8"
- }
- 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: "d2ed2cf3a12e41bac299399cc35abe6a"
- }
- 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: "74af3457583fbaf73f14556aeccc8403"
- }
- 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: "89c159ef00d273ecfe61332e1bf7244d"
- }
- Frame {
- msec: 3424
- hash: "e1474c2cdd8768ca1ef45bf3bc5234ca"
- }
- Frame {
- msec: 3440
- hash: "61c16009b65a55bffb63e27727e1615e"
- }
- 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: "f22a47b846cfee96ebdf39bbce2e6d51"
- }
- 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: "ed9f2ca797894612600bc4b7fbaecb84"
- }
- 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: "0f347763f25350ebb62dda1536372b45"
- }
- 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: "74af3457583fbaf73f14556aeccc8403"
- }
- 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: "d2ed2cf3a12e41bac299399cc35abe6a"
- }
- 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: "85ef33fcb3f91e4fc20391bf94455984"
- }
- Frame {
- msec: 5184
- hash: "d6615fc345831a3cc5b9a7196284b632"
- }
- Frame {
- msec: 5200
- hash: "07acba64dc608439a8a54fcb080379e8"
- }
- Frame {
- msec: 5216
- hash: "2a1fcfb753ca237b518da26e67c928e5"
- }
- Frame {
- msec: 5232
- hash: "1f964c6c9bebdc9945dc69a6095400f7"
- }
- Frame {
- msec: 5248
- hash: "bd045f4532d78bba0ef1b64118fd9f24"
- }
- Frame {
- msec: 5264
- hash: "2084ccc60ddd493399c128717816d33b"
- }
- 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: "45d891d804609ebbe1d5ac3f826d0c17"
- }
- 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: "880640372bf584955627f6835f24be13"
- }
- Frame {
- msec: 5632
- hash: "d1110817827c318ceb0c112e8c2bfc1d"
- }
- Frame {
- msec: 5648
- hash: "705d9c8de05c859a42769f73761c6a63"
- }
- Frame {
- msec: 5664
- hash: "3bae40654ec551d69e7c8c72f631c7a5"
- }
- Frame {
- msec: 5680
- hash: "774740a393f3e9b8f12b81cce8da8280"
- }
- Frame {
- msec: 5696
- hash: "64cd225202ed6c91b02c368a9160a656"
- }
- Frame {
- msec: 5712
- hash: "2b7eb8a9fe26b032be8b4b9c00995912"
- }
- Frame {
- msec: 5728
- hash: "47e920e3884ccf2f0f49e78070af6929"
- }
- Frame {
- msec: 5744
- hash: "fe899138116774df4c4441687e3019c5"
- }
- Frame {
- msec: 5760
- image: "animated-smooth.5.png"
- }
- Frame {
- msec: 5776
- hash: "5736362b42bc2d801e02edabb983663a"
- }
- Frame {
- msec: 5792
- hash: "c3ea530de646612f9203c5800cad884b"
- }
- 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: "3b7b83e97d17440b42e6ef4b962076d8"
- }
- Frame {
- msec: 5936
- hash: "c5e399e29b988148913e62ee208b3326"
- }
- Frame {
- msec: 5952
- hash: "b980703c1d0018937e83a8ba8862469e"
- }
- Frame {
- msec: 5968
- hash: "05312f9529c94d3331ace7d73c544284"
- }
- Frame {
- msec: 5984
- hash: "a94de4e90a8f8eb4ec33fe902afd226c"
- }
- Frame {
- msec: 6000
- hash: "ee297a2d68c9e58157d9bf189d353713"
- }
- Frame {
- msec: 6016
- hash: "00f3c9b8b37cb104cf2a7701639bc61f"
- }
- Frame {
- msec: 6032
- hash: "ee297a2d68c9e58157d9bf189d353713"
- }
- 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: "c3ea530de646612f9203c5800cad884b"
- }
- 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: "705d9c8de05c859a42769f73761c6a63"
- }
- Frame {
- msec: 6400
- hash: "d1110817827c318ceb0c112e8c2bfc1d"
- }
- Frame {
- msec: 6416
- hash: "880640372bf584955627f6835f24be13"
- }
- 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: "45d891d804609ebbe1d5ac3f826d0c17"
- }
- 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: "1f964c6c9bebdc9945dc69a6095400f7"
- }
- Frame {
- msec: 6816
- hash: "2a1fcfb753ca237b518da26e67c928e5"
- }
- Frame {
- msec: 6832
- hash: "07acba64dc608439a8a54fcb080379e8"
- }
- 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: 0
- 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: "d2ed2cf3a12e41bac299399cc35abe6a"
- }
- Frame {
- msec: 7216
- hash: "ae12f1f37a746e16b06e6b869c89fac1"
- }
- Frame {
- msec: 7232
- hash: "5d3e85acabe5e5ff802eb7731676274f"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png
index 99228f9..b7d06e4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png
index a2dcd00..a0081a9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png
deleted file mode 100644
index 8a80020..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png
deleted file mode 100644
index 02b57ef..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png
deleted file mode 100644
index df0f6cc..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png
deleted file mode 100644
index 0add64d..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png
deleted file mode 100644
index 0886207..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png
deleted file mode 100644
index bc1a7b0..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml
index 630a6d2..87be9f0 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml
@@ -6,2086 +6,338 @@ VisualTest {
}
Frame {
msec: 16
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ image: "animated.0.png"
}
Frame {
msec: 32
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 48
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 64
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "ed19378ea8f51f5ecbd4c89ee5c905c2"
}
Frame {
msec: 80
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "3dc69d5d1b6c524a74e7cec619df5ee3"
}
Frame {
msec: 96
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "ab8d9aa7290be2134a6ef10ca1e1bfe7"
}
Frame {
msec: 112
- hash: "aec13bcab337e55832b0a02fb5c6b526"
+ hash: "8091f4ff6f68e178b7a2a76ba2b38df3"
}
Frame {
msec: 128
- hash: "4c60d345821f515c7811f3b69eb94607"
+ hash: "a94ad01eb63609b5e4a9e6570e1dc25c"
}
Frame {
msec: 144
- hash: "aacf9ae3c23d174a1c1cda493600e355"
+ hash: "21692407cdfeeb20ff81d5d8a8ba3b7e"
}
Frame {
msec: 160
- hash: "228d5312c261d1a5455faf69ec2f2520"
+ hash: "b1d5e860ea311dce4a46fd6d46f9ed58"
}
Frame {
msec: 176
- hash: "465ec993948f7b75aeb5759976f4620d"
+ hash: "a2ef453b88ee01c70a4312ab6dd26685"
}
Frame {
msec: 192
- hash: "755cfccc38bababc468fe6e1076804bb"
+ hash: "6ce1f7da3994a51ad06afa0afb789752"
}
Frame {
msec: 208
- hash: "b63e4d1686057828fd8781f1c33585f5"
+ hash: "dccf9c55dfe7ae652b0e659893465158"
}
Frame {
msec: 224
- hash: "c5b3dede34b0d1d78135e39c41d117c6"
+ hash: "18b00b462711676fdf61ef1819f9f73a"
}
Frame {
msec: 240
- hash: "4d45d70f997c2c67166905c97a900d2e"
+ hash: "981011b01c3dbde098b1a3d0de4026cd"
}
Frame {
msec: 256
- hash: "7b4d12e5a877507e7454aa1b8ed87c2d"
+ hash: "86389b057e84c4dd4cf75d4e33d5e282"
}
Frame {
msec: 272
- hash: "08b9be66e23c7b6f6f629c7470394601"
+ hash: "6802146ad90b2921856c103246f4bca9"
}
Frame {
msec: 288
- hash: "3dac1d9632378bd18c1c938a4868e3fb"
+ hash: "7ab7d71199e883192e28fc150646128c"
}
Frame {
msec: 304
- hash: "406224b535b4425d2708df0083acdc8e"
+ hash: "3d2298cc655318029a2467813f8d75f4"
}
Frame {
msec: 320
- hash: "482bb92d4f0ad5d7c7e379b9e1ad326e"
+ hash: "74a1ed7250f85e7ed4d811b5b697ecb3"
}
Frame {
msec: 336
- hash: "8419f1d75b14130730bcfec4e3a9b058"
+ hash: "2cc6d5e8f4ebde059ffe31fffb2b359d"
}
Frame {
msec: 352
- hash: "a85ee8be6a47bbd1b14137803ce606ec"
+ hash: "b08aec6d9f82e0d530d57f592c25e91a"
}
Frame {
msec: 368
- hash: "c1936628aec13e08e9581dcd2c6d5717"
+ hash: "9f4272d24685a9fbe5c48186932cac07"
}
Frame {
msec: 384
- hash: "75c9bf83ca3fe24612c245698c089430"
+ hash: "4cde877841640aa89949c1369c3b6fd0"
}
Frame {
msec: 400
- hash: "8c66a33d26eec2a1133f4362710a5fab"
+ hash: "bdbbd0b6a309b63d152b7f9b34b51d80"
}
Frame {
msec: 416
- hash: "2266df495ab5265e7514a506d3bf5bc6"
+ hash: "531708677915c1e094ece6f1acac6d1f"
}
Frame {
msec: 432
- hash: "01947e631c3db43f7c5b4427229bc0c8"
+ hash: "7213628b1f66f1dc47fa63eb2aad2d81"
}
Frame {
msec: 448
- hash: "3f62f032239d412d3637198f5e3e83d6"
+ hash: "0ff58a47d524fae956431efc21364ed2"
}
Frame {
msec: 464
- hash: "06d8d8a1a41893d4e27725948a75caf4"
+ hash: "1e940cc44e00f05bad28bcf934b40b1c"
}
Frame {
msec: 480
- hash: "6b48bfd0c7993f746d6301c2a0f61d23"
+ hash: "0f76be39637e8b6ac15c40ea95890189"
}
Frame {
msec: 496
- hash: "ac8f096e8c7cc23bfb01de69cf3e266e"
+ hash: "e23cf00dbd05677815e7e38f6f8e3a4a"
}
Frame {
msec: 512
- hash: "dd4c9e63001bc6e0e63ea4db2d85301f"
+ hash: "3d7e81620d169800f6a251fa3875f23d"
}
Frame {
msec: 528
- hash: "2a7bed775824968e318c3d40fbc5b1c2"
+ hash: "9e04076e283a3a71407488e94d84861f"
}
Frame {
msec: 544
- hash: "3152e5f29015ece423fbdd11a2b382b8"
+ hash: "f4fc58740d6b5cf392e117164d859c0b"
}
Frame {
msec: 560
- hash: "f1a7a4a67a21f5025294af4bea3f8998"
+ hash: "8f041ba2a82618c1545aac6f50c95384"
}
Frame {
msec: 576
- hash: "a40014d842471784e1222eb205395f6f"
+ hash: "759368622bc25c7ae1cb8d2c44affe6a"
}
Frame {
msec: 592
- hash: "18c2f321a149e38b258ac264d40c2376"
+ hash: "90314671aab8165c7c1b35dcf5aaa6b9"
}
Frame {
msec: 608
- hash: "4ae120bb6dc2bd5ff81cc99ae03c191e"
+ hash: "ecd1d2fe087a36fc58290c0c249a7ea0"
}
Frame {
msec: 624
- hash: "19d05a96f3ae7388e854bbf1075b51c1"
+ hash: "ecd1d2fe087a36fc58290c0c249a7ea0"
}
Frame {
msec: 640
- hash: "e418b5f54705515dce5ce3b4cbc45d19"
+ hash: "90314671aab8165c7c1b35dcf5aaa6b9"
}
Frame {
msec: 656
- hash: "554e1d360463871e7c05cfe6f8abe1dd"
+ hash: "759368622bc25c7ae1cb8d2c44affe6a"
}
Frame {
msec: 672
- hash: "153237f8cf37e29ad2f32f7a8a6aecdb"
+ hash: "8f041ba2a82618c1545aac6f50c95384"
}
Frame {
msec: 688
- hash: "60f158382f75103c78e2b9b408e0fe65"
+ hash: "f4fc58740d6b5cf392e117164d859c0b"
}
Frame {
msec: 704
- hash: "4e60300cfab8634e04dcd1b556251d31"
+ hash: "9e04076e283a3a71407488e94d84861f"
}
Frame {
msec: 720
- hash: "6a521f952e05d91b86ad78fd6f5de4f9"
+ hash: "3d7e81620d169800f6a251fa3875f23d"
}
Frame {
msec: 736
- hash: "b74521d6ac531414aeeca0fb28379d11"
+ hash: "e23cf00dbd05677815e7e38f6f8e3a4a"
}
Frame {
msec: 752
- hash: "a6f17da2dd581bdc249ff62f833dc025"
+ hash: "0f76be39637e8b6ac15c40ea95890189"
}
Frame {
msec: 768
- hash: "93d9f0a7c387cbe653a9a088f8f4ef2b"
+ hash: "1e940cc44e00f05bad28bcf934b40b1c"
}
Frame {
msec: 784
- hash: "1ea07ee309ce2c52cbc36370b75a872f"
+ hash: "0ff58a47d524fae956431efc21364ed2"
}
Frame {
msec: 800
- hash: "593a8a45c3a0cd7ce1cb6bd1913136ba"
+ hash: "7213628b1f66f1dc47fa63eb2aad2d81"
}
Frame {
msec: 816
- hash: "c7eb7837dce71c914186326216214eeb"
+ hash: "531708677915c1e094ece6f1acac6d1f"
}
Frame {
msec: 832
- hash: "0cba07ca38c7f0483244832a42d9ac53"
+ hash: "bdbbd0b6a309b63d152b7f9b34b51d80"
}
Frame {
msec: 848
- hash: "93cf31eabb454ec536c638a506be0648"
+ hash: "4cde877841640aa89949c1369c3b6fd0"
}
Frame {
msec: 864
- hash: "e8a61d3858244127cb2b2812f04f5ce9"
+ hash: "9f4272d24685a9fbe5c48186932cac07"
}
Frame {
msec: 880
- hash: "1ac8c393f084aa1894c26610b7f40ea6"
+ hash: "b08aec6d9f82e0d530d57f592c25e91a"
}
Frame {
msec: 896
- hash: "8861bf848da5c96b35addff736b01520"
+ hash: "2cc6d5e8f4ebde059ffe31fffb2b359d"
}
Frame {
msec: 912
- hash: "f04e84ad3579d6334077abe73101d206"
+ hash: "74a1ed7250f85e7ed4d811b5b697ecb3"
}
Frame {
msec: 928
- hash: "eac4600372f0fdfadee88896ac915a48"
+ hash: "3d2298cc655318029a2467813f8d75f4"
}
Frame {
msec: 944
- hash: "ff0928dfd16b2da9811a172c19817a97"
+ hash: "7ab7d71199e883192e28fc150646128c"
}
Frame {
msec: 960
- image: "animated.0.png"
+ hash: "6802146ad90b2921856c103246f4bca9"
}
Frame {
msec: 976
- hash: "7383209c80b403b93da3264eadbc047f"
+ image: "animated.1.png"
}
Frame {
msec: 992
- hash: "86360bd58bba5fdd901c105ddb2e3ade"
+ hash: "981011b01c3dbde098b1a3d0de4026cd"
}
Frame {
msec: 1008
- hash: "bc747167dfb3388ac63e9e68a86b9a03"
+ hash: "18b00b462711676fdf61ef1819f9f73a"
}
Frame {
msec: 1024
- hash: "bccb4b8a494bd45bd70c2524a02a9dc3"
+ hash: "dccf9c55dfe7ae652b0e659893465158"
}
Frame {
msec: 1040
- hash: "ae48da4a66f93c806725ce749700aac8"
+ hash: "6ce1f7da3994a51ad06afa0afb789752"
}
Frame {
msec: 1056
- hash: "c763f56728e17fc119539a4d45dfccc3"
+ hash: "a2ef453b88ee01c70a4312ab6dd26685"
}
Frame {
msec: 1072
- hash: "956429472da133324c970774f77784f5"
+ hash: "b1d5e860ea311dce4a46fd6d46f9ed58"
}
Frame {
msec: 1088
- hash: "a4ddb4956d71fd642d54757938100cf3"
+ hash: "21692407cdfeeb20ff81d5d8a8ba3b7e"
}
Frame {
msec: 1104
- hash: "ec0aea8dc8c269d1f0aee5817347ac55"
+ hash: "a94ad01eb63609b5e4a9e6570e1dc25c"
}
Frame {
msec: 1120
- hash: "68dae343cf324391ec6721cea14575f7"
+ hash: "8091f4ff6f68e178b7a2a76ba2b38df3"
}
Frame {
msec: 1136
- hash: "81d2fc6727dc7449d1a87b4abea9b704"
+ hash: "ab8d9aa7290be2134a6ef10ca1e1bfe7"
}
Frame {
msec: 1152
- hash: "c3a1f12febc979150028737722d6d045"
+ hash: "3dc69d5d1b6c524a74e7cec619df5ee3"
}
Frame {
msec: 1168
- hash: "80ebac4d923f67fb8dba3d133ce657ba"
+ hash: "ed19378ea8f51f5ecbd4c89ee5c905c2"
}
Frame {
msec: 1184
- hash: "7c22fc3e30377cc14326833bdd23ddd8"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1200
- hash: "5359f5e45e5467c62c2d9521c8199c48"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1216
- hash: "30f84a7f67b13a945ba6d5935ea92da5"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1232
- hash: "08f55088cdce741c67539f73291e53ab"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1248
- hash: "93128906d054e44bfd126fc22bdc3102"
+ hash: "a2467396d7318a93d35aa314896d3d05"
}
Frame {
msec: 1264
- hash: "97f7a2175dcf9ac2581a92d614d72f88"
+ hash: "ed19378ea8f51f5ecbd4c89ee5c905c2"
}
Frame {
msec: 1280
- hash: "587cb6e05048579088e88e0180e3ad48"
+ hash: "3dc69d5d1b6c524a74e7cec619df5ee3"
}
Frame {
msec: 1296
- hash: "985868869ef2c332da379460a2f3a71b"
+ hash: "ab8d9aa7290be2134a6ef10ca1e1bfe7"
}
Frame {
msec: 1312
- hash: "94084ca4998fcda408f6987f52c34185"
+ hash: "8091f4ff6f68e178b7a2a76ba2b38df3"
}
Frame {
msec: 1328
- hash: "e91bb914c1eb63cd4269b30a220a128a"
+ hash: "a94ad01eb63609b5e4a9e6570e1dc25c"
}
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"
+ hash: "21692407cdfeeb20ff81d5d8a8ba3b7e"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
index bb9dfbb..8d43554 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png
index 016902b..e1b0967 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png
index a654936..c7d4e1d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png
index cfd5517..9373fae 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png
index 016902b..7a30196 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png
new file mode 100644
index 0000000..4c4d17c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml
index 289af88..5cb4f78 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml
@@ -6,309 +6,277 @@ VisualTest {
}
Frame {
msec: 16
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ image: "flickable-horizontal.0.png"
}
Frame {
msec: 32
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 48
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 64
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 80
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 96
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 112
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 128
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 144
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 160
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 176
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 192
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 208
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 224
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 240
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 256
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 272
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 288
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 304
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 320
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 336
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 352
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 368
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 384
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 400
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 416
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 432
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 448
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 464
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 480
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 496
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 512
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 528
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 544
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 560
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 576
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 592
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 608
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 624
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 640
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 656
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 672
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 688
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 704
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 720
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 447; y: 145
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 736
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 752
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
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"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 477; y: 171
+ x: 446; y: 145
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 960
- image: "flickable-horizontal.0.png"
+ msec: 784
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 473; y: 171
+ x: 440; y: 146
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 976
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ msec: 800
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 463; y: 171
+ x: 425; y: 151
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 992
- hash: "c4d91a9e7f785ccd50db55f697d75cb9"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 407; y: 157
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 1008
- hash: "c4d91a9e7f785ccd50db55f697d75cb9"
+ msec: 816
+ hash: "c92e345e4ffdb30c28d9d5aa5400bd30"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 449; y: 171
+ x: 359; y: 169
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1024
- hash: "4f054038668f56cf3fc46dee08504b24"
+ msec: 832
+ hash: "90f94986ab44ab59618e9a5da17b8cc9"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 425; y: 172
+ x: 309; y: 181
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1040
- hash: "e6ae6e2a8e5fb7204ae1f559b5dc4a63"
+ msec: 848
+ hash: "0154a65f8693b98576101ac1c2fc8761"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 393; y: 172
+ x: 282; y: 187
modifiers: 0
sendToViewport: true
}
@@ -316,884 +284,1292 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 393; y: 172
+ x: 282; y: 187
modifiers: 0
sendToViewport: true
}
Frame {
+ msec: 864
+ hash: "792c1b5267f14c891dae2348a8188a92"
+ }
+ Frame {
+ msec: 880
+ hash: "15ce9e88d4ad2e698bf167d1432c0b8a"
+ }
+ Frame {
+ msec: 896
+ hash: "8f4109ef4c24d286d73f689565a0d056"
+ }
+ Frame {
+ msec: 912
+ hash: "f5728190bf5c94742686f063b4a4b09b"
+ }
+ Frame {
+ msec: 928
+ hash: "a38c7527a9a818b7bc25466b0e4939f9"
+ }
+ Frame {
+ msec: 944
+ hash: "ed3902455fc31a4e3232308b815a4daa"
+ }
+ Frame {
+ msec: 960
+ hash: "a2093589363ac2d50491412e99e0193a"
+ }
+ Frame {
+ msec: 976
+ image: "flickable-horizontal.1.png"
+ }
+ Frame {
+ msec: 992
+ hash: "c32349580e3a9586cc1133c935607cf0"
+ }
+ Frame {
+ msec: 1008
+ hash: "cd2068492e346eb20d50aee69e3a3559"
+ }
+ Frame {
+ msec: 1024
+ hash: "f43a1a38894b8ffad009ba995d84b0ee"
+ }
+ Frame {
+ msec: 1040
+ hash: "2d5c4a73df2a054801571f1ce119e31f"
+ }
+ Frame {
msec: 1056
- hash: "3bfaaef12ca852421ad179d8598a306d"
+ hash: "b8825cc6bdca8102a655d797ea41b5b1"
}
Frame {
msec: 1072
- hash: "e00ff5e13a9a97bc11e041f89e4782f5"
+ hash: "3f0be15b85220743d004f2d54b6e137c"
}
Frame {
msec: 1088
- hash: "ae10ada837b21365936672e9a4b4b175"
+ hash: "4b0952d33149b44ffa0a06723a4116c7"
}
Frame {
msec: 1104
- hash: "63566d7f1707025c9ec37e398d0e69ef"
+ hash: "9056bda43259e92cfe56fdf394e2ca54"
}
Frame {
msec: 1120
- hash: "20e9d299cd867d680cf85f99e06cd200"
+ hash: "82ec9f09d2303e5b0b9c05b9a10a84db"
}
Frame {
msec: 1136
- hash: "4d3a19b3c50a20ba1d93a8bcd178a424"
+ hash: "751a9b3054c09d900364d7c9cac8bc2b"
}
Frame {
msec: 1152
- hash: "d373ab5240e438e8234ae05f935c1ef8"
+ hash: "17dfdfef20f9da7e8b6f16df974baea9"
}
Frame {
msec: 1168
- hash: "2f9c00aa1f8a8cc5d10e6c6a0baee366"
+ hash: "108e6d9a5a81df32823bfd7a90a000a7"
}
Frame {
msec: 1184
- hash: "0fd8203b0a33fd8243ecd878f04f9b42"
+ hash: "71dd0d55a3e837d3a8e4b4e318579ade"
}
Frame {
msec: 1200
- hash: "24a197df4209c7076d68031e5dd4fd9e"
+ hash: "8013cdb2615bca89134ea040409af509"
}
Frame {
msec: 1216
- hash: "9e4271eacdc875183e3c8e7a1eb098c2"
+ hash: "4b2826ad4c755690bd837994133f5fac"
}
Frame {
msec: 1232
- hash: "cdf7aac4ff7e5df806977eb38392f5bc"
+ hash: "52d0da7f138bd37ac587a448d6402aca"
}
Frame {
msec: 1248
- hash: "1ace4a1312cad6f173a04c388624a97f"
+ hash: "e634724c5bb294d338210845bf64d2cf"
}
Frame {
msec: 1264
- hash: "193d6d6838ac1d5ddb941fbb340ec506"
+ hash: "59bc5f0d057ee431f289806377f19213"
}
Frame {
msec: 1280
- hash: "ed82807a48f28610ba9bda0c7ab91ce4"
+ hash: "6ef2c5f7766c2cc77b30d636bfaa4422"
}
Frame {
msec: 1296
- hash: "e1168bb9a88a972decb0c537d86d7758"
+ hash: "578d056c3db094420dbaa51bd08ced20"
}
Frame {
msec: 1312
- hash: "828ba428b04826687c6ef19b72318924"
+ hash: "14c6f7a04a52caffefa07af556ccb262"
}
Frame {
msec: 1328
- hash: "7dae52c428253cf44045ffaabaadd2f4"
+ hash: "7cb63d56fec144d0509ce219fc6fe459"
}
Frame {
msec: 1344
- hash: "06e2a81e1a2421523642cfcf17ec22e4"
+ hash: "462dafa7f6427aecf6c28a5dcf5a10cc"
}
Frame {
msec: 1360
- hash: "283997835a54e80c0ab8a0321bd03ce7"
+ hash: "45360814f985ed780a443568a91fc170"
}
Frame {
msec: 1376
- hash: "6354f9379b7b25c8fabda4e5bc3cdf6a"
+ hash: "0d18ceb2436e4f7eb56a3443fab706e6"
}
Frame {
msec: 1392
- hash: "6bc87dfd21d59efd3397e3cfb0d00d25"
+ hash: "1d83f367ba9f7f1d4496208271e925ed"
}
Frame {
msec: 1408
- hash: "4f97fc9aa1f79a6b007a00459386b9ff"
+ hash: "fdbd00ee4c122aef779df42ea53f403a"
}
Frame {
msec: 1424
- hash: "2b5c711ede124c9e97d3ef83a3fdcc8b"
+ hash: "bedd1cb304efd4851813b39a746198a4"
}
Frame {
msec: 1440
- hash: "5a8cbd4ac3fcd920f2aea6e2cfa96467"
+ hash: "9aa7bed86efa9634466736f20ee0ab5b"
}
Frame {
msec: 1456
- hash: "5b32961cb36e519f5b1d50386e796d3e"
+ hash: "00fc8186a7ae44e10195a7b13defa0d2"
}
Frame {
msec: 1472
- hash: "c91f95cccd38cbd1a16ee65abffd40ab"
+ hash: "42d6e8e0bbed879ed63644c83e61e7bd"
}
Frame {
msec: 1488
- hash: "25108050298d3ffc850113971bcf54da"
+ hash: "df074f8c210249e5ef652349479b6325"
}
Frame {
msec: 1504
- hash: "6a236881f2a1cb487ee1945c279e020b"
+ hash: "4f94020437e35cf44dd3576997990ab7"
}
Frame {
msec: 1520
- hash: "2df1824df1cf20022595f64d26adb4ad"
+ hash: "8ca6c3b4fa3be73ac35073356b680a35"
}
Frame {
msec: 1536
- hash: "4ca4a0a4b4fd9f9c4846adebcdc8fd67"
+ hash: "c25eee1c5791383ebc59974e7754eacb"
}
Frame {
msec: 1552
- hash: "1696ef0862ff4772f960d203c43fbddf"
+ hash: "f4917ada78942428cc6b9aa5e56c013d"
}
Frame {
msec: 1568
- hash: "c5846835b8eb5d98c481ee5811344ea1"
+ hash: "23e1e607101fc7260a4ac841344f5fe0"
}
Frame {
msec: 1584
- hash: "fbcb044ee53302de573321b43f068e65"
+ hash: "2dcc7d187d8e0493e5766efbf09ef37c"
}
Frame {
msec: 1600
- hash: "d369e0a6c4a3e63102be29a7362ef9eb"
+ hash: "c1e5602753e80cf44d7b330140c6912e"
}
Frame {
msec: 1616
- hash: "e93131b881805d4aa44949c69f486821"
+ hash: "febaf72d01a3763461b4b7d2ddd7a23e"
}
Frame {
msec: 1632
- hash: "b7aeee9e5065f1d4656e451b542ecf6a"
+ hash: "071262b911b61576f451be25691a57cf"
}
Frame {
msec: 1648
- hash: "05521ca19960c070d5f3dd72c5ade0e4"
+ hash: "44705db9289fd8753b9d63e8bc963b38"
}
Frame {
msec: 1664
- hash: "2c68cb3291cf1f892c8b8eb28b409e4d"
+ hash: "0c41d7b7d36bd083abfc0b83b862cad9"
}
Frame {
msec: 1680
- hash: "5a0908aea91df2b9e65d222829c2b0ba"
+ hash: "0c41d7b7d36bd083abfc0b83b862cad9"
}
Frame {
msec: 1696
- hash: "0d4ff147517eee8b3dbcd51a708b2aa7"
+ hash: "071262b911b61576f451be25691a57cf"
}
Frame {
msec: 1712
- hash: "521e1075de1de89c6e25f469d2728ab7"
+ hash: "a00aa90e894b48203b0446ca287ee712"
}
Frame {
msec: 1728
- hash: "c543447f98ae608058c6c02c8c8665e6"
+ hash: "26c9ca53ee4b084c6595ad65bf4880df"
}
Frame {
msec: 1744
- hash: "ac259db754b7dfb8cce8548527c72e4b"
+ hash: "f4917ada78942428cc6b9aa5e56c013d"
}
Frame {
msec: 1760
- hash: "bc5b68d5ecfb583ae41001e326b7aa9b"
+ hash: "ffedee7bf2d8099e361b8b1706b03f88"
}
Frame {
msec: 1776
- hash: "e08051cb1ab2d8f979a52dc86411f78f"
+ hash: "1778ef1629ce977015b641448b46634f"
}
Frame {
msec: 1792
- hash: "b1746ad9563359f0d70a1aaee62e9bd8"
+ hash: "42d6e8e0bbed879ed63644c83e61e7bd"
}
Frame {
msec: 1808
- hash: "5d6bc33ff2857fb8db582362bf7c19c7"
+ hash: "99e843ec69b79b79b0792e0a2f28cd1b"
}
Frame {
msec: 1824
- hash: "83f2c3a7124f9be4dbe883a27ca7df8e"
+ hash: "8b3ebca70b50a6a93823e015ea80f0f9"
}
Frame {
msec: 1840
- hash: "189f7cfb5ede1f8380b1a05b7e3d942e"
+ hash: "8eaa7f076064ce55051237b04861e408"
}
Frame {
msec: 1856
- hash: "07b1a4e5ca156e6aa1f3e76b825807ce"
+ hash: "6acc0ca5e5808d911287edfa78c8ac02"
}
Frame {
msec: 1872
- hash: "48b25f0acfe6eb3bc2cb9eb16e6595d0"
+ hash: "e9f05899e0b53c21f6efe834095a3ea4"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 91; y: 208
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 93; y: 209
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1888
- hash: "15ae05f5ed098021073c4593587949ea"
+ hash: "e9f05899e0b53c21f6efe834095a3ea4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 99; y: 210
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 108; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1904
- hash: "b300f2c75f4aebcf84ed37ad424ca9fa"
+ hash: "d2dece405f5f6ed1de2acb6615a931de"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 142; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1920
- image: "flickable-horizontal.1.png"
+ hash: "21e0f21edc77424e8327c9a3350ecc1d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 198; y: 216
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1936
- hash: "7d8ea492fb1c664502e95e085896c569"
+ image: "flickable-horizontal.2.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 229; y: 218
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 220
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1952
- hash: "7513b077e073d78b387309b56e1fd44c"
+ hash: "c10c8b0c94f899414d8b3ef0b7c97646"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 322; y: 223
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 322; y: 223
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1968
- hash: "ed1ac5cf6d4b081983a8e16258f431bf"
+ hash: "807aff4e6c96a9d0de7fa55e233446b1"
}
Frame {
msec: 1984
- hash: "fbb31f23ba6e5d02011363abfb4b3f18"
+ hash: "dbd02848cefacbb26f4bcb7d8f073d6c"
}
Frame {
msec: 2000
- hash: "6f01df424b38036b9921b4ee1491a1c1"
+ hash: "9a60608d8ea1b39fa2d3851873f2f08e"
}
Frame {
msec: 2016
- hash: "11f706dfacbec5c0be0c2f3c5442f717"
+ hash: "e7b3e3a40281f63889808211d6746374"
}
Frame {
msec: 2032
- hash: "0a70348986f4987f43db3e55af63fca5"
+ hash: "188c225c46ec00105df230bfeea09974"
}
Frame {
msec: 2048
- hash: "6f8b7aaad846f83c6349836d7af34662"
+ hash: "e2e977b42e91d8c5dee57fd8245692eb"
}
Frame {
msec: 2064
- hash: "44723b22aad6d2d814e074ff9324f3c4"
+ hash: "ca2f12fb173c405f95e608858ab982ad"
}
Frame {
msec: 2080
- hash: "44723b22aad6d2d814e074ff9324f3c4"
+ hash: "fa86ee5f25fa425cf2569c8ef570b9d8"
}
Frame {
msec: 2096
- hash: "44723b22aad6d2d814e074ff9324f3c4"
+ hash: "9b74656866fb8c7394bbbecec6414aca"
}
Frame {
msec: 2112
- hash: "1c12d2c68223324f040b7a693cef2074"
+ hash: "87147326d1baab174c0f9a5ccdc2cb84"
}
Frame {
msec: 2128
- hash: "0a70348986f4987f43db3e55af63fca5"
+ hash: "c0d00f98c71bf3f8e5954b45fbab95a8"
}
Frame {
msec: 2144
- hash: "bf4de7baf2730cdaf83887d50d577986"
+ hash: "c087d1d62e56e573b55c1d8599bba8a6"
}
Frame {
msec: 2160
- hash: "23ddb2c0793d7161a0d8c5b2a777dceb"
+ hash: "dd5a94c6febdee58e8f115cb75131aaa"
}
Frame {
msec: 2176
- hash: "7513b077e073d78b387309b56e1fd44c"
+ hash: "a7465d6137f865f512ce65ceb29533b4"
}
Frame {
msec: 2192
- hash: "83fa82362057466dff6a243a95d423db"
+ hash: "409086f6bb661aab8b548fea56d7e6b1"
}
Frame {
msec: 2208
- hash: "0e60b632ce511109cb01d2e5ff6945f8"
+ hash: "6a22911e0fb58df31271baa463ff599d"
}
Frame {
msec: 2224
- hash: "78c25194827c4243a16807491f798cdf"
+ hash: "c4f6dd30d5fdfcf91a8b29cf5c622423"
}
Frame {
msec: 2240
- hash: "4c9dc46794d4a32e654395bb9d78409e"
+ hash: "5a95b83f237c7243a198a43e9a587179"
}
Frame {
msec: 2256
- hash: "e996d4f3a0b3a4a4ed29ec23a1ad5615"
+ hash: "d79ed290efc6dbd976d574bf0b14a6a3"
}
Frame {
msec: 2272
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "a7bcb436e96d7c981852239462573495"
}
Frame {
msec: 2288
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "f63cc82e351daab503e316f8b516990f"
}
Frame {
msec: 2304
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "4ea63cd25a1424042ffc60549a78563c"
}
Frame {
msec: 2320
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "ef0fb776012575b3b0dbf6e5f4dee571"
}
Frame {
msec: 2336
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "e2508faec7737be2666d87ad715b5f74"
}
Frame {
msec: 2352
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "9fe4e897c6b853f774d11817a0eb53bf"
}
Frame {
msec: 2368
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "c122ce2e73cbfedcc99d649c21d91f9d"
}
Frame {
msec: 2384
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "883b8b180853f1f432ae98ddfe1b6ce3"
}
Frame {
msec: 2400
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "d0808284e431da60f61d571c257a3011"
}
Frame {
msec: 2416
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "df90f19450bf4d9496aab987a89e3a02"
}
Frame {
msec: 2432
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "5640c1e64556b90e7fbd4448fa9db462"
}
Frame {
msec: 2448
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "6d9b5c2f7d0dedbbc444e69bb39fed08"
}
Frame {
msec: 2464
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "485c4a8049068cf73bf22db5fd3618be"
}
Frame {
msec: 2480
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "9e25da59c9e7e4cf7796902e8e2ff92a"
}
Frame {
msec: 2496
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "bd45e8f2442d7c1a1b16a762bc29e7cf"
}
Frame {
msec: 2512
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "ec1013d23e581dbb39b1549d2e1b3b32"
}
Frame {
msec: 2528
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "1ea3c2fde8ee3a14406e027f2124d793"
}
Frame {
msec: 2544
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "3c3f31a05fb2f32538872c9fa158aaab"
}
Frame {
msec: 2560
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "05a84d9c55e634ec01edd2a63e13613b"
}
Frame {
msec: 2576
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "0f7ccd2da58e2e73b0ab18bb681dafd5"
}
Frame {
msec: 2592
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "e481ff78029f8bc4bf7c697db6824f6a"
}
Frame {
msec: 2608
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "efb92b8b7a90acabeb4a8d5cae52fe3c"
}
Frame {
msec: 2624
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "4728dd0fac4edf40cfd5ef5a422b4ed9"
}
Frame {
msec: 2640
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "27641dcd772c979ae22d12bfbadbb67f"
}
Frame {
msec: 2656
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "26268714105bc4832d336a38a859fc50"
}
Frame {
msec: 2672
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "caf0d351d3b6914ca52853a30643ea48"
}
Frame {
msec: 2688
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "319824b1143925162f04aaddcfaa65d9"
}
Frame {
msec: 2704
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "73aa36815f34bf5e005000e7da38555e"
}
Frame {
msec: 2720
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "73aa36815f34bf5e005000e7da38555e"
}
Frame {
msec: 2736
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "319824b1143925162f04aaddcfaa65d9"
}
Frame {
msec: 2752
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "caf0d351d3b6914ca52853a30643ea48"
}
Frame {
msec: 2768
- hash: "cd6770afe63f28517a93f0961cf9c26e"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 152; y: 189
- modifiers: 0
- sendToViewport: true
+ hash: "c87ba4dda0a5c931d0c7ae74a0fb2896"
}
Frame {
msec: 2784
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "ab551561ad8a3937558afc080b3e6130"
}
Frame {
msec: 2800
- hash: "cd6770afe63f28517a93f0961cf9c26e"
+ hash: "474d8b566b9e4ef7dc125a8df30ccbb1"
}
Frame {
msec: 2816
- hash: "cd6770afe63f28517a93f0961cf9c26e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 154; y: 190
- modifiers: 0
- sendToViewport: true
+ hash: "cc7dfbcfafa12d40210a4d5fa7f60862"
}
Frame {
msec: 2832
- hash: "cd6770afe63f28517a93f0961cf9c26e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 169; y: 191
- modifiers: 0
- sendToViewport: true
+ hash: "3c3f31a05fb2f32538872c9fa158aaab"
}
Frame {
msec: 2848
- hash: "edd015434d7ead96c03a51a2b1c9e527"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 202; y: 192
- modifiers: 0
- sendToViewport: true
+ hash: "9705c0dd30c3f381084ec29242bebb2f"
}
Frame {
msec: 2864
- hash: "ea0eda505daea4171e27aac358aa6a4a"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 256; y: 192
- modifiers: 0
- sendToViewport: true
+ hash: "917579854722d6e6711811e10cbe229f"
}
Frame {
msec: 2880
- image: "flickable-horizontal.2.png"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 331; y: 192
- modifiers: 0
- sendToViewport: true
+ hash: "43fa578250e214ed9ad6894329a27c54"
}
Frame {
msec: 2896
- hash: "34f70dfe1c226e63300112aa9a4a6968"
+ image: "flickable-horizontal.3.png"
}
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
+ hash: "5640c1e64556b90e7fbd4448fa9db462"
}
Frame {
msec: 2928
- hash: "dd61e0ae58d7a344908a10bb97cfcb39"
+ hash: "88cef15940302e2b8b43e73234fd7b9c"
}
Frame {
msec: 2944
- hash: "14a384c4bdd3e89808761d1e86976170"
+ hash: "041aecec2b0b0d59a56e1dd26b45cab1"
}
Frame {
msec: 2960
- hash: "0e82a4920a53239f117448cd0e0b27f2"
+ hash: "0d519463c713f3da46ecacd155e1a0f3"
}
Frame {
msec: 2976
- hash: "711e29bf6fbbeb7882064adb0619f4ac"
+ hash: "5dd0c855b97d298244fb599c9f781651"
}
Frame {
msec: 2992
- hash: "43307cbfe1688daf300fafc8df0082b8"
+ hash: "bfc51621e9bc95d2d46cec632a3fae12"
}
Frame {
msec: 3008
- hash: "46d788d926c03d85a68b66252e73ae90"
+ hash: "b05fb6e798ab3fed940b5ac4d88ca378"
}
Frame {
msec: 3024
- hash: "a0042935ad2d5557c906050d4a3581c9"
+ hash: "6bc9cc0d3b11ea91856296b0ec934a8b"
}
Frame {
msec: 3040
- hash: "b618a40490ca0aea310f08b452fa8c68"
+ hash: "f4e63f3af69dacbf2d1d719d4d03a266"
}
Frame {
msec: 3056
- hash: "e2aaad7f160a6d77dd788c76bb8cb8a7"
+ hash: "31ab08997eb86fab062a3128aecbccb5"
}
Frame {
msec: 3072
- hash: "ab5c27fa790c67a6678db0bbae1ae477"
+ hash: "90736b240ba1e634bd0ea86423908e16"
}
Frame {
msec: 3088
- hash: "b43ed7af838cd6edd32393fc56cf8fb1"
+ hash: "90736b240ba1e634bd0ea86423908e16"
}
Frame {
msec: 3104
- hash: "88ac50602c9f27fb5b882ad32d14ff46"
+ hash: "e74982557dc06aac572078840c7e889a"
}
Frame {
msec: 3120
- hash: "259af2e080ed93e16cb633fa940c7c08"
+ hash: "e74982557dc06aac572078840c7e889a"
}
Frame {
msec: 3136
- hash: "d05bec2351068d552b7bbbf47cf82fad"
+ hash: "ca30c14c7344d1711a35c707f8804f6e"
}
Frame {
msec: 3152
- hash: "5354b8e07f1ed22950687187ee7a0290"
+ hash: "e616110d39009f0d636b816828cc0ccb"
}
Frame {
msec: 3168
- hash: "3bfaaef12ca852421ad179d8598a306d"
+ hash: "e616110d39009f0d636b816828cc0ccb"
}
Frame {
msec: 3184
- hash: "40d3a77fce7a9a9ca7ae6023fc4cfc10"
+ hash: "e616110d39009f0d636b816828cc0ccb"
}
Frame {
msec: 3200
- hash: "5837c0122aa6b28518f1b7043ead99a9"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 412; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3216
- hash: "9514d8530275e4642810ac441e8de353"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 3232
- hash: "3b720882f52340549d8e1b9659443461"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
Frame {
msec: 3248
- hash: "4de5b95c8f4949a4f1ee9a119940e80a"
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 408; y: 214
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 407; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3264
- hash: "a35097c00483e0b481222e4ad220c7a4"
+ hash: "10a89da9887cb4bbd812c090a8a56797"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 403; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3280
- hash: "82ac348a63a4e358a877a2e45d48e2b1"
+ hash: "1991cbb0fb053937f922731d5716032c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 398; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3296
- hash: "1322108409d1fa87d128f0c44c81ab4b"
+ hash: "df447575a4734bb5bd9badc6e27d98e4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 391; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3312
- hash: "f6b030effcca891ab20073f106b22d73"
+ hash: "0fbfe1e0d7fb54450188398aa40690cd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 383; y: 214
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3328
- hash: "a7ccd998ac2ff2777d9423d704ddef48"
+ hash: "cb62e60296046c73d301d7186e14faed"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 369; y: 213
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3344
- hash: "b6d971a4f3321b7f3632e778ce733589"
+ hash: "909cbd1292476584554e22232cb43639"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 352; y: 211
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3360
- hash: "b6d971a4f3321b7f3632e778ce733589"
+ hash: "e63b7e502dfb2834c06a969b683b9bd3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 331; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3376
- hash: "b6d971a4f3321b7f3632e778ce733589"
+ hash: "4ea63cd25a1424042ffc60549a78563c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 314; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3392
- hash: "82ef6700a513e39508fb6de5ef07f1e7"
+ hash: "77e39d2d4bfcacecdae4f014e4506d71"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 300; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3408
- hash: "9e4c4d479bc0b1a61566eae12416bea6"
+ hash: "db576eca8bad67cb8b994f12fc448969"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 288; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3424
- hash: "f6b030effcca891ab20073f106b22d73"
+ hash: "efeb3f616da9d78505c3c82fc34ee31c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 278; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3440
- hash: "8968acd022a9ba6fcc3ea52bdd7268c4"
+ hash: "e4f8bb02f8ac6bc40e1801cc8f360078"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 210
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3456
- hash: "de8f1a1fd680af475173d5f81e85b26c"
+ hash: "82118ef71809e3867717232c4d9c5518"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 252; y: 208
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3472
- hash: "82e8c0c7cb7c2b1e8d7a5fc019533e6b"
+ hash: "5363451c696f6c6eb792b23d086243d7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 238; y: 208
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3488
- hash: "f820d250252cd910af97e5c9be181457"
+ hash: "fe6afe8ae8a7c216a1cffc5515f273d5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 227; y: 206
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3504
- hash: "a40558c1fbf328d3c891b473b2454020"
+ hash: "9b165741d86c70380c15e15cff3fabb6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 206
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3520
- hash: "0ef9e64bad67670102e1e4d9ef0e96f3"
+ hash: "f5e176355468f4fa224d4dfcdd7525a3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 222; y: 206
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3536
- hash: "1d8013765ac2d3fe09ccaa6db098a208"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
}
Frame {
msec: 3552
- hash: "1d8013765ac2d3fe09ccaa6db098a208"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
}
Frame {
msec: 3568
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
}
Frame {
msec: 3584
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
}
Frame {
msec: 3600
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
}
Frame {
msec: 3616
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "8c5a14a76e052cc6503a3e78245d1da3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 224; y: 206
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3632
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "f5e176355468f4fa224d4dfcdd7525a3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 232; y: 204
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3648
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "acf538fce5f1b90b83474d9898b7cdd7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 246; y: 203
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3664
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "5a0ee016b8732fbc36064e8a35d91215"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 265; y: 203
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3680
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "8fd06a14c1de175813845ce8f07db6ec"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 292; y: 201
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3696
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "26b0ff6ffda0725e0800f7ea3af510ef"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 310; y: 201
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3712
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "80443f134511be0356a687c9b542b3e7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 321; y: 199
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3728
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "3eeb98a829d29b3dc52f3d145ac49d58"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 323; y: 199
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3744
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "f4d43069b16f41a30e5549aae911d4cd"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 324; y: 199
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3760
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "661c89fa832f0abdcf4ae0c9e8e2d18f"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 324; y: 199
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3776
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "661c89fa832f0abdcf4ae0c9e8e2d18f"
}
Frame {
msec: 3792
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "1520f54b6c8606b9e8372c5c06180453"
}
Frame {
msec: 3808
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "0fcf5e2ce47348cbb5bb485f101fe5ac"
}
Frame {
msec: 3824
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "2eb070e69de07c89830543e0475fc110"
}
Frame {
msec: 3840
- image: "flickable-horizontal.3.png"
+ hash: "d73c1059219c0655968af268d22e2c18"
}
Frame {
msec: 3856
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ image: "flickable-horizontal.4.png"
}
Frame {
msec: 3872
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "cc969b2c64839ca6d3b5069c0ed938d0"
}
Frame {
msec: 3888
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "1f819e18d1297a1c7eeebb7b040bdef8"
}
Frame {
msec: 3904
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "3643b99afbd8af0953cb39b2c8c04b9f"
}
Frame {
msec: 3920
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "713fd2e2fa38ab27604cb9cae59f1777"
}
Frame {
msec: 3936
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "e2508faec7737be2666d87ad715b5f74"
}
Frame {
msec: 3952
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "fc33b1c7479caeff676ffd885a18d618"
}
Frame {
msec: 3968
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "aca01143db4f870a56bb7546e84cbc5e"
}
Frame {
msec: 3984
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "442b58c39fd3745c61a1eb5043fcbb53"
}
Frame {
msec: 4000
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "7983d7183cc11d6819fa0a006c2d67b4"
}
Frame {
msec: 4016
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "9fe4e897c6b853f774d11817a0eb53bf"
}
Frame {
msec: 4032
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "43f528c81ccfa5b9921dfa3564a24c68"
}
Frame {
msec: 4048
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "dfe04ff0b3ccf205bb38beeab58a4411"
}
Frame {
msec: 4064
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "32ff30b50b500e9feb51e8eef205783c"
}
Frame {
msec: 4080
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "7d83ab4c336b05bcf2cde4e7d8031f6c"
}
Frame {
msec: 4096
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "c92e345e4ffdb30c28d9d5aa5400bd30"
}
Frame {
msec: 4112
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "02eec604d0c00965aae4ac61b91bdc22"
}
Frame {
msec: 4128
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "df447575a4734bb5bd9badc6e27d98e4"
}
Frame {
msec: 4144
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "bac10d8f94a39573313b3b8b2f871c49"
}
Frame {
msec: 4160
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
- }
- Key {
- type: 6
- key: 16777249
- modifiers: 67108864
- text: ""
- autorep: false
- count: 1
+ hash: "e5944c5dc6dec8f0c28b7ec3cd58723d"
}
Frame {
msec: 4176
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "1991cbb0fb053937f922731d5716032c"
}
Frame {
msec: 4192
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "50d6538bcaffc343f6626635a3e5899c"
}
Frame {
msec: 4208
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "f3613f57cdb9ed38d8e3fa636962aa99"
}
Frame {
msec: 4224
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "10a89da9887cb4bbd812c090a8a56797"
}
Frame {
msec: 4240
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "89ba74d46970ad2edff701475c059ec8"
}
Frame {
msec: 4256
- hash: "0fa60818532d1e5c20cd82ce3d61e3f7"
+ hash: "6e8b84c70e81578a2216e9e975b35434"
+ }
+ Frame {
+ msec: 4272
+ hash: "6e8b84c70e81578a2216e9e975b35434"
+ }
+ Frame {
+ msec: 4288
+ hash: "883b8b180853f1f432ae98ddfe1b6ce3"
+ }
+ Frame {
+ msec: 4304
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4320
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4336
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4352
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4368
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4384
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4400
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4416
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4432
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4448
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4464
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4480
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4496
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4512
+ hash: "e616110d39009f0d636b816828cc0ccb"
+ }
+ Frame {
+ msec: 4528
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4544
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4560
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4576
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4592
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4608
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4624
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4640
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4656
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4672
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4688
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
+ }
+ Frame {
+ msec: 4704
+ hash: "244c12e82ee0b2528a0dbb02a8b8134a"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png
index 18fef53..2af1a3e 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png
index 18fef53..8334a3f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png
deleted file mode 100644
index b352c68..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png
deleted file mode 100644
index ce7ee68..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png
deleted file mode 100644
index d8cdacf..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png
deleted file mode 100644
index 0c2fa7b..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png
deleted file mode 100644
index e9b3028..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png
deleted file mode 100644
index 2186a8b..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png
deleted file mode 100644
index b4590af..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png
deleted file mode 100644
index fe29f19..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png
deleted file mode 100644
index fe29f19..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png
deleted file mode 100644
index 4f8587f..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png
index 0a7cc03..c705849 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png
deleted file mode 100644
index 4f8587f..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png
deleted file mode 100644
index c0b0bdf..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png
deleted file mode 100644
index 4168c3b..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png
deleted file mode 100644
index 18fef53..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png
deleted file mode 100644
index e69de29..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png
+++ /dev/null
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png
index fc6669d..c705849 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png
index c0b0bdf..349dca2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png
index 2ffa96e..a0e84e3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png
index f550b89..e5c1583 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png
index f550b89..2af1a3e 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png
index f550b89..06468e4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png
deleted file mode 100644
index f550b89..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml
index a5ca451..8c746bf 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml
@@ -6,625 +6,789 @@ VisualTest {
}
Frame {
msec: 16
- hash: "8443c45791c906a9fe23831844f48a1c"
+ image: "flickable-vertical.0.png"
}
Frame {
msec: 32
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 48
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 64
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 80
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 96
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 112
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 128
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 144
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 160
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 176
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 192
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 208
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 224
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 240
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 256
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 272
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
msec: 288
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 159; y: 207
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 304
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "3d1b648229210ae5b57a0be51cc02f67"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 206
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 320
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "3d1b648229210ae5b57a0be51cc02f67"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 203
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 336
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "3d1b648229210ae5b57a0be51cc02f67"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 159; y: 199
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 190
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 352
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 176
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 158
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 368
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "57fa1d842d37df12004b493c1c5761f3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 141
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 148; y: 118
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 384
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "521a8188877551a97cd3ea82d209e8ae"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 146; y: 94
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 141; y: 70
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 400
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "ce126aaade1532e22a35416fd7203dde"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 136; y: 46
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 136; y: 46
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 416
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "aa9c4301332240ccc00ec99a05b7f9c9"
}
Frame {
msec: 432
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "db0a670d61133a3420a3581ecb532773"
}
Frame {
msec: 448
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "b34de164d5ec0294ca27281e1e5e3cd6"
}
Frame {
msec: 464
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "8636af4591c61c4b4a548f3a38749413"
}
Frame {
msec: 480
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "eee4fa336149528dfb16565b856ca692"
}
Frame {
msec: 496
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "85eeaeaf359ed87417be68dc18c06d0c"
}
Frame {
msec: 512
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "d5db4af6cf35c61146bd24646d82ab83"
}
Frame {
msec: 528
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "2189fc03c337fe41f3d9f51929c9860f"
}
Frame {
msec: 544
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4e3e283fb402dc4ec79f65878a513747"
}
Frame {
msec: 560
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "62f4281d8e049bc12b636b7ebe3862df"
}
Frame {
msec: 576
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "cf9a0a968459a1283fff91102eb29ba3"
}
Frame {
msec: 592
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "c432221928096cff3b76c8034db26b43"
}
Frame {
msec: 608
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "3df59808e56955c3c161609b72d93c7f"
}
Frame {
msec: 624
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "c497bcbe500905b8a69fd310fd7c7e1a"
}
Frame {
msec: 640
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "7dceef52fab6dc38d140e3097e39a271"
}
Frame {
msec: 656
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "c7bbd81b452db98fb8fd892762a23df6"
}
Frame {
msec: 672
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "17efc9793ef2966722544d561312b17a"
}
Frame {
msec: 688
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "1bf05b272ad6b8e5d134c94d9ba62030"
}
Frame {
msec: 704
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "cad61ba68fdfb26cfb136f22a2f8cc0c"
}
Frame {
msec: 720
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "0ce5ff1a1d9a6193ef763affa39cb790"
}
Frame {
msec: 736
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "880bce9130454aaf1261842b8f9b9a57"
}
Frame {
msec: 752
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "ab78cadac88156d9755d8b70d26384e8"
}
Frame {
msec: 768
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4a22e502c105a7df0845ca75cbdfb0ec"
}
Frame {
msec: 784
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "d6209a0b9b9e0f2072179a4623c70fbd"
}
Frame {
msec: 800
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "85e85567831cf57df1f013f5bf3beb86"
}
Frame {
msec: 816
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "602d2e02029178faeb99748e2f70827e"
}
Frame {
msec: 832
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "fd4dbb6f47f6681af98eb6781ae7de58"
}
Frame {
msec: 848
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "faf3be40e402768724703f5d0051249f"
}
Frame {
msec: 864
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bc650ca5b7a3bdc1f0f051b9481faf29"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 109; y: 69
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 880
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bc650ca5b7a3bdc1f0f051b9481faf29"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 70
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 71
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 896
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bc650ca5b7a3bdc1f0f051b9481faf29"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 110; y: 74
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 79
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 912
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "f2a679f2b7585245d4f1896fed4e0d1e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 111; y: 89
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 113; y: 104
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 928
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "721b5fa42f583c1e1e1a751fc8aad270"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 115; y: 119
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 115; y: 135
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 944
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "7e3ddefca9a99d6b9103ffd4524bc593"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 120; y: 183
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 960
- image: "flickable-vertical.0.png"
+ hash: "7858d23cb4c206676eca51c1c09802b5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 122; y: 205
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 230
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 124; y: 230
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 976
- hash: "8443c45791c906a9fe23831844f48a1c"
+ image: "flickable-vertical.1.png"
}
Frame {
msec: 992
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "e723da5ecaffe31f03b1d5ca6765229b"
}
Frame {
msec: 1008
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "73d169bf6bdfce801b824b7b560c3fad"
}
Frame {
msec: 1024
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4e3e283fb402dc4ec79f65878a513747"
}
Frame {
msec: 1040
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "38c2e2835c20dbee55c69d0211a0be2d"
}
Frame {
msec: 1056
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "84e668ba374ff0004dd7222933a635cf"
}
Frame {
msec: 1072
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "349c7a84ff8f9b52d39dba1282353167"
}
Frame {
msec: 1088
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "b63218110c65b6d7b4bc2d63155204cd"
}
Frame {
msec: 1104
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "aad65a7070aa668dd8ce4a3cc0f0f117"
}
Frame {
msec: 1120
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "c4ae97e1d1f2efbc998f9b57c2373201"
}
Frame {
msec: 1136
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "94701ffaa4f45924ad89f92a30157c7d"
}
Frame {
msec: 1152
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "eee4fa336149528dfb16565b856ca692"
}
Frame {
msec: 1168
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "ff1a053c0af99c51353503002515843d"
}
Frame {
msec: 1184
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "118494c60034b0e265e28b34e3128d00"
}
Frame {
msec: 1200
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "bf693bffb37d7554a437eca21bdec7c1"
}
Frame {
msec: 1216
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "880f60263cd79fb6a1bff7252d2373bb"
}
Frame {
msec: 1232
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "b34de164d5ec0294ca27281e1e5e3cd6"
}
Frame {
msec: 1248
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "e1609c4e40fb9e043a9fff683b94c6c4"
}
Frame {
msec: 1264
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "2450b61b84c24727232c779114e6a474"
}
Frame {
msec: 1280
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "cf5ac4a5e3d42b3d4e171ed3227cfa85"
}
Frame {
msec: 1296
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "5cb5576ab347647ca881d4d450732df3"
}
Frame {
msec: 1312
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "34dc672ebfd75ec017d0c2f0bd435cd8"
}
Frame {
msec: 1328
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "aa9c4301332240ccc00ec99a05b7f9c9"
}
Frame {
msec: 1344
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "3f98121997a1613bd49d22003d1a1887"
}
Frame {
msec: 1360
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "86732d3e900877ae7a8615b7448afaaa"
}
Frame {
msec: 1376
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "7e2f2786d3c0540a0b6559fffe06ad3c"
}
Frame {
msec: 1392
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "79e00bbe77f0a178e8db30023a881c3f"
}
Frame {
msec: 1408
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "5f611226b3aa38f9aa3cd6a2dbd01f12"
}
Frame {
msec: 1424
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4f4cd776b76272cfe79b86a108bd6b6e"
}
Frame {
msec: 1440
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "a746404a1a26e2a25b8d364dbef46eef"
}
Frame {
msec: 1456
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "9124d97d120de1806d86c8f437ec4ed2"
}
Frame {
msec: 1472
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4fda328eafe6ec2d02d939517d6d82e3"
}
Frame {
msec: 1488
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "6afb6abe291c9e9628fd0b8c3da5d9db"
}
Frame {
msec: 1504
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "cb5962fe94c5d3ef754ff45f905a5c88"
}
Frame {
msec: 1520
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "57b5fc47ed700831b3dc3f2afbb1c3ed"
}
Frame {
msec: 1536
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "38793fb8a19c9566c8dd9d23c9a15b5d"
}
Frame {
msec: 1552
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "2e311a5dc484e9f4bc7bd85d32a693b1"
}
Frame {
msec: 1568
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "69d1eed68fba918e831899c8b84374a1"
}
Frame {
msec: 1584
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "c872391012e6ab2a6d1eb98c7f47f9e8"
}
Frame {
msec: 1600
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "cf12f90835d823550cd83d472b4f022f"
}
Frame {
msec: 1616
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "fbb2f03ddbd87ed419386eb2942bccac"
}
Frame {
msec: 1632
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "0788a0fdb51cedba0f8b597a4cc38ebe"
}
Frame {
msec: 1648
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "b6595edf06fba22f3258c9b433af6ab8"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 44; y: 282
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1664
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "521a8188877551a97cd3ea82d209e8ae"
}
Frame {
msec: 1680
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "4d923cd520c00f5cd985283d62cf17ec"
}
Frame {
msec: 1696
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "7ccff14d344c7090fa634f6defd6511e"
}
Frame {
msec: 1712
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 44; y: 282
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1728
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1744
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1760
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1776
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1792
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1808
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1824
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1840
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1856
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1872
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1888
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1904
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1920
- image: "flickable-vertical.1.png"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1936
- hash: "8443c45791c906a9fe23831844f48a1c"
+ image: "flickable-vertical.2.png"
}
Frame {
msec: 1952
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1968
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 1984
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 2000
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 2016
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 2032
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 2048
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
msec: 2064
- hash: "8443c45791c906a9fe23831844f48a1c"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
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"
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 143; y: 387
+ x: 95; y: 222
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 2384
- hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 144; y: 386
+ x: 95; y: 221
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2400
- hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
+ msec: 2096
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 145; y: 386
+ x: 95; y: 220
modifiers: 0
sendToViewport: true
}
@@ -632,43 +796,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 147; y: 380
+ x: 95; y: 218
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2416
- hash: "a21e65718bc7a0cdcbeb058d0cbd2977"
+ msec: 2112
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 151; y: 372
+ x: 95; y: 216
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 2432
- hash: "90d9c65705a006741671657d00ab9dba"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 159; y: 346
+ x: 95; y: 212
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2448
- hash: "8c6301fb7409a22fda85072d48e838c8"
+ msec: 2128
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 161; y: 328
+ x: 96; y: 205
modifiers: 0
sendToViewport: true
}
@@ -676,763 +836,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 161; y: 304
+ x: 96; y: 195
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2464
- hash: "f5121fd6b0f20844d13cd8625a1a5047"
+ msec: 2144
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
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
+ x: 97; y: 184
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 5296
- hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 173; y: 86
+ x: 97; y: 168
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 5312
- hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
+ msec: 2160
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 173; y: 89
+ x: 99; y: 153
modifiers: 0
sendToViewport: true
}
@@ -1440,19 +876,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 173; y: 101
+ x: 99; y: 139
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 5328
- hash: "0031f6edee383e97a3a31fe4268ff778"
+ msec: 2176
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 175; y: 117
+ x: 101; y: 125
modifiers: 0
sendToViewport: true
}
@@ -1460,51 +896,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 179; y: 137
+ x: 101; y: 112
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 5344
- hash: "e594c62fe10165ae08e3dd8b33b9f584"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 183; y: 159
- modifiers: 0
- sendToViewport: true
+ msec: 2192
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 183
+ x: 101; y: 99
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 5360
- hash: "dd61c97aafee69eb7c54a47dceea5810"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 207
+ x: 101; y: 85
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 5376
- hash: "29d06473d4aac07c89041b4413ce421f"
+ msec: 2208
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 227
+ x: 103; y: 75
modifiers: 0
sendToViewport: true
}
@@ -1512,567 +936,163 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 185; y: 243
+ x: 103; y: 62
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 5392
- hash: "7843b1bdb9efdbee0e6dd39ef8f1078a"
+ msec: 2224
+ hash: "888c68103c4eef2f65ef32a93be8286a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 253
+ x: 103; y: 53
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
+ type: 5
+ button: 0
buttons: 1
- x: 31; y: 575
+ x: 103; y: 45
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
+ x: 103; y: 45
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"
+ msec: 2240
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7008
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2256
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7024
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2272
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7040
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2288
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7056
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2304
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7072
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2320
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7088
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2336
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7104
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2352
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7120
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2368
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7136
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2384
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7152
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2400
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7168
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2416
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7184
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2432
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7200
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2448
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7216
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2464
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7232
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2480
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7248
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2496
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7264
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2512
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 7280
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2528
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 156; y: 403
+ x: 90; y: 38
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7296
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ msec: 2544
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 156; y: 402
+ x: 90; y: 39
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 2560
+ hash: "0d3bac7463b5fe7f585997e35f179122"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 158; y: 396
+ x: 90; y: 40
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7312
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 158; y: 386
+ x: 90; y: 41
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7328
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ msec: 2576
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 158; y: 376
+ x: 91; y: 43
modifiers: 0
sendToViewport: true
}
@@ -2080,19 +1100,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 158; y: 360
+ x: 91; y: 46
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7344
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ msec: 2592
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 158; y: 344
+ x: 92; y: 50
modifiers: 0
sendToViewport: true
}
@@ -2100,19 +1120,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 160; y: 322
+ x: 92; y: 55
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7360
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ msec: 2608
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 164; y: 298
+ x: 94; y: 65
modifiers: 0
sendToViewport: true
}
@@ -2120,195 +1140,59 @@ VisualTest {
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
+ x: 96; y: 79
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7824
- hash: "16eef219cc7d4e7589ea59ebc349973c"
- }
- Frame {
- msec: 7840
- hash: "16eef219cc7d4e7589ea59ebc349973c"
+ msec: 2624
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 154; y: 162
+ x: 97; y: 95
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7856
- hash: "16eef219cc7d4e7589ea59ebc349973c"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 154; y: 164
+ x: 99; y: 112
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 2640
+ hash: "0d3bac7463b5fe7f585997e35f179122"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 154; y: 167
+ x: 101; y: 129
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7872
- hash: "16eef219cc7d4e7589ea59ebc349973c"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 154; y: 177
+ x: 103; y: 148
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7888
- hash: "16eef219cc7d4e7589ea59ebc349973c"
+ msec: 2656
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 150; y: 189
+ x: 105; y: 165
modifiers: 0
sendToViewport: true
}
@@ -2316,19 +1200,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 146; y: 207
+ x: 105; y: 180
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7904
- hash: "16eef219cc7d4e7589ea59ebc349973c"
+ msec: 2672
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 144; y: 229
+ x: 107; y: 192
modifiers: 0
sendToViewport: true
}
@@ -2336,19 +1220,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 140; y: 255
+ x: 109; y: 205
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7920
- hash: "16eef219cc7d4e7589ea59ebc349973c"
+ msec: 2688
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 134; y: 281
+ x: 109; y: 219
modifiers: 0
sendToViewport: true
}
@@ -2356,39 +1240,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 132; y: 313
+ x: 109; y: 230
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 7936
- hash: "16eef219cc7d4e7589ea59ebc349973c"
+ msec: 2704
+ hash: "0d3bac7463b5fe7f585997e35f179122"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 128; y: 343
+ x: 111; y: 235
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 7952
- hash: "16eef219cc7d4e7589ea59ebc349973c"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 126; y: 373
+ x: 111; y: 238
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 2720
+ hash: "0d3bac7463b5fe7f585997e35f179122"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 126; y: 397
+ x: 111; y: 240
modifiers: 0
sendToViewport: true
}
@@ -2396,499 +1280,355 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 126; y: 397
+ x: 111; y: 240
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"
+ msec: 2736
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8352
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2752
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8368
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2768
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8384
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2784
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8400
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2800
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8416
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2816
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8432
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2832
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8448
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2848
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8464
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2864
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8480
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2880
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8496
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2896
+ image: "flickable-vertical.3.png"
}
Frame {
- msec: 8512
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2912
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8528
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2928
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8544
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2944
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8560
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2960
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8576
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2976
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8592
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 2992
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8608
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3008
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8624
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3024
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8640
- image: "flickable-vertical.8.png"
+ msec: 3040
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8656
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3056
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8672
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3072
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8688
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3088
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8704
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3104
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8720
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3120
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8736
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3136
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
- Frame {
- msec: 8752
- hash: "679369b924d719ae309a45034bdba40d"
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 43; y: 269
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 8768
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3152
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8784
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3168
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8800
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3184
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8816
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3200
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8832
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3216
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
- Frame {
- msec: 8848
- hash: "679369b924d719ae309a45034bdba40d"
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 43; y: 269
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 8864
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3232
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8880
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3248
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8896
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3264
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8912
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3280
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8928
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3296
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8944
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3312
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8960
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3328
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8976
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3344
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 8992
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3360
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9008
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3376
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9024
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3392
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9040
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3408
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9056
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3424
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9072
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3440
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9088
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3456
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9104
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3472
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 44; y: 574
+ x: 75; y: 279
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 9120
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3488
+ hash: "998cb23307a61afefb59c8b9e361a89f"
+ }
+ Frame {
+ msec: 3504
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9136
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3520
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9152
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3536
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 44; y: 574
+ x: 75; y: 279
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"
+ msec: 3552
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9424
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3568
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9440
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3584
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9456
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3600
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9472
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3616
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9488
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3632
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9504
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3648
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9520
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3664
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9536
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3680
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9552
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3696
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9568
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3712
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9584
- hash: "679369b924d719ae309a45034bdba40d"
+ msec: 3728
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Frame {
- msec: 9600
- image: "flickable-vertical.9.png"
+ msec: 3744
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 152; y: 444
+ x: 116; y: 200
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 9616
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
+ msec: 3760
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 152; y: 442
+ x: 116; y: 199
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 9632
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 152; y: 440
+ x: 117; y: 198
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 3776
+ hash: "998cb23307a61afefb59c8b9e361a89f"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 152; y: 438
+ x: 117; y: 195
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 9648
- hash: "843453070c3ac1bf26cfd84d3ab151eb"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 154; y: 429
+ x: 117; y: 190
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 9664
- hash: "3b0e0ed925b1c197cd94afd3d1a6d572"
+ msec: 3792
+ hash: "998cb23307a61afefb59c8b9e361a89f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 156; y: 421
+ x: 118; y: 183
modifiers: 0
sendToViewport: true
}
@@ -2896,631 +1636,299 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 158; y: 413
+ x: 120; y: 166
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 9680
- hash: "d7b3838ee1219816b76224c29c7ba2e1"
+ msec: 3808
+ hash: "2e311a5dc484e9f4bc7bd85d32a693b1"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 160; y: 403
+ x: 122; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 123
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 9696
- hash: "9835b420f0c40a03f8f9fafe39e209f1"
+ msec: 3824
+ hash: "cbfcb7b986b0c51828473d98ca9fee03"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 162; y: 393
+ x: 126; y: 94
modifiers: 0
sendToViewport: true
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 162; y: 393
+ type: 5
+ button: 0
+ buttons: 1
+ x: 128; y: 67
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"
+ msec: 3840
+ hash: "389b514c4cd4a4d65388608643d08c04"
}
- Frame {
- msec: 10880
- hash: "28a06534a2e35250c67112dfb6c05095"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 130; y: 41
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 98; y: 573
+ x: 133; y: 15
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 10896
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3856
+ image: "flickable-vertical.4.png"
}
- Frame {
- msec: 10912
- hash: "28a06534a2e35250c67112dfb6c05095"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 135; y: -6
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 10928
- hash: "28a06534a2e35250c67112dfb6c05095"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 138; y: -27
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 10944
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3872
+ hash: "cf9a0a968459a1283fff91102eb29ba3"
}
- Frame {
- msec: 10960
- hash: "28a06534a2e35250c67112dfb6c05095"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 140; y: -48
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 98; y: 573
+ x: 140; y: -48
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"
+ msec: 3888
+ hash: "77c86fb26126825cfd5b6ba21b903808"
}
Frame {
- msec: 11216
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3904
+ hash: "c497bcbe500905b8a69fd310fd7c7e1a"
}
Frame {
- msec: 11232
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3920
+ hash: "95bffb4d4aff1603e96af55cbc2dc3f2"
}
Frame {
- msec: 11248
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3936
+ hash: "6fa87a7136528b688069fe1c4bd94043"
}
Frame {
- msec: 11264
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3952
+ hash: "602c16e1382d810f853d647e531b4e8a"
}
Frame {
- msec: 11280
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3968
+ hash: "01d1227e4f5b95f8b0c6a57a4b2314c4"
}
Frame {
- msec: 11296
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 3984
+ hash: "1db6401af45574b7453ad57766e60e6f"
}
Frame {
- msec: 11312
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4000
+ hash: "067a1bef3df5d1c40842f28885d60250"
}
Frame {
- msec: 11328
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4016
+ hash: "5fba31051e05ec00c0d68b8e8af94132"
}
Frame {
- msec: 11344
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4032
+ hash: "d6209a0b9b9e0f2072179a4623c70fbd"
}
Frame {
- msec: 11360
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4048
+ hash: "ec30f07ab0056a45954c07ecdfa1401a"
}
Frame {
- msec: 11376
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4064
+ hash: "fef6c7767970a283bb3b13826f71bdac"
}
Frame {
- msec: 11392
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4080
+ hash: "29621938e96be0d11c95fd1e4ca37631"
}
Frame {
- msec: 11408
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4096
+ hash: "8103c96ac90ddf52056d7e8b32e4ae9e"
}
Frame {
- msec: 11424
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4112
+ hash: "d72bf8b88efe603050ad038380173969"
}
Frame {
- msec: 11440
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4128
+ hash: "4438b56eb6aa800602634db6016caa50"
}
Frame {
- msec: 11456
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4144
+ hash: "44674f7a874023c3932d698344ccda0e"
}
Frame {
- msec: 11472
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4160
+ hash: "155a834ddaa7128b6f5a2a406b340315"
}
Frame {
- msec: 11488
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4176
+ hash: "3886efa510581ee5b6c4a2ed76aeb42d"
}
Frame {
- msec: 11504
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4192
+ hash: "094954e8d10b85d3941626dec4fb36af"
}
Frame {
- msec: 11520
- image: "flickable-vertical.11.png"
+ msec: 4208
+ hash: "b597aeb20a8630e4b1dfd0a7be383e4d"
}
Frame {
- msec: 11536
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4224
+ hash: "abc58e74ab197a2d7c243ddd67442e53"
}
Frame {
- msec: 11552
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4240
+ hash: "b6ec106d39af13492c3d43bf006b7b15"
}
Frame {
- msec: 11568
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4256
+ hash: "d80211f898473a01e0c0641b96bc92f4"
}
Frame {
- msec: 11584
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4272
+ hash: "5010579fcd925e65c778c2e9cf0317de"
}
Frame {
- msec: 11600
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4288
+ hash: "5010579fcd925e65c778c2e9cf0317de"
}
Frame {
- msec: 11616
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4304
+ hash: "d80211f898473a01e0c0641b96bc92f4"
}
Frame {
- msec: 11632
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4320
+ hash: "27cfc811f62029df48ea7f371ff5654b"
}
Frame {
- msec: 11648
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4336
+ hash: "b6ec106d39af13492c3d43bf006b7b15"
}
Frame {
- msec: 11664
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4352
+ hash: "28c8e3f08f46bf13cc52a7d6a31a7cf1"
}
Frame {
- msec: 11680
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4368
+ hash: "b597aeb20a8630e4b1dfd0a7be383e4d"
}
Frame {
- msec: 11696
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4384
+ hash: "a3a3682ce0d2a2d57457458b13645afa"
}
Frame {
- msec: 11712
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4400
+ hash: "98bf25cbb8202fe1576ac15bac7b9e65"
}
Frame {
- msec: 11728
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4416
+ hash: "16b99c9cf5297a5251869a3935084cf7"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 170; y: 335
+ x: 136; y: 176
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11744
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4432
+ hash: "16b99c9cf5297a5251869a3935084cf7"
}
Frame {
- msec: 11760
- hash: "28a06534a2e35250c67112dfb6c05095"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 170; y: 336
- modifiers: 0
- sendToViewport: true
+ msec: 4448
+ hash: "16b99c9cf5297a5251869a3935084cf7"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 170; y: 338
+ x: 136; y: 175
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11776
- hash: "28a06534a2e35250c67112dfb6c05095"
+ msec: 4464
+ hash: "16b99c9cf5297a5251869a3935084cf7"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 170; y: 346
+ x: 136; y: 173
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 11792
- hash: "12040d4dd56848fc93d6390005045188"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 170; y: 359
+ x: 136; y: 168
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11808
- hash: "caa70db5f31eb607c2de39734a42796c"
+ msec: 4480
+ hash: "155a834ddaa7128b6f5a2a406b340315"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 168; y: 367
+ x: 134; y: 159
modifiers: 0
sendToViewport: true
}
@@ -3528,19 +1936,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 166; y: 379
+ x: 133; y: 142
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11824
- hash: "ca45ab832b5a8b041ba8bea1185a2b38"
+ msec: 4496
+ hash: "abc58e74ab197a2d7c243ddd67442e53"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 166; y: 393
+ x: 130; y: 119
modifiers: 0
sendToViewport: true
}
@@ -3548,387 +1956,223 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 164; y: 407
+ x: 128; y: 98
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11840
- hash: "188042b1a045dc96a65a7fc0e90568c3"
+ msec: 4512
+ hash: "e5c5b741da7c028ec77f52016675c1ca"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 164; y: 419
+ x: 126; y: 78
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 11856
- hash: "714a3cf591beeeddbdc2df94f5cedef1"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 164; y: 443
+ x: 124; y: 59
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11872
- hash: "e9978c24eef649d01cb2245f783cb562"
+ msec: 4528
+ hash: "12481bcccb524a478851a57d4db6cf8d"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 164; y: 461
+ x: 122; y: 44
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 11888
- hash: "bc8f32062afdfe33da7c99ee867bc2a3"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 166; y: 467
+ x: 120; y: 30
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 11904
- hash: "d788c09f4acba8197b2d8fef2e8ece51"
+ msec: 4544
+ hash: "a49985bd332cd3376986d379c474a3de"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 168; y: 470
+ x: 120; y: 21
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 11920
- hash: "b0a383eb416727c22451a30a997f48f1"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 169; y: 472
+ x: 118; y: 12
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
+ x: 118; y: 12
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"
+ msec: 4560
+ hash: "cd4e55b15e9df7fee1862180fddec0ca"
}
Frame {
- msec: 12272
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4576
+ hash: "64ff54775d198b616597f4539de90bd8"
}
Frame {
- msec: 12288
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4592
+ hash: "2b188745bfff51f9d3af90b7ad9c8d77"
}
Frame {
- msec: 12304
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4608
+ hash: "2dde7d565f92f22c6524448f97107e35"
}
Frame {
- msec: 12320
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4624
+ hash: "897a454ac464008d6dd7864eb608ae65"
}
Frame {
- msec: 12336
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4640
+ hash: "269df4f1aca4f0cdbd5c86c2e115bd3c"
}
Frame {
- msec: 12352
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4656
+ hash: "ec0ebdbd3f4665fba7f6a523a82a5071"
}
Frame {
- msec: 12368
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4672
+ hash: "c1ac6a385f580f23b3486c643d276e33"
}
Frame {
- msec: 12384
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4688
+ hash: "3de0d147a6a3c1382ec64a80996bb4f4"
}
Frame {
- msec: 12400
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4704
+ hash: "8db942b5909f63d4369ad5b29938ef49"
}
Frame {
- msec: 12416
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4720
+ hash: "f7840636f2d01c25be8e9c77230cca53"
}
Frame {
- msec: 12432
- hash: "6b81b365eb057ffa32d89e564bc92949"
+ msec: 4736
+ hash: "d315f82e175361fed83193ce550cb6e9"
}
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
+ x: 111; y: 67
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
+ msec: 4752
+ hash: "d315f82e175361fed83193ce550cb6e9"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 177; y: 423
+ x: 111; y: 70
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 12496
- hash: "7e760a017ab10fe920074405248d1473"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 177; y: 415
+ x: 111; y: 74
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12512
- hash: "eab43f1c2b6fb79aad578a164b8b7b28"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 181; y: 395
- modifiers: 0
- sendToViewport: true
+ msec: 4768
+ hash: "155a834ddaa7128b6f5a2a406b340315"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 183; y: 383
+ x: 111; y: 79
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 12528
- hash: "a5446ca4c6650ffc9812845bdb8db088"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 371
+ x: 112; y: 86
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12544
- hash: "71cb7dc7f9dbb9e17d7f44885ec71bdb"
+ msec: 4784
+ hash: "00b072a0adbfcd520d495ef6540f5680"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 357
+ x: 112; y: 95
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 12560
- hash: "ccf0908d968f658311a9787182de498a"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 329
+ x: 114; y: 105
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12576
- hash: "26b9c6379590bbda24d129bd4f19f7d3"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 187; y: 303
- modifiers: 0
- sendToViewport: true
+ msec: 4800
+ hash: "fb605e95988a6110384671e7f3f18ad8"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 293
+ x: 114; y: 115
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 12592
- hash: "6c88a02ffdffee6d615ddc6a11c1b698"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 283
+ x: 115; y: 126
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12608
- hash: "38175cb09b6e63353b478635b22dbb5b"
+ msec: 4816
+ image: "flickable-vertical.5.png"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 280
+ x: 115; y: 142
modifiers: 0
sendToViewport: true
}
@@ -3936,19 +2180,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 187; y: 277
+ x: 117; y: 159
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12624
- hash: "5084910bf204e8b688de31d4f9018a57"
+ msec: 4832
+ hash: "4d1eb644b592a693b13fe14377aeed97"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 275
+ x: 120; y: 180
modifiers: 0
sendToViewport: true
}
@@ -3956,19 +2200,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 187; y: 273
+ x: 122; y: 202
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 12640
- hash: "e984565312571ec144a1cd4cc11253e8"
+ msec: 4848
+ hash: "00eb1d3b016eb0220461074ce81b1aef"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 272
+ x: 127; y: 224
modifiers: 0
sendToViewport: true
}
@@ -3976,1067 +2220,455 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 187; y: 271
+ x: 129; y: 243
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
+ x: 129; y: 243
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"
+ msec: 4864
+ hash: "77c86fb26126825cfd5b6ba21b903808"
}
Frame {
- msec: 13040
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4880
+ hash: "e80f024bbdce0ceeae137e347abc95a4"
}
Frame {
- msec: 13056
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4896
+ hash: "bb189f39a836b9a2aa68f4535ed1d6fb"
}
Frame {
- msec: 13072
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4912
+ hash: "cf9a0a968459a1283fff91102eb29ba3"
}
Frame {
- msec: 13088
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4928
+ hash: "27130e7f6b853a287a7bdd8608628a4f"
}
Frame {
- msec: 13104
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4944
+ hash: "231c7b7078af00a36cfee3d5e43a4021"
}
Frame {
- msec: 13120
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4960
+ hash: "d8ffc8cc9cecc25cb9b4e7990fb7b8e7"
}
Frame {
- msec: 13136
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4976
+ hash: "fb5db5dafdb375132f1f1a461193bc60"
}
Frame {
- msec: 13152
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 4992
+ hash: "64100f9f102ffc9415e306c087547709"
}
Frame {
- msec: 13168
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5008
+ hash: "6960e5c4feb55043ff91934fc934734e"
}
Frame {
- msec: 13184
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5024
+ hash: "349c7a84ff8f9b52d39dba1282353167"
}
Frame {
- msec: 13200
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5040
+ hash: "bb41010df844312fc15bb5b42712619a"
}
Frame {
- msec: 13216
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5056
+ hash: "63a3e18670bb2a5e7edfe3b752c0a1b5"
}
Frame {
- msec: 13232
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5072
+ hash: "92b1d0fbadbefe9f122b14903a5e0ee9"
}
Frame {
- msec: 13248
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5088
+ hash: "6b979e1a4bc7226a89ffb97be2f08147"
}
Frame {
- msec: 13264
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5104
+ hash: "7b783908e0b10d329a7d3172f2302a85"
}
Frame {
- msec: 13280
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5120
+ hash: "41d5ef3390cfc0d806825fc0cd033be6"
}
Frame {
- msec: 13296
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5136
+ hash: "ff1a053c0af99c51353503002515843d"
}
Frame {
- msec: 13312
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5152
+ hash: "63b26ecde2a2a9ce36884191304352ed"
}
Frame {
- msec: 13328
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5168
+ hash: "bdcff2f9f2c376974211ea6ad5c4961f"
}
Frame {
- msec: 13344
- hash: "4b86de37ae9bc630a2f3440811087617"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 181; y: 242
- modifiers: 0
- sendToViewport: true
+ msec: 5184
+ hash: "00ffef1a1d4341ac1c7f43d493a9e826"
}
Frame {
- msec: 13360
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5200
+ hash: "65dcbb543656f65267c7d32dcd644e56"
}
Frame {
- msec: 13376
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5216
+ hash: "38b49419b7103d76da2b6d7101d63d88"
}
Frame {
- msec: 13392
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5232
+ hash: "de39f6bf64745054cbee30ddf306f641"
}
Frame {
- msec: 13408
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5248
+ hash: "d6b5ceca4aa48a7d4fd901d44c151b53"
}
Frame {
- msec: 13424
- hash: "4b86de37ae9bc630a2f3440811087617"
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 181; y: 242
- modifiers: 0
- sendToViewport: true
+ msec: 5264
+ hash: "876e6eee8a35c34e2dd5269f86a9ab3a"
}
Frame {
- msec: 13440
- image: "flickable-vertical.13.png"
+ msec: 5280
+ hash: "f94219306eac2e678881d0b607d15a1e"
}
Frame {
- msec: 13456
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5296
+ hash: "c9184196ef45c985f08f80435492641d"
}
Frame {
- msec: 13472
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5312
+ hash: "34dc672ebfd75ec017d0c2f0bd435cd8"
}
Frame {
- msec: 13488
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5328
+ hash: "4daf1c730fdf13e0a87b28208f2b6dd1"
}
Frame {
- msec: 13504
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5344
+ hash: "c28d5d7d9d3a86e5bbf6ad48331f9c61"
}
Frame {
- msec: 13520
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5360
+ hash: "3f98121997a1613bd49d22003d1a1887"
}
Frame {
- msec: 13536
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5376
+ hash: "86732d3e900877ae7a8615b7448afaaa"
}
Frame {
- msec: 13552
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5392
+ hash: "9f3da7ebaeb319c9fec0abdd6bd76ee2"
}
Frame {
- msec: 13568
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5408
+ hash: "326563c2c812a74c7f1fa5e9da0c2369"
}
Frame {
- msec: 13584
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5424
+ hash: "79e00bbe77f0a178e8db30023a881c3f"
}
Frame {
- msec: 13600
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5440
+ hash: "e624204566550e928ab2a2c54113d217"
}
Frame {
- msec: 13616
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5456
+ hash: "b95bf705b81544b05f560c54dec56ff1"
}
Frame {
- msec: 13632
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5472
+ hash: "4f4cd776b76272cfe79b86a108bd6b6e"
}
Frame {
- msec: 13648
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5488
+ hash: "ec2eb1b39a252bd9b37d12ede3d231ce"
}
Frame {
- msec: 13664
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5504
+ hash: "a746404a1a26e2a25b8d364dbef46eef"
}
Frame {
- msec: 13680
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5520
+ hash: "17d190465ee0d348d9b67a748626d99e"
}
Frame {
- msec: 13696
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5536
+ hash: "9124d97d120de1806d86c8f437ec4ed2"
}
Frame {
- msec: 13712
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5552
+ hash: "ea746de2380835d299c56bb01f0aa83c"
}
Frame {
- msec: 13728
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5568
+ hash: "4fda328eafe6ec2d02d939517d6d82e3"
}
Frame {
- msec: 13744
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5584
+ hash: "9c6f671def0b1f5d780024a9dad439e6"
}
Frame {
- msec: 13760
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5600
+ hash: "b7d441d0bb27ed6d1984f324b6e02548"
}
Frame {
- msec: 13776
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5616
+ hash: "3042a62a1125171d9530b696f4b36e19"
}
Frame {
- msec: 13792
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5632
+ hash: "4534f40cf6bb7f402d7252c474629664"
}
Frame {
- msec: 13808
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5648
+ hash: "cb5962fe94c5d3ef754ff45f905a5c88"
}
Frame {
- msec: 13824
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5664
+ hash: "b5a5f9f3aa0948f0bd8d9b4a3fceae50"
}
Frame {
- msec: 13840
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5680
+ hash: "2e0605899abb5725cf22561ec9293879"
}
Frame {
- msec: 13856
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5696
+ hash: "1f260f1d931326be7e398f7c87e44735"
}
Frame {
- msec: 13872
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5712
+ hash: "57b5fc47ed700831b3dc3f2afbb1c3ed"
}
Frame {
- msec: 13888
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5728
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 13904
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5744
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 13920
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5760
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 13936
- hash: "4b86de37ae9bc630a2f3440811087617"
+ msec: 5776
+ image: "flickable-vertical.6.png"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 181; y: 242
+ x: 102; y: 279
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"
+ msec: 5792
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15008
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 5808
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15024
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 5824
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15040
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 5840
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 181; y: 242
+ x: 102; y: 279
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"
+ msec: 5856
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15520
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5872
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15536
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5888
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15552
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5904
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15568
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5920
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15584
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5936
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15600
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5952
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15616
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5968
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15632
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 5984
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15648
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 6000
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15664
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 6016
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15680
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 6032
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15696
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 6048
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 15712
- hash: "e3069d9d3cbcd845b1e4763b0759dc38"
+ msec: 6064
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 192; y: 218
+ x: 148; y: 276
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"
+ msec: 6080
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16304
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6096
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16320
- image: "flickable-vertical.16.png"
+ msec: 6112
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16336
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6128
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16352
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6144
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
- Frame {
- msec: 16368
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 148; y: 276
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 16384
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6160
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16400
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6176
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16416
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6192
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16432
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6208
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16448
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6224
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16464
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6240
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16480
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6256
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16496
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6272
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16512
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6288
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16528
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6304
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16544
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6320
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16560
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6336
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16576
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6352
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16592
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6368
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Frame {
- msec: 16608
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6384
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
- Frame {
- msec: 16624
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 129; y: 101
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 16640
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6400
+ hash: "c18aeb6fb3914a0be2d34ff76249ed8e"
}
Frame {
- msec: 16656
- hash: "53a0e69fe4816e6eed0b4e795bf90e19"
+ msec: 6416
+ hash: "c18aeb6fb3914a0be2d34ff76249ed8e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 222
+ x: 129; y: 103
modifiers: 0
sendToViewport: true
}
@@ -5044,19 +2676,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 198; y: 224
+ x: 129; y: 105
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16672
- hash: "c30bea2a73a8b5af4565ef3996f29416"
+ msec: 6432
+ hash: "c18aeb6fb3914a0be2d34ff76249ed8e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 228
+ x: 130; y: 110
modifiers: 0
sendToViewport: true
}
@@ -5064,127 +2696,119 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 198; y: 230
+ x: 132; y: 123
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16688
- hash: "9612c176ec3ecf76a367728f451522a4"
+ msec: 6448
+ hash: "8b9167c04a8acc7f8ade258a3e58893b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 233
+ x: 132; y: 133
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16704
- hash: "24f6feeeb1ff82c8d4262f74e4656602"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 238
+ x: 134; y: 145
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16720
- hash: "5823b56f1e362fdfc216a82e2dcdec61"
+ msec: 6464
+ hash: "a5daa2f6c932fa38038639bdc8231c5d"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 241
+ x: 136; y: 159
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16736
- hash: "4ee243b91e847dabaceb21b5540c2a6d"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 245
+ x: 138; y: 172
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16752
- hash: "87f1dc2238577fc5be6b1bd941226f3e"
+ msec: 6480
+ hash: "f342612efcd5e0820b44bd788ec52d7a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 251
+ x: 138; y: 187
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16768
- hash: "480c6fcf1b3862a41a7225c35d8080c3"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 198; y: 256
+ x: 140; y: 203
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16784
- hash: "0ac819bd8e6ce19553bd954e466e7ac0"
+ msec: 6496
+ hash: "9a66e65c69ec833a36cce5cbd7d8257f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 199; y: 258
+ x: 140; y: 214
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16800
- hash: "0636dd7c4eb0b56697fb59fb46f47f9c"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 201; y: 267
+ x: 141; y: 224
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16816
- hash: "62f76f46857106010c2e862ed19baeea"
+ msec: 6512
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 276
+ x: 143; y: 235
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 143; y: 246
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16832
- hash: "26b9c6379590bbda24d129bd4f19f7d3"
+ msec: 6528
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 279
+ x: 143; y: 257
modifiers: 0
sendToViewport: true
}
@@ -5192,19 +2816,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 203; y: 280
+ x: 145; y: 269
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16848
- hash: "21baf0596553627c8e683a31c2e6d04f"
+ msec: 6544
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 281
+ x: 145; y: 278
modifiers: 0
sendToViewport: true
}
@@ -5212,991 +2836,355 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 203; y: 282
+ x: 145; y: 289
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16864
- hash: "036679da5def5e696361f2373172a3f4"
+ msec: 6560
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 283
+ x: 147; y: 299
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16880
- hash: "e3fc6101bc6cccf309b3df6b194820ea"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 285
+ x: 147; y: 308
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16896
- hash: "d9ee6d0a7455cfd724c1856549100756"
+ msec: 6576
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 286
+ x: 149; y: 316
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 16912
- hash: "caa70db5f31eb607c2de39734a42796c"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 287
+ x: 149; y: 318
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 16928
- hash: "e2dc88b454e69cf92d6887a2f0629a94"
- }
- Frame {
- msec: 16944
- hash: "e2dc88b454e69cf92d6887a2f0629a94"
+ msec: 6592
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 203; y: 288
+ x: 149; y: 320
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: 5
+ button: 0
+ buttons: 1
+ x: 149; y: 321
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
type: 3
button: 1
buttons: 0
- x: 203; y: 288
+ x: 149; y: 321
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"
+ msec: 6608
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18080
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6624
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18096
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6640
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18112
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6656
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18128
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6672
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18144
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6688
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18160
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6704
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18176
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6720
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18192
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6736
+ image: "flickable-vertical.7.png"
}
Frame {
- msec: 18208
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6752
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18224
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6768
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18240
- image: "flickable-vertical.18.png"
+ msec: 6784
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18256
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6800
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18272
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6816
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18288
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6832
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18304
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6848
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18320
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6864
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18336
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6880
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18352
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6896
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18368
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6912
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18384
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6928
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18400
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6944
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18416
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6960
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18432
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6976
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Frame {
- msec: 18448
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 6992
+ hash: "bca482a77823f03e8fb4170ee329fc0e"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 102; y: 575
+ x: 166; y: 191
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 18464
- hash: "fac8455a2707b04aabff25723375a78b"
- }
- Frame {
- msec: 18480
- hash: "fac8455a2707b04aabff25723375a78b"
- }
- Frame {
- msec: 18496
- hash: "fac8455a2707b04aabff25723375a78b"
+ msec: 7008
+ hash: "9ed65a21e4aaedf9c48a38324b3f5480"
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 102; y: 575
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 190
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
+ type: 5
+ button: 0
buttons: 1
- x: 164; y: 571
+ x: 167; y: 189
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 19280
- hash: "cce4177eb20b7aa43a7383a16c43f473"
- }
- Frame {
- msec: 19296
- hash: "cce4177eb20b7aa43a7383a16c43f473"
- }
- Frame {
- msec: 19312
- hash: "cce4177eb20b7aa43a7383a16c43f473"
- }
- Frame {
- msec: 19328
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ msec: 7024
+ hash: "9ed65a21e4aaedf9c48a38324b3f5480"
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 164; y: 571
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 188
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"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 185
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 20064
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ msec: 7040
+ hash: "9ed65a21e4aaedf9c48a38324b3f5480"
}
- Frame {
- msec: 20080
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 169; y: 183
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 20096
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 169; y: 179
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 20112
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ msec: 7056
+ hash: "c4925926f64b852ff6c8d07e1c70ead5"
}
- Frame {
- msec: 20128
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 172
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 20144
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 162
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 20160
- image: "flickable-vertical.20.png"
+ msec: 7072
+ hash: "da771cedad067b8f25c100613b6a14f2"
}
- Frame {
- msec: 20176
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 150
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 20192
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 167; y: 139
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 20208
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ msec: 7088
+ hash: "c8862bf76a431edc1cf04f4114fa859f"
}
- Frame {
- msec: 20224
- hash: "cce4177eb20b7aa43a7383a16c43f473"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 165; y: 125
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 170; y: 450
+ x: 163; y: 113
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 20240
- hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ msec: 7104
+ hash: "4d923cd520c00f5cd985283d62cf17ec"
}
- Frame {
- msec: 20256
- hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 103
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 170; y: 448
+ x: 160; y: 92
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 20272
- hash: "b8e7a053fc023be42ab5136f6e7305fd"
+ msec: 7120
+ hash: "76b0d1c77ba29bad836673b1b79de911"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 172; y: 438
+ x: 158; y: 80
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 20288
- hash: "40cf6e4567c796d6ad83778fb1959d8a"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 176; y: 410
+ x: 156; y: 66
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 20304
- hash: "9914584daf02407c1edc3b6a38b8302d"
+ msec: 7136
+ hash: "3f9c5686f0a9ef5ecf2b8338ef2e7933"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 176; y: 388
+ x: 154; y: 52
modifiers: 0
sendToViewport: true
}
@@ -6204,19 +3192,27 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 176; y: 366
+ x: 154; y: 38
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 20320
- hash: "5aff2316a5e34f5e15b7cb36257a3d72"
+ msec: 7152
+ hash: "799d83eedefa0a56f37a83404c59ad4f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 176; y: 342
+ x: 152; y: 27
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 150; y: 18
modifiers: 0
sendToViewport: true
}
@@ -6224,331 +3220,127 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 176; y: 342
+ x: 150; y: 18
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"
+ msec: 7168
+ hash: "d6b5ceca4aa48a7d4fd901d44c151b53"
}
Frame {
- msec: 21216
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7184
+ hash: "e1609c4e40fb9e043a9fff683b94c6c4"
}
Frame {
- msec: 21232
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7200
+ hash: "ea457fc4d4065d2ed0e9f6efc47a06ee"
}
Frame {
- msec: 21248
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7216
+ hash: "b7f4319aa9c21640a697ee89f162bb49"
}
Frame {
- msec: 21264
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7232
+ hash: "880f60263cd79fb6a1bff7252d2373bb"
}
Frame {
- msec: 21280
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7248
+ hash: "00ffef1a1d4341ac1c7f43d493a9e826"
}
Frame {
- msec: 21296
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7264
+ hash: "c949fe87ba91e08f26a1c4d90028513f"
}
Frame {
- msec: 21312
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7280
+ hash: "8636af4591c61c4b4a548f3a38749413"
}
Frame {
- msec: 21328
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7296
+ hash: "63b26ecde2a2a9ce36884191304352ed"
}
Frame {
- msec: 21344
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7312
+ hash: "843f7263f63442f0041bf2c1a6fae400"
}
Frame {
- msec: 21360
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7328
+ hash: "ff1a053c0af99c51353503002515843d"
}
Frame {
- msec: 21376
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7344
+ hash: "47aea3ac4ea935d43f731a258287c2e8"
}
Frame {
- msec: 21392
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7360
+ hash: "eee4fa336149528dfb16565b856ca692"
}
Frame {
- msec: 21408
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7376
+ hash: "bb94493c25c56c41e81ef1e390adf63d"
}
Frame {
- msec: 21424
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7392
+ hash: "2915f455a5e1e8c6b8cc78309c5e84d9"
}
Frame {
- msec: 21440
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7408
+ hash: "94701ffaa4f45924ad89f92a30157c7d"
}
Frame {
- msec: 21456
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7424
+ hash: "92fae8cf4b8d8404b26a31f995860b95"
}
Frame {
- msec: 21472
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7440
+ hash: "6b979e1a4bc7226a89ffb97be2f08147"
}
Frame {
- msec: 21488
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7456
+ hash: "dd94beeb0b4933a9ac2236a9abe630ff"
}
- Frame {
- msec: 21504
- hash: "a76f069dfcb1af0794999c34507e190e"
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 109; y: 172
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 21520
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7472
+ hash: "dd94beeb0b4933a9ac2236a9abe630ff"
}
Frame {
- msec: 21536
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7488
+ hash: "dd94beeb0b4933a9ac2236a9abe630ff"
}
- Frame {
- msec: 21552
- hash: "a76f069dfcb1af0794999c34507e190e"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 170
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 21568
- hash: "a76f069dfcb1af0794999c34507e190e"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 109; y: 168
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 21584
- hash: "a76f069dfcb1af0794999c34507e190e"
+ msec: 7504
+ hash: "dd94beeb0b4933a9ac2236a9abe630ff"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 197; y: 124
+ x: 109; y: 165
modifiers: 0
sendToViewport: true
}
@@ -6556,19 +3348,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 197; y: 132
+ x: 109; y: 152
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 21600
- hash: "06472b42bc00fcaf7f84cd4ac613bbd2"
+ msec: 7520
+ hash: "34c7ed1c072d84626a8a64f7db02f71d"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 197; y: 146
+ x: 109; y: 135
modifiers: 0
sendToViewport: true
}
@@ -6576,19 +3368,19 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 197; y: 164
+ x: 109; y: 116
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 21616
- hash: "463fce69afc3dec181425c9adaa3e77c"
+ msec: 7536
+ hash: "e723da5ecaffe31f03b1d5ca6765229b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 197; y: 190
+ x: 106; y: 91
modifiers: 0
sendToViewport: true
}
@@ -6596,31 +3388,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 195; y: 218
+ x: 104; y: 66
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 21632
- hash: "9af34ff618e277eafad32e0377ecc94b"
+ msec: 7552
+ hash: "a85128cae494abeb5d45ab8df0d127a6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 102; y: 42
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 187; y: 250
+ x: 100; y: 17
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 21648
- hash: "db4b2333630ccc4a7982361609a12837"
+ msec: 7568
+ hash: "3599a92966c27321e9f702f3428b9b00"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 183; y: 284
+ x: 100; y: -2
modifiers: 0
sendToViewport: true
}
@@ -6628,410 +3428,220 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 183; y: 284
+ x: 100; y: -2
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"
+ msec: 7584
+ hash: "067a1bef3df5d1c40842f28885d60250"
}
Frame {
- msec: 22432
- hash: "86502af668ed6336dce8fe329e3408a6"
+ msec: 7600
+ hash: "82f818ed44a191fb51e637b8068786dc"
}
Frame {
- msec: 22448
- hash: "2a79a6530a07f00810310117d00d28ed"
+ msec: 7616
+ hash: "f408f59707195549ba61f030a3f020cd"
}
Frame {
- msec: 22464
- hash: "94a5fce3e0c3b219e0d807bfcade11e8"
+ msec: 7632
+ hash: "66e79c8b2f8e3a57c3bc14935c5df7d1"
}
Frame {
- msec: 22480
- hash: "94a5fce3e0c3b219e0d807bfcade11e8"
+ msec: 7648
+ hash: "4341c6b7b0d2e8021b51cb1abab85e10"
}
Frame {
- msec: 22496
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7664
+ hash: "5ec8ee5ccecac1787b2f5e99268e810d"
}
Frame {
- msec: 22512
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7680
+ hash: "1fae7b735ff6e88abfb1423f8960da4f"
}
Frame {
- msec: 22528
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7696
+ image: "flickable-vertical.8.png"
}
Frame {
- msec: 22544
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7712
+ hash: "dce74ff07eb37c82a38b3e515f9a43f2"
}
Frame {
- msec: 22560
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7728
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22576
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7744
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22592
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7760
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22608
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7776
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22624
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7792
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22640
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7808
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22656
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7824
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22672
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7840
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22688
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7856
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22704
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7872
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22720
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7888
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22736
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7904
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22752
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7920
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22768
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7936
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22784
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7952
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22800
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7968
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22816
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 7984
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22832
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8000
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22848
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8016
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22864
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8032
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22880
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8048
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22896
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8064
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22912
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8080
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22928
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8096
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22944
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8112
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22960
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8128
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22976
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8144
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 22992
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8160
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23008
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8176
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23024
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8192
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23040
- image: "flickable-vertical.23.png"
+ msec: 8208
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23056
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8224
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23072
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8240
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23088
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8256
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23104
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8272
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23120
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8288
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23136
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8304
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23152
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8320
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23168
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8336
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23184
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8352
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23200
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8368
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23216
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8384
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23232
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8400
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
Frame {
- msec: 23248
- hash: "8443c45791c906a9fe23831844f48a1c"
+ msec: 8416
+ hash: "ba2c06129f17fde474427859d66ecd23"
}
- Frame {
- msec: 23264
- hash: "8443c45791c906a9fe23831844f48a1c
+}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml
index 5f43f95..1fd65d1 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml
@@ -2,7 +2,7 @@ import QtQuick 1.0
Rectangle {
color: "lightSteelBlue"
- width: 300; height: 600
+ width: 200; height: 300
ListModel {
id: list
@@ -24,7 +24,7 @@ Rectangle {
id: column
Repeater {
model: list
- Rectangle { width: 300; height: 200; color: mr.pressed ? "black" : dayColor
+ Rectangle { width: 200; height: 100; color: mr.pressed ? "black" : dayColor
MouseArea {
id: mr
anchors.fill: parent
@@ -85,6 +85,6 @@ Rectangle {
height: 50
x: 200
y: parent.height - 50
- color: blue
+ color: "blue"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.png
index 53a8b42..b3ae1bc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.png
index b7efe8c..0458d82 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.png
index aa6d147..0e01afc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.png
index 9d39713..b256bc2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.png
index 98e8817..8454ed2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.png
index a3f9d8f..177a0fe 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.6.png
new file mode 100644
index 0000000..a51cffe
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml
index d2d46e4..2d362a4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test-flipable.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "7e16e6360fc2e9db67dbf11d58042745"
+ image: "test-flipable.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "test-flipable.0.png"
+ hash: "c03406106847c03c73f5897e65690925"
}
Frame {
msec: 976
- hash: "7d1a0ff0eceb80ff64d828c34792a2d5"
+ image: "test-flipable.1.png"
}
Frame {
msec: 992
@@ -482,11 +482,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "test-flipable.1.png"
+ hash: "1e8348fbb51871dffe9543fca19bb452"
}
Frame {
msec: 1936
- hash: "ae4e35413e462221b8cb48dd0350f873"
+ image: "test-flipable.2.png"
}
Frame {
msec: 1952
@@ -722,11 +722,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "test-flipable.2.png"
+ hash: "373141f99bc88c40ead161502c9750e9"
}
Frame {
msec: 2896
- hash: "ae76d183491834e2b1d0371420d51ce5"
+ image: "test-flipable.3.png"
}
Frame {
msec: 2912
@@ -962,11 +962,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "test-flipable.3.png"
+ hash: "464a78e75e10b62773ab64af4fc4c7aa"
}
Frame {
msec: 3856
- hash: "e18635d7c6c5de361e7406c2db357aca"
+ image: "test-flipable.4.png"
}
Frame {
msec: 3872
@@ -1202,11 +1202,11 @@ VisualTest {
}
Frame {
msec: 4800
- image: "test-flipable.4.png"
+ hash: "03f17b2cd781f2ee0ae5664a0491166c"
}
Frame {
msec: 4816
- hash: "6e48e605ea1aed4028e02476328f182b"
+ image: "test-flipable.5.png"
}
Frame {
msec: 4832
@@ -1442,11 +1442,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "test-flipable.5.png"
+ hash: "73c06997014af4e008b546b53fe349fb"
}
Frame {
msec: 5776
- hash: "90fb4e4ba04ac32b52c10b3258431c04"
+ image: "test-flipable.6.png"
}
Frame {
msec: 5792
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.0.png
new file mode 100644
index 0000000..814cc89
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml
index d1a5ade..d211832 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "04382a80a203e1fe3d0d4944c9195e0b"
+ image: "test_flipable_resize.0.png"
}
Frame {
msec: 32
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png
index 6c82777..b053048 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png
index 07b1f7c..c675be7 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.10.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.10.png
new file mode 100644
index 0000000..c675be7
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.10.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png
index f2f08c0..9f605c3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png
index 08649f9..767d7a9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png
index f9c2f17..20146c9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png
index 52ec0bd..85fac89 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png
index 3fe25be..e522bae 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png
index 4cc12a6..f9192e4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png
index 2267f23..ad187bd 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png
index 6c82777..96c6325 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml
index 67aa10a..6f0352d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "c33447c78ea64452ec3cd1696fb502eb"
+ image: "gridview.0.png"
}
Frame {
msec: 32
@@ -122,27 +122,27 @@ VisualTest {
}
Frame {
msec: 448
- hash: "96ad89eafa7f99269518a192573af91b"
+ hash: "c33447c78ea64452ec3cd1696fb502eb"
}
Frame {
msec: 464
- hash: "735b00b968d0e2ea1f34cc0bdc028a8e"
+ hash: "159004854f8c07144034e1265cf6f44a"
}
Frame {
msec: 480
- hash: "ce37c8e15fbb1aea72aff9629683fa96"
+ hash: "a3f2471ef4ceac77a1c20ac327550d8d"
}
Frame {
msec: 496
- hash: "a3f2471ef4ceac77a1c20ac327550d8d"
+ hash: "1121efa0df5057387be08fced62fe9eb"
}
Frame {
msec: 512
- hash: "28f120bd3bda9552dbc8cc908409c67d"
+ hash: "67ad85cda0b8fb382cb536ef880f715b"
}
Frame {
msec: 528
- hash: "f21cf0ed746fa48e67dc90c70c5bbae8"
+ hash: "4de18d32c93ca5cd77cb45c8c4f3b4fc"
}
Key {
type: 7
@@ -154,19 +154,19 @@ VisualTest {
}
Frame {
msec: 544
- hash: "485d55730366b68e01582879f6970fa1"
+ hash: "de26f0243101d57f4acf42b256ad75f9"
}
Frame {
msec: 560
- hash: "700e53c78b28993dce5dafb4035f4760"
+ hash: "119ea359724d5f4ba1e1aa120cddf3ea"
}
Frame {
msec: 576
- hash: "1e538e175a5e402e2334cf354392e8a7"
+ hash: "65fbee28f9ea68a6f2736d75a65b3ee2"
}
Frame {
msec: 592
- hash: "0fbfba93eebaf05ae60067b365b6b4bc"
+ hash: "7b1893397b76b0c95094eeca1dd21446"
}
Frame {
msec: 608
@@ -206,31 +206,31 @@ VisualTest {
}
Frame {
msec: 720
- hash: "25e48099a8194ed2674651818d854c61"
+ hash: "7b1893397b76b0c95094eeca1dd21446"
}
Frame {
msec: 736
- hash: "b75d02dfc238ba2292306ca1421279c3"
+ hash: "6123118055b4d0678eb2b7cdf8b12592"
}
Frame {
msec: 752
- hash: "7e48b7d9c1291b4e438c81f44228d8ad"
+ hash: "fe4b009abe081a6eaeab6ef9e996f3fd"
}
Frame {
msec: 768
- hash: "fe4b009abe081a6eaeab6ef9e996f3fd"
+ hash: "2f23f647daa1c11637d6a21c2668be49"
}
Frame {
msec: 784
- hash: "edea8c305fe88708dbafc03e427caa09"
+ hash: "62d995a1feb7f600669c1c7ef5f6a5da"
}
Frame {
msec: 800
- hash: "7b58803f12d0ab893acf539799d79e31"
+ hash: "66e881ee93f4722605a63dccd083635d"
}
Frame {
msec: 816
- hash: "9b56c3d1d140114dcc57d0a8568e9b95"
+ hash: "27ac08cc4f62552a9d1c1cbf781a00f9"
}
Key {
type: 7
@@ -242,15 +242,15 @@ VisualTest {
}
Frame {
msec: 832
- hash: "35e38e273dbc8e565917b21d00fc1530"
+ hash: "792be2ec5a08ad74cda4c19b6bc209d0"
}
Frame {
msec: 848
- hash: "116e294391333e8780daeca54c3d51ea"
+ hash: "0d28add40afd81f768603ea3e396f0b3"
}
Frame {
msec: 864
- hash: "6219676215f82540d7a53b2a8aa60279"
+ hash: "02c632713d0dc64bff9d8e58f745df95"
}
Frame {
msec: 880
@@ -274,11 +274,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "gridview.0.png"
+ hash: "02c632713d0dc64bff9d8e58f745df95"
}
Frame {
msec: 976
- hash: "02c632713d0dc64bff9d8e58f745df95"
+ image: "gridview.1.png"
}
Frame {
msec: 992
@@ -334,15 +334,15 @@ VisualTest {
}
Frame {
msec: 1168
- hash: "2667c2596de97dc15353158eba03495f"
+ hash: "02c632713d0dc64bff9d8e58f745df95"
}
Frame {
msec: 1184
- hash: "6a7b64e1427dcb7e438aa09a739cbc7b"
+ hash: "eac6b1299cb386f2be244b43a0be26ae"
}
Frame {
msec: 1200
- hash: "5bad6dc745958f5827403ea593c78752"
+ hash: "14350c877f5259a3cb3836fa5f8ff563"
}
Key {
type: 7
@@ -354,31 +354,31 @@ VisualTest {
}
Frame {
msec: 1216
- hash: "b393401219ada7d094a451dba8af3f1a"
+ hash: "582bfeca87cba0dee21b9551e583ec93"
}
Frame {
msec: 1232
- hash: "ba656452f8adf3d1ca7db9286274c37f"
+ hash: "cefe1139141fa381e55f1254713a1380"
}
Frame {
msec: 1248
- hash: "1e9725c8c364a491f34035fad1f77c63"
+ hash: "72e966a995c818b16b48bb193eda241a"
}
Frame {
msec: 1264
- hash: "a0aef0b65446dec0673b5cec3a260390"
+ hash: "8dfeefd93687861158ca4496e56cdbb9"
}
Frame {
msec: 1280
- hash: "d60c11a5d376af0831d6f05f2a839a92"
+ hash: "daf8474f1f583039f6a14b822e5dff5e"
}
Frame {
msec: 1296
- hash: "1dd2c456c6ee9cc8f9be0e9f3617d44b"
+ hash: "eb2b4ba7ffab22660d0b9de4226ea88f"
}
Frame {
msec: 1312
- hash: "56208e6551e2f4202bab2d62a1cf46a2"
+ hash: "f0f00d22d15ed9828db7b5f3a3669fe9"
}
Frame {
msec: 1328
@@ -474,31 +474,31 @@ VisualTest {
}
Frame {
msec: 1664
- hash: "f0f00d22d15ed9828db7b5f3a3669fe9"
+ hash: "caa3c1a106d549e6bb94a1746bd7a53c"
}
Frame {
msec: 1680
- hash: "153e7984089530bbd052c9e4f62eb14c"
+ hash: "66e158aa7dd78362dffddf2a9e7375ef"
}
Frame {
msec: 1696
- hash: "0525d40cc58d054a3abd7ee2486576f8"
+ hash: "8c23d5245774ab5252c98c19c33f8171"
}
Frame {
msec: 1712
- hash: "8c23d5245774ab5252c98c19c33f8171"
+ hash: "bf37dc941e49af9bd1e0e182a4ef6f0a"
}
Frame {
msec: 1728
- hash: "5ca243794d1350f04cf973d4bfc8ab89"
+ hash: "3fc025193fa6d6db0428ae1fa179bf55"
}
Frame {
msec: 1744
- hash: "d19b7f4c0897aba498e122d83b4cbbf1"
+ hash: "9efef22e6e29e18b2896982440c7bbae"
}
Frame {
msec: 1760
- hash: "99e41460dd8efc6e5c3faf54b14c3d43"
+ hash: "380e92b30430d3f589a88e67b7b959bd"
}
Key {
type: 7
@@ -510,15 +510,15 @@ VisualTest {
}
Frame {
msec: 1776
- hash: "703469f8b133156ed3aabe02762d66c3"
+ hash: "80329cd1548c4ff9ee589d56e9d8cd90"
}
Frame {
msec: 1792
- hash: "1cc2c383e988048db76a80d8d7f5a0e2"
+ hash: "6030c139032fc80abb5aabb85d8dfa4d"
}
Frame {
msec: 1808
- hash: "8e87117c19eb9d6e600c44e0f3869ae1"
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
}
Frame {
msec: 1824
@@ -546,11 +546,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "gridview.1.png"
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
}
Frame {
msec: 1936
- hash: "8304d2432168a2ea8a887d9a135b40b4"
+ image: "gridview.2.png"
}
Frame {
msec: 1952
@@ -574,27 +574,27 @@ VisualTest {
}
Frame {
msec: 2000
- hash: "4924037ce643d0748b8b2c666e61fd62"
+ hash: "8304d2432168a2ea8a887d9a135b40b4"
}
Frame {
msec: 2016
- hash: "ef9750584e669a8b2d415d13854e12a6"
+ hash: "719eabf9ad7e15d5429630c7f7136980"
}
Frame {
msec: 2032
- hash: "69937eacef6e6b11ad1d5741c69a1faa"
+ hash: "a1bd870fffd95a0604dd8e170e571632"
}
Frame {
msec: 2048
- hash: "a1bd870fffd95a0604dd8e170e571632"
+ hash: "b406160dda839ee34002190e05ceffac"
}
Frame {
msec: 2064
- hash: "a3a72386594aacc88977cdaa6441df48"
+ hash: "a139784af7675281f0f3760a932aef0c"
}
Frame {
msec: 2080
- hash: "6d8e89de38d52f0f0f871dfa18361cb5"
+ hash: "2c7d2f857919deae0a8ad6dc2f7d806f"
}
Key {
type: 7
@@ -606,19 +606,19 @@ VisualTest {
}
Frame {
msec: 2096
- hash: "96cfb1eb6893fac86c9434d1ffb82fcb"
+ hash: "80af5431f6d9a77f98c23d913c6caad4"
}
Frame {
msec: 2112
- hash: "5e11df1660634ff317be474118174ec5"
+ hash: "b3ccaf648e09dbfcbaa7609440c63fc9"
}
Frame {
msec: 2128
- hash: "2eb75858b50c3a9a80673ab89014ed63"
+ hash: "d267f9f4dd471be1cf4718d212c79887"
}
Frame {
msec: 2144
- hash: "3ff5d66f7902af92d49ebebf04d16c26"
+ hash: "570da61e2d48acd11474fe005110ab4b"
}
Frame {
msec: 2160
@@ -678,31 +678,31 @@ VisualTest {
}
Frame {
msec: 2352
- hash: "efeda5b2d97e1b7c22e2308250501cb7"
+ hash: "570da61e2d48acd11474fe005110ab4b"
}
Frame {
msec: 2368
- hash: "d6158379b699279f66b94a8418e53af1"
+ hash: "db27d4cc92c09148675e76459d8ecb15"
}
Frame {
msec: 2384
- hash: "ab960b0669fa594e0552df623a9136ea"
+ hash: "2c6f60eb170588a8450c679f3b16a6a4"
}
Frame {
msec: 2400
- hash: "0ebf6be1305ee1eb8740f4d0365ef4c5"
+ hash: "024a4d4fc9a11d352d1e0f5ee7f7dbc8"
}
Frame {
msec: 2416
- hash: "46cde47dffc6f2687c8c643eca09b95d"
+ hash: "c966b518b881f85a2d1cc86f5284ee1b"
}
Frame {
msec: 2432
- hash: "2b8698ce02a6964115d960ae19f40c37"
+ hash: "db15811f2d2cff0949213823649ef1d4"
}
Frame {
msec: 2448
- hash: "ff1e7d800bb27b41710c50554adc1091"
+ hash: "bbd9fad235aa2843bf2b64f3cf24f4e3"
}
Key {
type: 7
@@ -714,15 +714,15 @@ VisualTest {
}
Frame {
msec: 2464
- hash: "5837b3aca09038cae23dcb149acc8b0b"
+ hash: "ccbc2f09ed263375e7b52f556fb2836f"
}
Frame {
msec: 2480
- hash: "dbe7c571cdbdb9de4fd01faa6d5374cf"
+ hash: "c3b74e90fa99f4357762b57b9317b6f5"
}
Frame {
msec: 2496
- hash: "f431abcaf05f49ead909296d7649f8a9"
+ hash: "4f2fafdb59db544352e3067d67c0a714"
}
Frame {
msec: 2512
@@ -806,31 +806,31 @@ VisualTest {
}
Frame {
msec: 2800
- hash: "4f2fafdb59db544352e3067d67c0a714"
+ hash: "043583b19c921740dbc990afd4f508ed"
}
Frame {
msec: 2816
- hash: "4dcd4cdf6f4e305732185ec52cd2f2f6"
+ hash: "64fdbc9a930e44dcc38542f720b41b0a"
}
Frame {
msec: 2832
- hash: "dfd3c29b0520edbbee57dfacfa7e2b30"
+ hash: "257d3d8bcf78671d35a898befec091cb"
}
Frame {
msec: 2848
- hash: "257d3d8bcf78671d35a898befec091cb"
+ hash: "92a51faf52bdc7f895bdc08f049f6ed3"
}
Frame {
msec: 2864
- hash: "20e89c544284603943396694abe86756"
+ hash: "5aec71e84a4e9c4962ed73c39d337910"
}
Frame {
msec: 2880
- image: "gridview.2.png"
+ hash: "e9112eea445585b17d58b6f9ba039c39"
}
Frame {
msec: 2896
- hash: "b88c6af89423b32b3a4413035711df03"
+ image: "gridview.3.png"
}
Key {
type: 7
@@ -842,15 +842,15 @@ VisualTest {
}
Frame {
msec: 2912
- hash: "e34de13af44c449c9ecc86e06ce01ed2"
+ hash: "32faa54e636773747a2ec4065a11c337"
}
Frame {
msec: 2928
- hash: "98ffe81129aa7cc7325764221f1dae59"
+ hash: "ebe24b814e27cd8a8db78da58c8f86d7"
}
Frame {
msec: 2944
- hash: "db2d545de9879362738e71a02a3d1d26"
+ hash: "e67ae32a47213b360c1a445bf645dde2"
}
Frame {
msec: 2960
@@ -902,27 +902,27 @@ VisualTest {
}
Frame {
msec: 3120
- hash: "02d8c90faf56c65252e4f938944bda7b"
+ hash: "e67ae32a47213b360c1a445bf645dde2"
}
Frame {
msec: 3136
- hash: "a32994e2320e357241f63b956b6db236"
+ hash: "d446b94a2e3d9f7091c5520852d1a215"
}
Frame {
msec: 3152
- hash: "9ada466c26c217adbcd7a93df264ed75"
+ hash: "79d1a3489be95d113e8c611a2ba63456"
}
Frame {
msec: 3168
- hash: "79d1a3489be95d113e8c611a2ba63456"
+ hash: "95601b7d8ab689142ca89343743b55b2"
}
Frame {
msec: 3184
- hash: "d3aa82455c4ae3ac25097354e132a30f"
+ hash: "ad67049e51eafbbc33d1e3763d78b5f9"
}
Frame {
msec: 3200
- hash: "62d12e5933ed4ed048ccafd229f4b2b7"
+ hash: "69b1d558065ee9b9719c3ae8f08b52ab"
}
Key {
type: 7
@@ -934,19 +934,19 @@ VisualTest {
}
Frame {
msec: 3216
- hash: "5bc4ac94ae20e425084d0811dee1ba08"
+ hash: "858fd65adb231bf2002bcc25075be261"
}
Frame {
msec: 3232
- hash: "6d5113e3732dc7a9172eea3667a01f7b"
+ hash: "2dc6fb114e1d2a606efe48f349251504"
}
Frame {
msec: 3248
- hash: "e435a2588b25d3336f290331931f5981"
+ hash: "e4819f09d6640021408e03c50090e849"
}
Frame {
msec: 3264
- hash: "bce201adbeb319b181cce139f179d7f0"
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
}
Frame {
msec: 3280
@@ -1006,31 +1006,31 @@ VisualTest {
}
Frame {
msec: 3472
- hash: "8f0f3cd35ae92047f23084f447046eb8"
+ hash: "5fa3ec31176bed2de8cb076b87e0be74"
}
Frame {
msec: 3488
- hash: "ceb12e6c5e9f0566039040d9f3ff587f"
+ hash: "6c84f5e6d352ed345a0bed12c50bf7a9"
}
Frame {
msec: 3504
- hash: "dfd0c89c3ea73aceefcdafa71609c720"
+ hash: "15690df807a7c1e9aa9d7e9154c1a492"
}
Frame {
msec: 3520
- hash: "8d8ed1a9dc6a9f74dfc81b79f02af4c5"
+ hash: "3d6cc3e0d93ddf4b66321fda361f05c0"
}
Frame {
msec: 3536
- hash: "d450bd62e03e1e4c7cb66e98ece05f97"
+ hash: "8e3526ffeb9873b55b3bae2827391628"
}
Frame {
msec: 3552
- hash: "d1ece2210cd24eedd5361e5c3a162236"
+ hash: "33097267d43a7e16a78102cb91c9fd42"
}
Frame {
msec: 3568
- hash: "77589e48b9db95e702055753046319e5"
+ hash: "17ab2623432bba92dc9d99e5764e626e"
}
Key {
type: 7
@@ -1042,15 +1042,15 @@ VisualTest {
}
Frame {
msec: 3584
- hash: "7793263ecb831a1e63fbd76c8addde03"
+ hash: "9945a723d9a3399bb5311eea3d9b0b77"
}
Frame {
msec: 3600
- hash: "bfa9675f981c37fed27dea100226f61a"
+ hash: "e6e9251cd6d941a050beaa36b851e314"
}
Frame {
msec: 3616
- hash: "9780849fe8abd22c32ccafcdd46b0d65"
+ hash: "a61dbcb7d914afe34009085bf37fb8e2"
}
Frame {
msec: 3632
@@ -1106,11 +1106,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "gridview.3.png"
+ hash: "e63d987ba303a42046827f14941b444a"
}
Frame {
msec: 3856
- hash: "e63d987ba303a42046827f14941b444a"
+ image: "gridview.4.png"
}
Frame {
msec: 3872
@@ -1138,31 +1138,31 @@ VisualTest {
}
Frame {
msec: 3936
- hash: "a61dbcb7d914afe34009085bf37fb8e2"
+ hash: "e63d987ba303a42046827f14941b444a"
}
Frame {
msec: 3952
- hash: "89175b83b4f7ee4b5d99219cdc97aa59"
+ hash: "9942059cb380dbae191850d2e7175906"
}
Frame {
msec: 3968
- hash: "f524421286503f6175e4ad71dd89145f"
+ hash: "ca5af7d98a008eccba1e21be0da61f3c"
}
Frame {
msec: 3984
- hash: "ca5af7d98a008eccba1e21be0da61f3c"
+ hash: "abb95ac1408d34e2eb319e5396511d65"
}
Frame {
msec: 4000
- hash: "77c19e7e17e00787ff0d7a4e7bad7bc8"
+ hash: "183df6d4be489280181f01a0c0ed3cde"
}
Frame {
msec: 4016
- hash: "04c8db761e324101ad92e0ac9ceed7d4"
+ hash: "64733a4d609c621765d114a6b482dc57"
}
Frame {
msec: 4032
- hash: "97a3dcb81349efab6b44d458e83ce5c4"
+ hash: "897aa5b42e48a7235ab4fdded5876da2"
}
Key {
type: 7
@@ -1174,15 +1174,15 @@ VisualTest {
}
Frame {
msec: 4048
- hash: "e86ebc276b88705c97cc9efb66ccc6b2"
+ hash: "c80f01a1e683d84bfa0821832c113820"
}
Frame {
msec: 4064
- hash: "a134bbfd14879f13b288a04d23382348"
+ hash: "e7065bf6934c7fb7b160ae5c169633e4"
}
Frame {
msec: 4080
- hash: "9530ad3f58ad1c66401572869f7d91bc"
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
}
Frame {
msec: 4096
@@ -1230,31 +1230,31 @@ VisualTest {
}
Frame {
msec: 4240
- hash: "980e0fa84fd3bab496623936f5f220a2"
+ hash: "db3d030de94b19ea1db5c60be7c7ca5c"
}
Frame {
msec: 4256
- hash: "ed3268911723d664699bbc31317befc1"
+ hash: "917c11b16c6286bea7a37990d7fa078f"
}
Frame {
msec: 4272
- hash: "3bfda4b3b0b2d2a97ec1c0b5b3f4da63"
+ hash: "1616c6def28659d51905564ff83cc112"
}
Frame {
msec: 4288
- hash: "1616c6def28659d51905564ff83cc112"
+ hash: "fce04972557736a8dfa8de5f1a605ddb"
}
Frame {
msec: 4304
- hash: "68342f34c18956d3a093f8eeeae6977e"
+ hash: "6acffcea115f8a777f62c1f68cd25fa6"
}
Frame {
msec: 4320
- hash: "ac1b12959e9055a28fe2bda0a12b75bc"
+ hash: "f96ae6a4f437cf98b268fc0b0611ddc4"
}
Frame {
msec: 4336
- hash: "009b85ff6b86e418c78ed33a5e88d3f1"
+ hash: "c9e14157dca547623497a6107f14b73d"
}
Key {
type: 7
@@ -1266,15 +1266,15 @@ VisualTest {
}
Frame {
msec: 4352
- hash: "59753bc7dc69767fe2109fdc41f20dae"
+ hash: "6489766ed84c4b6ff26de24cb74848cb"
}
Frame {
msec: 4368
- hash: "1c87d3d8c8d564d4d95a26f57fd28f38"
+ hash: "9d229c10853b30ed048b892953c5d86c"
}
Frame {
msec: 4384
- hash: "4e43b7b6787002c9013010dd74c83f49"
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
}
Frame {
msec: 4400
@@ -1338,31 +1338,31 @@ VisualTest {
}
Frame {
msec: 4608
- hash: "84de5b5e8b0fba190a783c72967661c7"
+ hash: "2476aa1a7191b485a76c76e98c9be2b0"
}
Frame {
msec: 4624
- hash: "60b696f4913379d28f300fd1b531c6cb"
+ hash: "12f17d727d70269fd98a0f6524c9f750"
}
Frame {
msec: 4640
- hash: "d01e651d9094332fd82ad1cea3e93e9d"
+ hash: "e73d64ebe242eae0f412ca463c76085d"
}
Frame {
msec: 4656
- hash: "87be4cd7c894b03b2b64c996e915d71f"
+ hash: "f37a468e04155c880e707d1d12f71f94"
}
Frame {
msec: 4672
- hash: "b07fccb0c5565d2feed5a9fcdf8acead"
+ hash: "3789293a6b8791d8e60b5160fc457345"
}
Frame {
msec: 4688
- hash: "3dca3165fd34be549d21fb6c414c67d8"
+ hash: "7d8377c816f19fa32d847a30d1c71da9"
}
Frame {
msec: 4704
- hash: "5f69f3298f8ca73fa9b3b6e630c60186"
+ hash: "b9867dbb6f03d5970076251e10e47f16"
}
Key {
type: 7
@@ -1374,115 +1374,115 @@ VisualTest {
}
Frame {
msec: 4720
- hash: "d7f41e9a29d550a7d9a41bb947569abe"
+ hash: "0604bbd1afdfee5881d9d9d79a67a3df"
}
Frame {
msec: 4736
- hash: "4ede2e90ad216a2d44580c50a25dea23"
+ hash: "93401cdfa6cc7fbbfc479faa0bc1d63f"
}
Frame {
msec: 4752
- hash: "9b339845ee588b789dc9095c272e0bdf"
+ hash: "aa379c70dd6a94a55fd8c065331ad47b"
}
Frame {
msec: 4768
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4784
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4800
- image: "gridview.4.png"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4816
- hash: "9cdea4790972efaecabd52b435107e69"
+ image: "gridview.5.png"
}
Frame {
msec: 4832
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4848
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4864
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4880
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4896
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4912
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4928
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4944
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4960
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4976
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 4992
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5008
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5024
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5040
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5056
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5072
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5088
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5104
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5120
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5136
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5152
- hash: "9cdea4790972efaecabd52b435107e69"
+ hash: "11150995098af8516513230360d40108"
}
Key {
type: 6
@@ -1494,31 +1494,31 @@ VisualTest {
}
Frame {
msec: 5168
- hash: "d6f0a6d7604bad811eeba13fd7c45368"
+ hash: "11150995098af8516513230360d40108"
}
Frame {
msec: 5184
- hash: "5f92e1531a3f6c21ec82e3c908167fc7"
+ hash: "c58f071ae4efde5cd265fa6e82dda56b"
}
Frame {
msec: 5200
- hash: "5214e99ff052dcdc8f85bad29de92e03"
+ hash: "bea9eadda7b015d0e9a0f05924e723f7"
}
Frame {
msec: 5216
- hash: "d4abed9f0f1115c9a45b0b9b4f54754e"
+ hash: "c255da63dc59ca7555c91701ed373fd5"
}
Frame {
msec: 5232
- hash: "cfae8a0281e704b0e62f6bf31b32800f"
+ hash: "fa0a697341baae4b3aa4dee721ef10a2"
}
Frame {
msec: 5248
- hash: "c203f0674596ae690bf19f2d49be62ac"
+ hash: "2d2148840143772fab6b2405bf5eb609"
}
Frame {
msec: 5264
- hash: "2e2c7e05aade104bdc4f6c489b6f0601"
+ hash: "3716705b5f7caa86eecc1dfafe31ebcf"
}
Key {
type: 7
@@ -1530,51 +1530,51 @@ VisualTest {
}
Frame {
msec: 5280
- hash: "b4b2148b0557dcab3a441165e5e4de5f"
+ hash: "35cfea054566eae3bcc9c8a41caadcdc"
}
Frame {
msec: 5296
- hash: "c5e791d27a42a63d25cdbd492b4af29a"
+ hash: "916858ff0ca4370840d072c389242a2b"
}
Frame {
msec: 5312
- hash: "0f94ebcb407f8e6ae263bd954f2c8177"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5328
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5344
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5360
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5376
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5392
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5408
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5424
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5440
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5456
- hash: "d9b56b817a411812789881697a28fe4c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Key {
type: 6
@@ -1586,31 +1586,31 @@ VisualTest {
}
Frame {
msec: 5472
- hash: "6fdfe69e377da72e04dc130f5677ed2c"
+ hash: "417f4bce58783f0e677b17b05147a663"
}
Frame {
msec: 5488
- hash: "c041d26d43766fa1735f2ada2a43225b"
+ hash: "191f2c80617cef61a2890977c3079ad2"
}
Frame {
msec: 5504
- hash: "aa62dbd6c6256665ee1b4ef468607978"
+ hash: "0902ef220363ad2c08f09199278cecf8"
}
Frame {
msec: 5520
- hash: "987fcdf6483a83b1242053f4e7fb7a26"
+ hash: "d28ea1b1e01588bbb767a5599c5345d2"
}
Frame {
msec: 5536
- hash: "fbde70c34709b68eb22f5460a8815fba"
+ hash: "36eeaf2755fffefc32bcd580fade6305"
}
Frame {
msec: 5552
- hash: "911ddc838ebaf5ade1bb026dff2741ba"
+ hash: "51560b23e44e5548875b13ff6dc6ee8d"
}
Frame {
msec: 5568
- hash: "120bbf35b2a3b756bdeaea0df43e49b2"
+ hash: "082abbc9ecd0bf39619819aa526c021c"
}
Key {
type: 7
@@ -1622,63 +1622,63 @@ VisualTest {
}
Frame {
msec: 5584
- hash: "ea93e33c079d6dc5fb18c69fb4fed441"
+ hash: "ab956d21f8ea55dad590b3cafc887585"
}
Frame {
msec: 5600
- hash: "b9ac8ab01cb59b1fee11967bdb6d2dd6"
+ hash: "9501050f547de1de0d280a839e35e120"
}
Frame {
msec: 5616
- hash: "3ff266bf29cbcaa30bc1e7af5dd9866b"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5632
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5648
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5664
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5680
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5696
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5712
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5728
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5744
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5760
- image: "gridview.5.png"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5776
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ image: "gridview.6.png"
}
Frame {
msec: 5792
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5808
- hash: "edd6c3a9493a63674e2d7af5f3e8467e"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Key {
type: 6
@@ -1690,27 +1690,27 @@ VisualTest {
}
Frame {
msec: 5824
- hash: "de1f83d25751639dff42f1755a6534c3"
+ hash: "3de570332e8a1e01f409d892feb7930e"
}
Frame {
msec: 5840
- hash: "edefdea8b2461d03fb97cf5ed66e9b6d"
+ hash: "6aefcf9976f5910376a583b020c8dd4b"
}
Frame {
msec: 5856
- hash: "cef1886397e3932a511f37571b5011f4"
+ hash: "971ca1e2537d52f352c889817e353736"
}
Frame {
msec: 5872
- hash: "05589ad354314d9e04ef90c1addd99f5"
+ hash: "f1f0599e7f4ba2fb869e886a2e7ff216"
}
Frame {
msec: 5888
- hash: "ff88b52e3755b9b4785d2719ddd4f090"
+ hash: "8bf62b11cd4ec99ae41752e1a9a9c7ca"
}
Frame {
msec: 5904
- hash: "f59edc3016b177a2e8faa6612d718b17"
+ hash: "f2fcf6ad484b240373822c2450dd5305"
}
Key {
type: 7
@@ -1722,131 +1722,131 @@ VisualTest {
}
Frame {
msec: 5920
- hash: "dc673a7cdd927f70b28ebcfe51cd3d89"
+ hash: "f999073e6303ff5658012dabbef4ee8e"
}
Frame {
msec: 5936
- hash: "3abec0da85fb663e63ab22188e092827"
+ hash: "c35ef3056155d8d30dd4b9e6299ac68f"
}
Frame {
msec: 5952
- hash: "50c2c8ac68cafad7c47b576cd8f4a037"
+ hash: "0326908135c0d693f2fc99c9e02d8f94"
}
Frame {
msec: 5968
- hash: "06c31b861e2b96e6595b2244d7b3f4d5"
+ hash: "b0def7204463648dac117ddcc2241c3e"
}
Frame {
msec: 5984
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6000
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6016
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6032
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6048
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6064
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6080
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6096
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6112
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6128
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6144
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6160
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6176
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6192
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6208
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6224
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6240
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6256
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6272
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6288
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6304
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6320
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6336
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6352
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6368
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6384
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6400
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6416
- hash: "0aa7ce5ba9c875619a6e4629a0eb4065"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Key {
type: 6
@@ -1858,31 +1858,31 @@ VisualTest {
}
Frame {
msec: 6432
- hash: "7f52a770775c19e10784b4c5f7874210"
+ hash: "5e88aeab16a0ccca400163889851bc45"
}
Frame {
msec: 6448
- hash: "827cfb74286a2a80aca8b6c5277d6cfd"
+ hash: "5531bf9affacf58945c6c54c5d14c9c9"
}
Frame {
msec: 6464
- hash: "8399231eda9b66821d43a3d8c4c7d645"
+ hash: "ebc8f36eb0fc7d40bf9f268ef03522a0"
}
Frame {
msec: 6480
- hash: "fc163583671f3c4023361460b436c895"
+ hash: "621a3c318fc259ed27ae050d70d46d39"
}
Frame {
msec: 6496
- hash: "893dea6496c95c32095ad1d673e500c2"
+ hash: "688bea0c0c864d9bc4204cf06b480d3a"
}
Frame {
msec: 6512
- hash: "808c7403b2cdcc882059da56a2f806fe"
+ hash: "8419262c19c40172b93c74d34cad12cb"
}
Frame {
msec: 6528
- hash: "7466b2e5b86ba8ad46be75818659786c"
+ hash: "57ce65a4ebe51c14ee69083f90ed5b80"
}
Key {
type: 7
@@ -1894,47 +1894,47 @@ VisualTest {
}
Frame {
msec: 6544
- hash: "dd2561cd780e24401130305d47757a53"
+ hash: "43827ad5cb4173a8a5d434b167f68761"
}
Frame {
msec: 6560
- hash: "bee89299532d43fc3e6c3e69c343b381"
+ hash: "13e3e00ec3c11d6ca3e51a7aba0e1a97"
}
Frame {
msec: 6576
- hash: "94f8474aedee94098592c05d8fc7d868"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6592
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6608
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6624
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6640
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6656
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6672
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6688
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6704
- hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Key {
type: 6
@@ -1946,35 +1946,35 @@ VisualTest {
}
Frame {
msec: 6720
- image: "gridview.6.png"
+ hash: "dcf8c3078973ad99fbbcc763e433de11"
}
Frame {
msec: 6736
- hash: "ccd58be20d47422121d6ef799b927a7a"
+ image: "gridview.7.png"
}
Frame {
msec: 6752
- hash: "e090c7f39649786a1796870e25bd0f0d"
+ hash: "bb4674d0de11e4f625e6db940b4ec06c"
}
Frame {
msec: 6768
- hash: "acf3dcd9f4a869169dbc1ae7fe60e9d0"
+ hash: "26f602a711cea77e5c7be08a93981306"
}
Frame {
msec: 6784
- hash: "51795e9a720845e8305d23507785e1ca"
+ hash: "5346bc8b1711a6679867d81efb9da563"
}
Frame {
msec: 6800
- hash: "0d34a43e177e6b73e2ff9155747d0385"
+ hash: "3aa4d335a91be2bf2616d61fa7719ce5"
}
Frame {
msec: 6816
- hash: "1876c3cdffc1af01da1aaa0ac636d0a8"
+ hash: "2bad8dd039a35f11ba86b409bbcea6fe"
}
Frame {
msec: 6832
- hash: "3131296b6edf4190520e2cdb3f8b936e"
+ hash: "20e4b381a6bed27e9e64d2eeda7870da"
}
Key {
type: 7
@@ -1986,51 +1986,51 @@ VisualTest {
}
Frame {
msec: 6848
- hash: "ee92f0a764e5081b130e205a5c362b07"
+ hash: "e96eb16671f26f04a72498bc3ab54f06"
}
Frame {
msec: 6864
- hash: "8737ea2c60aeb215228c00a7fddd1baa"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6880
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6896
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6912
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6928
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6944
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6960
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6976
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 6992
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7008
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7024
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Key {
type: 6
@@ -2042,35 +2042,35 @@ VisualTest {
}
Frame {
msec: 7040
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7056
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7072
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7088
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7104
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7120
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7136
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7152
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Key {
type: 7
@@ -2082,111 +2082,111 @@ VisualTest {
}
Frame {
msec: 7168
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7184
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7200
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7216
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7232
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7248
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7264
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7280
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7296
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7312
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7328
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7344
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7360
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7376
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7392
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7408
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7424
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7440
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7456
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7472
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7488
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7504
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7520
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7536
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7552
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7568
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7584
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Key {
type: 6
@@ -2198,31 +2198,31 @@ VisualTest {
}
Frame {
msec: 7600
- hash: "ac036f1f5c5ae23ddfca3060dff83f15"
+ hash: "f0e0fe7c155bbee3957a80077703fadc"
}
Frame {
msec: 7616
- hash: "eb0d1be15f63af6eaf6634b02e5f240a"
+ hash: "6e26f05f7a2531620ed4a25073e0f0c5"
}
Frame {
msec: 7632
- hash: "2423c305bebb3449e87c78e8fb447c88"
+ hash: "9fe693b6b53763ffc1b94d157252b18c"
}
Frame {
msec: 7648
- hash: "f0ede6ea85647728db80878b3e525edc"
+ hash: "49aae47da204d4104757b4420df7413e"
}
Frame {
msec: 7664
- hash: "387d127b2b000dc344ee4768cf2d29b2"
+ hash: "ecd7456cb5ba2034c766e1ec298c2ebf"
}
Frame {
msec: 7680
- image: "gridview.7.png"
+ hash: "2a5a7dfcd64200864abfa9267e802f4e"
}
Frame {
msec: 7696
- hash: "1d0d8100e994c16d7973ad9a97b0068f"
+ image: "gridview.8.png"
}
Key {
type: 7
@@ -2234,71 +2234,71 @@ VisualTest {
}
Frame {
msec: 7712
- hash: "95fb4a6d0331ffc4773e39ec8c3e6511"
+ hash: "e11fcb0e62d7f6bfb40b7336e89ff014"
}
Frame {
msec: 7728
- hash: "34738f16150228d971972833d4bd5c8f"
+ hash: "5a07fa8768ebfb938204e500f4a09253"
}
Frame {
msec: 7744
- hash: "9b71c8dacc530f32d7c6f409928caf5c"
+ hash: "1ee3a4780979f69cd7926df3d4c18731"
}
Frame {
msec: 7760
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7776
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7792
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7808
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7824
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7840
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7856
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7872
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7888
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7904
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7920
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7936
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7952
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 7968
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Key {
type: 6
@@ -2310,15 +2310,15 @@ VisualTest {
}
Frame {
msec: 7984
- hash: "831efd0970c5c29fbe10b3be7707f915"
+ hash: "ca4edfecdfc410aca6557b9a3095d92b"
}
Frame {
msec: 8000
- hash: "0587fc809c38c3bbe1fbac2960596974"
+ hash: "1306bb76c161e84e2e5307a0ebc34393"
}
Frame {
msec: 8016
- hash: "d20eba806cf4730a850db4c095fa36f9"
+ hash: "a97cbb851cf1fdeb428ee36042be52e1"
}
Key {
type: 7
@@ -2330,59 +2330,59 @@ VisualTest {
}
Frame {
msec: 8032
- hash: "c1663e75ba05b341e1e970a451958ea0"
+ hash: "e79ccbe112066ded3276aa7feb2e7848"
}
Frame {
msec: 8048
- hash: "ea40cc33b689d6b42fc5a69fa30178e4"
+ hash: "9cc673f743e2018cf9a6d815fe76dc80"
}
Frame {
msec: 8064
- hash: "a07a1c61de1813158ff743cd326ee427"
+ hash: "8179262829f88ee4bbb9537b29ab56ee"
}
Frame {
msec: 8080
- hash: "6dfddaa340df8999ca77f6a6e4c6c3ce"
+ hash: "3810cc1b5902259c22bce0118497aaf3"
}
Frame {
msec: 8096
- hash: "76ca40bb169c1ddc291847d4be2d38d7"
+ hash: "d41c5a6fdfafb2263e7c35a927f7753c"
}
Frame {
msec: 8112
- hash: "e44778541b76208981a3944a64235cac"
+ hash: "e54d0179d62b7cdec96218c3a0ef110d"
}
Frame {
msec: 8128
- hash: "fdf45ea650d31957cc675c3bec8bf53e"
+ hash: "da89e8408417b99582ffd825c2226bf4"
}
Frame {
msec: 8144
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8160
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8176
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8192
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8208
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8224
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8240
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Key {
type: 6
@@ -2394,27 +2394,27 @@ VisualTest {
}
Frame {
msec: 8256
- hash: "b78cdb727535ab7e567af08abf25e64c"
+ hash: "5d7b9247aecd4adc939c6fb89d5eac2c"
}
Frame {
msec: 8272
- hash: "338481e6390f2a61e975084c16427584"
+ hash: "2fcac6c204d45d6fbab76c3d07e2c8ad"
}
Frame {
msec: 8288
- hash: "8923c45c23b1f4250b7d1e483b07a4da"
+ hash: "78602c9ac9dbd6c34ef539799513d874"
}
Frame {
msec: 8304
- hash: "b21de834906d0eecea985561e2e41e4f"
+ hash: "02f8d434d50af8fa6063a4f03dabe2b1"
}
Frame {
msec: 8320
- hash: "a8c9761cfb20631520ed890cd2648c4b"
+ hash: "ff5da7b1a1467418bc712c0ac33c878f"
}
Frame {
msec: 8336
- hash: "abf96a042ef12190bc48ff49732ef55a"
+ hash: "2aed8048e5040ebda3bdfdf4a57d08eb"
}
Key {
type: 7
@@ -2426,55 +2426,55 @@ VisualTest {
}
Frame {
msec: 8352
- hash: "5b9506dfb038cd26dfc81ecd2406ada9"
+ hash: "c6b50c1a6a843aa9484c48e4bf073e4b"
}
Frame {
msec: 8368
- hash: "be75b8d39f81b2fdaff01469bfc67d4a"
+ hash: "a08ef172dfb72151108e81cacfaa964f"
}
Frame {
msec: 8384
- hash: "488aa2977f349df82b5f6ae5e3619d35"
+ hash: "a2a755231d0eee686aa38cd4d4b417f2"
}
Frame {
msec: 8400
- hash: "d69f17f0ce8537511353d20b59d20de0"
+ hash: "5c598e26c1b65796b8e68c7d27abbc0f"
}
Frame {
msec: 8416
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8432
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8448
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8464
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8480
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8496
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8512
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8528
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8544
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Key {
type: 6
@@ -2486,27 +2486,27 @@ VisualTest {
}
Frame {
msec: 8560
- hash: "7647efcc0152cc3d6544106f969ace26"
+ hash: "290662cda876fccc87971d2cebc69d52"
}
Frame {
msec: 8576
- hash: "8f74d33bf95cbf37fdb4521c69373a64"
+ hash: "1aface9c3746488496af48caf23af1a5"
}
Frame {
msec: 8592
- hash: "e33bb4cd12790c9d9992efdd3e23bee9"
+ hash: "c08f9756c9cc453a2544052b15beab5d"
}
Frame {
msec: 8608
- hash: "36f32e34b4093091c4707f26c52896ad"
+ hash: "b70544dc0d5cc18181f0bf40c068410b"
}
Frame {
msec: 8624
- hash: "5ab5e142f8dc883287c116cedbacfd55"
+ hash: "7e8fbce1337b0b04beda76ee54c98285"
}
Frame {
msec: 8640
- image: "gridview.8.png"
+ hash: "fb8acbfc93b64d960abb17f097fe36fe"
}
Key {
type: 7
@@ -2518,19 +2518,19 @@ VisualTest {
}
Frame {
msec: 8656
- hash: "c74212e45a6c4b6a18caeb6a22350609"
+ image: "gridview.9.png"
}
Frame {
msec: 8672
- hash: "8919643a7d13677dd902941860093209"
+ hash: "16013089bfe18b35efbd8cd36d37bb0a"
}
Frame {
msec: 8688
- hash: "6f2ab4400fadf51b994351f0975e31fc"
+ hash: "57a857a48922cb252bb4ddc77b29825e"
}
Frame {
msec: 8704
- hash: "4798559ce6f9bd7455ed5385d0030763"
+ hash: "10a46ba67a0c7abe08ea8f80a75040e8"
}
Frame {
msec: 8720
@@ -2586,23 +2586,23 @@ VisualTest {
}
Frame {
msec: 8896
- hash: "fac81cf6f45cb47abc1fa36d23e39d34"
+ hash: "df1797772003dc3dbdd0e245c447bf20"
}
Frame {
msec: 8912
- hash: "862f4deee01183fd38b094da59048b23"
+ hash: "70dd7fd50388196706f72a48ac96963c"
}
Frame {
msec: 8928
- hash: "2f3b147221da30d8857d25fc788b3eac"
+ hash: "439e43c26fc22a6c3a2b8568bfddbfa3"
}
Frame {
msec: 8944
- hash: "5b295b187c6cfc6aefa51e5efc2c27e3"
+ hash: "77e9ea697690a3e5c3965c0bf76055b0"
}
Frame {
msec: 8960
- hash: "fe3139ddc8fdbc1b0c25bd641f83e833"
+ hash: "30226190fa4466b3450ff1f810e85635"
}
Key {
type: 7
@@ -2614,19 +2614,19 @@ VisualTest {
}
Frame {
msec: 8976
- hash: "8f2a9585dc6248a403aafd0f151d6ba0"
+ hash: "9a69afa4de272f00d8a26141fa974f6e"
}
Frame {
msec: 8992
- hash: "39eca8cc6bb8ea30cc452dc24f8e46dc"
+ hash: "1883a34a21ecc690022a6623c67c8ba1"
}
Frame {
msec: 9008
- hash: "8dbbc6026942cb6e572f1cb7e2675713"
+ hash: "e5be5b7e7060fffacaf93b6bf8d051a4"
}
Frame {
msec: 9024
- hash: "62dfa07b96dd18c6be89822654bf09f3"
+ hash: "2667c2596de97dc15353158eba03495f"
}
Frame {
msec: 9040
@@ -2786,11 +2786,11 @@ VisualTest {
}
Frame {
msec: 9600
- image: "gridview.9.png"
+ hash: "02c632713d0dc64bff9d8e58f745df95"
}
Frame {
msec: 9616
- hash: "02c632713d0dc64bff9d8e58f745df95"
+ image: "gridview.10.png"
}
Frame {
msec: 9632
@@ -2831,7 +2831,7 @@ VisualTest {
Key {
type: 6
key: 16777249
- modifiers: 67108864
+ modifiers: 0
text: ""
autorep: false
count: 1
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png
index 3021d58..27e0783 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png
index baeb1a6..27e0783 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png
index 2d0c731..b0348ab 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png
index af9ed05..c3113e9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png
index 0b0945d..725d4e9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png
index 618ae0c..cc6d8d6 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png
index fc31262..ccf9f5f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png
index 22291ac..2f7f475 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png
index 3021d58..fff1b40 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png
index 2f2f5b9..27e0783 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml
index 1c90af9..2c43f7d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "dba2f6f1c773bd4cd9523108fca861c4"
+ image: "gridview2.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "gridview2.0.png"
+ hash: "33d81c39d16c6a326012499796e50e03"
}
Frame {
msec: 976
- hash: "33d81c39d16c6a326012499796e50e03"
+ image: "gridview2.1.png"
}
Frame {
msec: 992
@@ -330,27 +330,27 @@ VisualTest {
}
Frame {
msec: 1280
- hash: "aaec7184a27e6700d96ffff376b8fa53"
+ hash: "4ffd56d59c14ba676393686d753951d7"
}
Frame {
msec: 1296
- hash: "3fa3a890a4ff4a59336a9a2d478d0dde"
+ hash: "e2f7702ed749330b2f027aa73967a4cf"
}
Frame {
msec: 1312
- hash: "3711c6c2f4f9aba7f2c72bd1f1d85016"
+ hash: "3f4dcee547e925db9b3da1fa08bab3c9"
}
Frame {
msec: 1328
- hash: "23da2f9a800b805ce7b77ff08218907d"
+ hash: "12b0bf8abbb9b6a0597eccebe5322551"
}
Frame {
msec: 1344
- hash: "12e4bc953b06cdaad0720f87fb96a37e"
+ hash: "23da2f9a800b805ce7b77ff08218907d"
}
Frame {
msec: 1360
- hash: "46e69658bda69bab202a2790a76ba1cd"
+ hash: "9c039c94a4202b99bf913891bdcb3698"
}
Key {
type: 7
@@ -362,27 +362,27 @@ VisualTest {
}
Frame {
msec: 1376
- hash: "44608e67c69b92ccbb45e119e1158fe3"
+ hash: "dd7c95ca98c4f37837c2ff7f03243fc3"
}
Frame {
msec: 1392
- hash: "97a309b47017d38294644a486a7ce68e"
+ hash: "6f31f7af4e68ab0eab101e7ae840b4b6"
}
Frame {
msec: 1408
- hash: "41f42b50b22e0496c8aca5019b24b9cb"
+ hash: "29943a44b9830bb64b3e5a3b6abd8c42"
}
Frame {
msec: 1424
- hash: "8603ea1cb60c804563f50bc41c0180fe"
+ hash: "93d37221e8e022c84e35c7bd44b0644e"
}
Frame {
msec: 1440
- hash: "e29777fa70daafe9640c6e9bb7bd63d6"
+ hash: "9ce3cd471dba7fe94de4e9ad321803b2"
}
Frame {
msec: 1456
- hash: "2c4c360320f527e99fee799e68c2c0aa"
+ hash: "0d30916c7e05ff8609af5894f47a89bb"
}
Frame {
msec: 1472
@@ -430,23 +430,23 @@ VisualTest {
}
Frame {
msec: 1616
- hash: "17027b7c099b11cb5382f30dbbd1e647"
+ hash: "6775c78beca0f078c5f2c57370de1946"
}
Frame {
msec: 1632
- hash: "0e17461a4ca843f9903b7f03e99a0b00"
+ hash: "898709f3871e13825baf48861930f26c"
}
Frame {
msec: 1648
- hash: "a5e61901920553e59892fa405beea15a"
+ hash: "c1a568599592a3f455ad550c2e4878a8"
}
Frame {
msec: 1664
- hash: "310eaf71fe8d3807606e58a666c65ccd"
+ hash: "a80d8cbf0c6fe8383badbb2badb361ad"
}
Frame {
msec: 1680
- hash: "76f556d05fb77082f33eb1836c10587a"
+ hash: "310eaf71fe8d3807606e58a666c65ccd"
}
Key {
type: 7
@@ -458,31 +458,31 @@ VisualTest {
}
Frame {
msec: 1696
- hash: "4e7e4b7790a96396e7ea3533b5c32ed9"
+ hash: "0f317f50b0d2a4c5daf819431527416e"
}
Frame {
msec: 1712
- hash: "b065287b6490f58ca6f0e9eb2027cf20"
+ hash: "d251b64b794902fe2c5da3cee43ff82d"
}
Frame {
msec: 1728
- hash: "907cd9dbdffa1d395caaabd466dc8e86"
+ hash: "757adc256e1b5d739c29ee82bdacfa16"
}
Frame {
msec: 1744
- hash: "3b144e5b4867328beafa3020ce931480"
+ hash: "1c20e69e033a5fa4825fd46f51d1e348"
}
Frame {
msec: 1760
- hash: "b59b2b60b7d55424b61b1b0ed3e227b8"
+ hash: "03cbcd361ec24925222802c8ece99793"
}
Frame {
msec: 1776
- hash: "4032e934871b315b68c7c2abea42efee"
+ hash: "dffaa2dd4d6dd89a1b26d5db38906059"
}
Frame {
msec: 1792
- hash: "8f80127b2f8d6fc10aa84062544cc381"
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
}
Frame {
msec: 1808
@@ -514,11 +514,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "gridview2.1.png"
+ hash: "77d5193bc5f53fe5cb98a236c55f841e"
}
Frame {
msec: 1936
- hash: "77d5193bc5f53fe5cb98a236c55f841e"
+ image: "gridview2.2.png"
}
Frame {
msec: 1952
@@ -554,23 +554,23 @@ VisualTest {
}
Frame {
msec: 2048
- hash: "a45d2630872a14541f39b862e15ff461"
+ hash: "1f046afe50ee5e1fc07e89a40528351c"
}
Frame {
msec: 2064
- hash: "714711d7382ef8bba5fb39e2e44bd59c"
+ hash: "132fbaa8fc2890d48f1916a25cb09887"
}
Frame {
msec: 2080
- hash: "63deed0356e761f94f88be18a7d10053"
+ hash: "e904c892dc27ff1700009470f234ce0d"
}
Frame {
msec: 2096
- hash: "d5b4fc1b568a4a1b63a91b422272c704"
+ hash: "0968397c7a209059cd466c61ac891081"
}
Frame {
msec: 2112
- hash: "b6d2c80925cc6b4b7b297bd6ee903c7c"
+ hash: "d5b4fc1b568a4a1b63a91b422272c704"
}
Key {
type: 7
@@ -582,31 +582,31 @@ VisualTest {
}
Frame {
msec: 2128
- hash: "38117482196360353586cb7ace593894"
+ hash: "a980a2e7bd10328fbd4400e799aa7c24"
}
Frame {
msec: 2144
- hash: "2301f3a148bf4e311cc8ce011ddf65f8"
+ hash: "b74be5349822d52ced201d7f34a96122"
}
Frame {
msec: 2160
- hash: "2a4982a0961f89a15618f8d4c2081f5a"
+ hash: "f7c6dbcd7d55b3230af463098f346bd8"
}
Frame {
msec: 2176
- hash: "acf8666d6a8a29925f3895aa8e93f713"
+ hash: "393358a0ee7636a535f14f0dc9c3d609"
}
Frame {
msec: 2192
- hash: "967ed026bc92a6d2747c5227105543a6"
+ hash: "cad337b87b629b1eee78407aacfd279e"
}
Frame {
msec: 2208
- hash: "ff72f3fb95f25990c99c1c14cfef57da"
+ hash: "d90b762e62867e3ff928160bed85d2ff"
}
Frame {
msec: 2224
- hash: "0874a4f863596c3860dcf5b1f7f6ceb2"
+ hash: "520445d8619ad9bdde0db0e61f17567c"
}
Frame {
msec: 2240
@@ -658,31 +658,31 @@ VisualTest {
}
Frame {
msec: 2400
- hash: "7c4bbf0423d63d7642d218cac56a6215"
+ hash: "5c9801ffdb07be53524cf0a4f8709ee4"
}
Frame {
msec: 2416
- hash: "e8c77dbc89721b51549f8d46453fe09d"
+ hash: "adef25d77f816e40ec02886187f456bf"
}
Frame {
msec: 2432
- hash: "7953503590b639872ac12215695e8cea"
+ hash: "56290066fa32054bb7e1669bbda3f3bb"
}
Frame {
msec: 2448
- hash: "edaee946a2e25fed6de9acfda0d44a14"
+ hash: "101b94bcf3f536bd64f0ac50f21cd5de"
}
Frame {
msec: 2464
- hash: "4996ef39bb0122c10d65f8dd8674b386"
+ hash: "edaee946a2e25fed6de9acfda0d44a14"
}
Frame {
msec: 2480
- hash: "ede7c6ca9d6deb7819c3715e98755d6e"
+ hash: "b170b60632b17595713dd911afc46fcc"
}
Frame {
msec: 2496
- hash: "e703fad2fcf9244ec9865200c7d17ce3"
+ hash: "57550914cd214025c6b1f3dfa446417f"
}
Key {
type: 7
@@ -694,23 +694,23 @@ VisualTest {
}
Frame {
msec: 2512
- hash: "e2bfc16fd893bb3eb0e5df89a0169af3"
+ hash: "3fd7252f5e61e3c348219a54fd5b95d9"
}
Frame {
msec: 2528
- hash: "cfd0eb2bc378bd46644f3f7820150685"
+ hash: "c6c27dd386e40bc0a02ad8104301d391"
}
Frame {
msec: 2544
- hash: "442b05b04762c2bcda291aaa0341398e"
+ hash: "dd476c04d3612f940e1959030ee8e264"
}
Frame {
msec: 2560
- hash: "55842a6503057eea98e2075ef160873e"
+ hash: "f2f8d9bb8a1865237398421f6a6d89dc"
}
Frame {
msec: 2576
- hash: "730f80233dacf1119660a76d2a34c5fc"
+ hash: "d4a48ee79a18cc5c0bc123fbb40c3efd"
}
Frame {
msec: 2592
@@ -766,23 +766,23 @@ VisualTest {
}
Frame {
msec: 2768
- hash: "4d04c12bc7fab0b22df3135bf3a87a22"
+ hash: "f13bc957329adad9dcb1ce0c408eeaaf"
}
Frame {
msec: 2784
- hash: "fdca5a3f8312452feba7f37b1caa6419"
+ hash: "9a676805f3474f924cbe7ea21ee9dcab"
}
Frame {
msec: 2800
- hash: "97b955e0f8cde30299b238d9ac0eb308"
+ hash: "f0161b0d27757137bcb7fd3e6db2280c"
}
Frame {
msec: 2816
- hash: "19664de1a738458810896959ba4087ad"
+ hash: "c7034a0e8956c9f483c128a934d68fa7"
}
Frame {
msec: 2832
- hash: "4f9a4b6de6a2969e4639076a8f7c258e"
+ hash: "19664de1a738458810896959ba4087ad"
}
Key {
type: 7
@@ -794,31 +794,31 @@ VisualTest {
}
Frame {
msec: 2848
- hash: "a10f18aa686be2681a48082ec9f01df7"
+ hash: "c5d5ff1884dd0ede23097530c249678c"
}
Frame {
msec: 2864
- hash: "b8f39a6cca377dd573429d879286dd63"
+ hash: "131ae4a26ad06bbef105668d30e154aa"
}
Frame {
msec: 2880
- image: "gridview2.2.png"
+ hash: "5d6ba09a5038e00007af0fa3f89b67b8"
}
Frame {
msec: 2896
- hash: "3301e52a46efbc49882401c77853ffde"
+ image: "gridview2.3.png"
}
Frame {
msec: 2912
- hash: "0c614597f17496ebc701efe7b0c1fbb6"
+ hash: "9d5ee2458abc5dfd56abfd42c906270f"
}
Frame {
msec: 2928
- hash: "6dda2d6b034c932e279cf216c9b3e6ad"
+ hash: "823b5d63768f5a18e795d5ed61f4dec8"
}
Frame {
msec: 2944
- hash: "7bf08cd5fe3ad3f83bbef28f452e0545"
+ hash: "1b7ebcf0e3d68e429cb04966120985e5"
}
Frame {
msec: 2960
@@ -854,35 +854,35 @@ VisualTest {
}
Frame {
msec: 3056
- hash: "0fe7d46e7c18ce7bb5a098c5c662d557"
+ hash: "1a8a32127c1b699bc282b0c209117a00"
}
Frame {
msec: 3072
- hash: "cd5df541cc1ed545bc27da9e4a937261"
+ hash: "2f5f2ab12410c070a7c05a1674e273fe"
}
Frame {
msec: 3088
- hash: "35762467b83fee1870cff9b0436994d3"
+ hash: "afe7c2cd74cc90d67e8c068eaf5988eb"
}
Frame {
msec: 3104
- hash: "75a620b42caabf5b1576041dbd4c2808"
+ hash: "e063d9eb45dc42b3f8b66937b7b4c19a"
}
Frame {
msec: 3120
- hash: "f1b06290a6cbd48b8d3d4ce1e42ed754"
+ hash: "75a620b42caabf5b1576041dbd4c2808"
}
Frame {
msec: 3136
- hash: "8e1a50dc082828587a4656117760a852"
+ hash: "2e2b9db4d2f19035c7c29489332b2550"
}
Frame {
msec: 3152
- hash: "aae8e5f166e736040138d8e222a844dd"
+ hash: "32370cba80db8eaf1f5cd9b73d3472ed"
}
Frame {
msec: 3168
- hash: "f69e5cf2bcb26fe49126776695b0b7e0"
+ hash: "3a79c47a8eb8bb79316e61a7eed58e57"
}
Key {
type: 7
@@ -894,19 +894,19 @@ VisualTest {
}
Frame {
msec: 3184
- hash: "7b482fece0255ea07496ef0545b008a2"
+ hash: "c84e47182ef6ebec61163f9b42d03c64"
}
Frame {
msec: 3200
- hash: "3f96eaebfebe8d4eeb347b201b59ab11"
+ hash: "6a0a83a39e6ab82b5437d46468e4776d"
}
Frame {
msec: 3216
- hash: "9943626d2226c3be711c8213906133f0"
+ hash: "945929656c1d27bcba51ce908e72a770"
}
Frame {
msec: 3232
- hash: "fd5fd8177b3957c27f1de0d95621351a"
+ hash: "506283ccfe9670633ce0bf60b437b37b"
}
Frame {
msec: 3248
@@ -958,31 +958,31 @@ VisualTest {
}
Frame {
msec: 3408
- hash: "fb437f6c23561092a124e498f1604ff2"
+ hash: "7d12bcac0fcaaff7467c444ab89f1e06"
}
Frame {
msec: 3424
- hash: "402ba144bbb7260eec4553e68eb35cda"
+ hash: "2f4538eec0c704af25b0a73d5a8dded4"
}
Frame {
msec: 3440
- hash: "76a983de9e85e0c81dfb8908252bd6c9"
+ hash: "4722cbfba5de7e4f7b3cee10bd0f75b5"
}
Frame {
msec: 3456
- hash: "09219f55fae47a0afed887ebf68a36bc"
+ hash: "3a6df7e6d771c6edc5218ad9a4bf6ab0"
}
Frame {
msec: 3472
- hash: "344e81cc262093facef2f6a235a734dc"
+ hash: "09219f55fae47a0afed887ebf68a36bc"
}
Frame {
msec: 3488
- hash: "8f1c5544eb537555b1c59a377b15e31d"
+ hash: "c04c0010761f572c5b16963699c70135"
}
Frame {
msec: 3504
- hash: "606b9bb549fe2e4bbd09d67b7dea0d1a"
+ hash: "52d59ffff0f2109f9a584f3582158798"
}
Key {
type: 7
@@ -994,23 +994,23 @@ VisualTest {
}
Frame {
msec: 3520
- hash: "63e239c97bd01a61cb31ef2869e7f47c"
+ hash: "9b1d58189c56205ba8963671bfb86742"
}
Frame {
msec: 3536
- hash: "f7c176550c39f8a1ad64590cf33a60a4"
+ hash: "7de84895e12919ffe935b23372db95db"
}
Frame {
msec: 3552
- hash: "8581cb14ed81efdf9abb638b5e542cc3"
+ hash: "d9c5b4c2a7831c216fe2266fe26306b0"
}
Frame {
msec: 3568
- hash: "7a1e9354ecc49d8bc27d303c7bdc81f9"
+ hash: "1c2bc039c48e7e9da07165f405a6f207"
}
Frame {
msec: 3584
- hash: "610288b97276ee03702ed8a814ef333d"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 3600
@@ -1074,19 +1074,19 @@ VisualTest {
}
Frame {
msec: 3808
- hash: "9713c6b9aff051dd0cc45c545d34b688"
+ hash: "abf9f5ef21fb62e5ad89ae2640a5a7e1"
}
Frame {
msec: 3824
- hash: "1f8fd4d759e343720a8681b6ad126b72"
+ hash: "58103d91498617585163e0508bdb724d"
}
Frame {
msec: 3840
- image: "gridview2.3.png"
+ hash: "c46ea52b070681155466b30096379c4f"
}
Frame {
msec: 3856
- hash: "8550d916d91a40b0c3a886b962e07ffc"
+ image: "gridview2.4.png"
}
Key {
type: 7
@@ -1098,143 +1098,143 @@ VisualTest {
}
Frame {
msec: 3872
- hash: "df0c2e474139e79429bfc19c79a65ef8"
+ hash: "523667a6f3213fb67de1744636780831"
}
Frame {
msec: 3888
- hash: "acfb99d081d754276e5ed59bd590aeab"
+ hash: "f0b7d38f695a29f6787dc3683a05a7c8"
}
Frame {
msec: 3904
- hash: "2b34cd101b442f7a3de2893fd5514c16"
+ hash: "1e5cf55e27217e67a5deb89e2d46349a"
}
Frame {
msec: 3920
- hash: "df92ced66faa1d59354d8010278438ec"
+ hash: "c49869491f484d07da838a21564e5e19"
}
Frame {
msec: 3936
- hash: "dd39a8e6fa3784453461193a6da416cd"
+ hash: "1acce2b796476d2d7d130749b06f334f"
}
Frame {
msec: 3952
- hash: "5670e8f91ea2df451f0974a51cd77d7d"
+ hash: "19ee6550b52517345859f9feb0b0d5a4"
}
Frame {
msec: 3968
- hash: "74b97a09bfe7400872a2c6214e04a5ac"
+ hash: "d2f360af319c740ad095ee0a463fa6fa"
}
Frame {
msec: 3984
- hash: "cfd55b963506ab54cf09a7311e84bcc9"
+ hash: "032326c6cf2a9da09c2388626ce942ef"
}
Frame {
msec: 4000
- hash: "59657ee9293c03f064d62de826931435"
+ hash: "ba2a7178b7c68001ecfdfea053507d0e"
}
Frame {
msec: 4016
- hash: "31f6a4adf31be5ed0af0ea4097e3acee"
+ hash: "9afddf683c810e288ed0da2fa44c5182"
}
Frame {
msec: 4032
- hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76"
+ hash: "93a7145e4bafa1e40a1db013b1c4337c"
}
Frame {
msec: 4048
- hash: "9dc38985113124130e2ca7950e0bd144"
+ hash: "3d48687ecb20a8670dd656c5705a0797"
}
Frame {
msec: 4064
- hash: "786e6e8b9e74876a6f393d61a78b8fc7"
+ hash: "7578264d5ea215f7fde90478ba5e6d32"
}
Frame {
msec: 4080
- hash: "1f4d59a4e4684aab309363a711b30006"
+ hash: "fb84bbce52e9c4dc4efc1eed7e863007"
}
Frame {
msec: 4096
- hash: "a11e332de151b43051796e16dbcf75c3"
+ hash: "df5d88d8421af767057fc4b3d0de23b1"
}
Frame {
msec: 4112
- hash: "1a0e82029ae107cb2a018786752433ff"
+ hash: "dae3e3e10fe7e0ddcf10a7bb4ecc3f1a"
}
Frame {
msec: 4128
- hash: "b14c51977c7fbf51f9cf6fec309bff6a"
+ hash: "eb15ba34411afd416dea5bc2b18cfb27"
}
Frame {
msec: 4144
- hash: "2b418f811992399c3f87c268db745632"
+ hash: "5f51ade6a1400093e9dd2b80d6f7a6ca"
}
Frame {
msec: 4160
- hash: "0e9a056207053ca98c4e9f42de244c62"
+ hash: "5e240752b752ca2ed4e6087f4deb0fbf"
}
Frame {
msec: 4176
- hash: "1945c3f9e3a1337e7d111e15adea345f"
+ hash: "ae1931b9f168211c44c7269a245635fd"
}
Frame {
msec: 4192
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4208
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4224
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4240
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4256
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4272
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4288
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4304
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4320
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4336
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4352
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4368
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4384
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4400
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4416
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Key {
type: 6
@@ -1246,31 +1246,31 @@ VisualTest {
}
Frame {
msec: 4432
- hash: "d8cf36b6cc15a01ead815d814ae81cb4"
+ hash: "83588693715deadea8b875d6c6547371"
}
Frame {
msec: 4448
- hash: "1945c3f9e3a1337e7d111e15adea345f"
+ hash: "ae1931b9f168211c44c7269a245635fd"
}
Frame {
msec: 4464
- hash: "0e9a056207053ca98c4e9f42de244c62"
+ hash: "a8e4b69162a6298929c12a91e60f20c1"
}
Frame {
msec: 4480
- hash: "2b418f811992399c3f87c268db745632"
+ hash: "ca4694bbbdc206c46600c894ed853390"
}
Frame {
msec: 4496
- hash: "b14c51977c7fbf51f9cf6fec309bff6a"
+ hash: "21b2f2ee716d6b28066d44bfdc57babf"
}
Frame {
msec: 4512
- hash: "1a0e82029ae107cb2a018786752433ff"
+ hash: "d37df25a59f3ba88b78f548521a6e5b2"
}
Frame {
msec: 4528
- hash: "a11e332de151b43051796e16dbcf75c3"
+ hash: "b554cb62b97bbbb671d9b34389d4187a"
}
Key {
type: 7
@@ -1282,75 +1282,75 @@ VisualTest {
}
Frame {
msec: 4544
- hash: "1f4d59a4e4684aab309363a711b30006"
+ hash: "d28889303f98c47665247009bcfd68e7"
}
Frame {
msec: 4560
- hash: "786e6e8b9e74876a6f393d61a78b8fc7"
+ hash: "80e7808641fc79c893a02842f641249b"
}
Frame {
msec: 4576
- hash: "9dc38985113124130e2ca7950e0bd144"
+ hash: "4f3a39e8c61ad9197e7f24058671e510"
}
Frame {
msec: 4592
- hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76"
+ hash: "ba2a7178b7c68001ecfdfea053507d0e"
}
Frame {
msec: 4608
- hash: "31f6a4adf31be5ed0af0ea4097e3acee"
+ hash: "ca1c72729c41845151820d362721a1e7"
}
Frame {
msec: 4624
- hash: "59657ee9293c03f064d62de826931435"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4640
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4656
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4672
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4688
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4704
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4720
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4736
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4752
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4768
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4784
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4800
- image: "gridview2.4.png"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4816
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ image: "gridview2.5.png"
}
Key {
type: 6
@@ -1362,27 +1362,27 @@ VisualTest {
}
Frame {
msec: 4832
- hash: "23aa652a0de7fced4a780d72f0940a1b"
+ hash: "ac37c4abbbc11b8e2bf8e0e8dae6180f"
}
Frame {
msec: 4848
- hash: "d46eea049d6156a5e85d9c6811d9d367"
+ hash: "1176eed6f023a843a646517e60f848b5"
}
Frame {
msec: 4864
- hash: "d5796ae85247cb8502f92f0d044e4e1f"
+ hash: "26eca367a7fe38ac123fa63cfbb20421"
}
Frame {
msec: 4880
- hash: "90987ac49c1a4e6b668436e3ff631e6c"
+ hash: "d471f06d345e5a09bf4ea540b80fe1e3"
}
Frame {
msec: 4896
- hash: "c38d69759ad80242b1fe83ba191cd421"
+ hash: "e3694d271e363df1b212d975a464df62"
}
Frame {
msec: 4912
- hash: "09d08aed76a04e492d8a39cc4dd2b8f5"
+ hash: "3dc24a10bbf6a6a0ba85f50de8646305"
}
Key {
type: 7
@@ -1394,175 +1394,175 @@ VisualTest {
}
Frame {
msec: 4928
- hash: "9671d2ff9a2ef46ce3c750a1965404a4"
+ hash: "08e7979e36a9a8a500193020ab68c616"
}
Frame {
msec: 4944
- hash: "f55857816d666ece4a7987a70883b3d1"
+ hash: "bd91601e455c2c37c786f907bd20b447"
}
Frame {
msec: 4960
- hash: "a2d80527b30316d9120b057bbfcfa666"
+ hash: "e4b676fc9752f3bff5353a2bf528b3ac"
}
Frame {
msec: 4976
- hash: "87ca69287c1469cbc7e65d1673016de7"
+ hash: "c772188a68cc0958c247145005d580ef"
}
Frame {
msec: 4992
- hash: "51588c7ebbe2dcd87a3c9bebf028aee3"
+ hash: "eded946d9e7c6418e3933624fe2f1dbf"
}
Frame {
msec: 5008
- hash: "917a9a171273fe9fd4c450eeed6f58ed"
+ hash: "46a2dd2bfa66a3781a00fe466e05eeb0"
}
Frame {
msec: 5024
- hash: "6e7ade250a9a9692caee2a220dd2ac53"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5040
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5056
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5072
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5088
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5104
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5120
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5136
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5152
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5168
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5184
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5200
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5216
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5232
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5248
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5264
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5280
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5296
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5312
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5328
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5344
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5360
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5376
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5392
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5408
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5424
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5440
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5456
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5472
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5488
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5504
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5520
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5536
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5552
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5568
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5584
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5600
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Key {
type: 6
@@ -1574,31 +1574,31 @@ VisualTest {
}
Frame {
msec: 5616
- hash: "ca2dcb16d553889a3a57b48700c2a595"
+ hash: "4e11a072f1136c2c6298e6cfb25700dd"
}
Frame {
msec: 5632
- hash: "c5c9aab9bea757f1c451e89df72bd836"
+ hash: "e44ee0f83cbd176620d5c91851402b5b"
}
Frame {
msec: 5648
- hash: "a8cf3085f8c3b743f3f15db1ad7b8801"
+ hash: "c18bc8109b350673faf64b4722e86f3d"
}
Frame {
msec: 5664
- hash: "c25a92050eced1c304506572723273a3"
+ hash: "1b552ed8555c61e1fa664e6c88aee64d"
}
Frame {
msec: 5680
- hash: "cff981039c1a3eb6c3c1a20f142fbae2"
+ hash: "11284c77b23ba4b4b0c664b387dc9d48"
}
Frame {
msec: 5696
- hash: "930765587fe3355873bbdff66b812b74"
+ hash: "fbd015d60a8ada6a671301d01846b4c8"
}
Frame {
msec: 5712
- hash: "6a60f97c7b39add465e1bd366e9c644b"
+ hash: "1456fca256ab6fdf930dd079ee8b77a7"
}
Key {
type: 7
@@ -1610,99 +1610,99 @@ VisualTest {
}
Frame {
msec: 5728
- hash: "7a1fd3c488d1064a75dc598c9a773291"
+ hash: "bf7f688319a89ade564734d7fc658167"
}
Frame {
msec: 5744
- hash: "e2ecd7e68e27eb3d2dcb5e368d3ee5a0"
+ hash: "68819e722d6032881824448ed63248b2"
}
Frame {
msec: 5760
- image: "gridview2.5.png"
+ hash: "510589f35813c6c1d6484f614da92ae3"
}
Frame {
msec: 5776
- hash: "20f3aaca2efc3066076e73d1d95e5363"
+ image: "gridview2.6.png"
}
Frame {
msec: 5792
- hash: "b18d476cadc36e22dddc3185f595c123"
+ hash: "37f9e630ac66e999046d686078cf5a68"
}
Frame {
msec: 5808
- hash: "8cbc47555178c8ee355774eab17b4b19"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5824
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5840
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5856
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5872
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5888
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5904
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5920
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5936
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5952
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5968
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 5984
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6000
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6016
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6032
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6048
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6064
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6080
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6096
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Key {
type: 6
@@ -1714,39 +1714,39 @@ VisualTest {
}
Frame {
msec: 6112
- hash: "e488fb76fb550fba51b95bee3fee80d5"
+ hash: "b534ccea1f69ececc54d943e73b7e9f4"
}
Frame {
msec: 6128
- hash: "8c2fab0c73d1cfbeeb0ec937085d6b3b"
+ hash: "f45eb6005981864d7e4d1379a4390b02"
}
Frame {
msec: 6144
- hash: "5d9353517177ef7c6314d8a65cb009ec"
+ hash: "a644905acb7cf6e4d9351f1140985a98"
}
Frame {
msec: 6160
- hash: "ed8de504f7e2028cd369c1555314fd81"
+ hash: "011be55b909843b2506c5a97e7571e51"
}
Frame {
msec: 6176
- hash: "8fe84d8badbe5bd08d097ba6bda10611"
+ hash: "35b224d84ae3a4bdba0ace487471f0a6"
}
Frame {
msec: 6192
- hash: "d77419a55a3cf933505e793bb258e6af"
+ hash: "dcfd5536e6065a19650fe67914211223"
}
Frame {
msec: 6208
- hash: "457ac82be02e2f5e08e51ccc78c94781"
+ hash: "8ad99c352901c54ecc601ca2ac8c1f08"
}
Frame {
msec: 6224
- hash: "e57e2852f065afff9c24c5bc9f29edee"
+ hash: "e4774d15b45865b9f445f679cd0414ea"
}
Frame {
msec: 6240
- hash: "f72cd6ad3324936c3a18c264e23e05a9"
+ hash: "a5b78dfb09b9031f0aabfa7439cbc433"
}
Key {
type: 7
@@ -1758,127 +1758,127 @@ VisualTest {
}
Frame {
msec: 6256
- hash: "a4bf7eae6fc7a05239d09421ae95304a"
+ hash: "20b87dc26080f8e8e070b2fa299f496a"
}
Frame {
msec: 6272
- hash: "423f3bd07df8bee25818644c07201a3c"
+ hash: "0e6d05d1df8328ca17d953476d19ae14"
}
Frame {
msec: 6288
- hash: "225e9c698424f287b9458b7839b4479b"
+ hash: "e2b1ec6b985bbc57f0384a49f3af545c"
}
Frame {
msec: 6304
- hash: "0f463db7e4acc184a4efb7b5e5c0d397"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6320
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6336
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6352
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6368
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6384
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6400
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6416
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6432
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6448
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6464
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6480
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6496
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6512
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6528
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6544
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6560
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6576
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6592
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6608
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6624
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6640
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6656
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6672
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6688
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6704
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6720
- image: "gridview2.6.png"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6736
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ image: "gridview2.7.png"
}
Key {
type: 6
@@ -1890,27 +1890,27 @@ VisualTest {
}
Frame {
msec: 6752
- hash: "b92ad1c3be35c46c0d12bf7701c56f23"
+ hash: "8d36bc2f3ab614d19f3ec8821f3e81ed"
}
Frame {
msec: 6768
- hash: "738f6bcc043d221488285c7e529b1d1c"
+ hash: "6cbeb42ae5aa75638fedcaf38d25370a"
}
Frame {
msec: 6784
- hash: "cb0a4e8e79372dd67e8ecfea2143a47c"
+ hash: "fe3b287b14cbfbca4e19a2de979e9e16"
}
Frame {
msec: 6800
- hash: "544d1825b36f4e7950c1a62b26c1fd9b"
+ hash: "69650da29b84b8009c30de516fb9b623"
}
Frame {
msec: 6816
- hash: "df99396622342b4f092b0db34a224c3d"
+ hash: "5cbcaf1e6916aa635e31ac4219e387f7"
}
Frame {
msec: 6832
- hash: "47391f51e5df2249a6ca1f1f6e8e80e0"
+ hash: "acb7f98da26b70bebe20336c51449318"
}
Key {
type: 7
@@ -1922,19 +1922,19 @@ VisualTest {
}
Frame {
msec: 6848
- hash: "d8079a874ca18d00aeeb611effcbeb8b"
+ hash: "8588b82fadca8ea18d4cc268508119e0"
}
Frame {
msec: 6864
- hash: "4cfd9264af6935aca425da75ebb2d7cc"
+ hash: "e2cf9055220b1c8126423df30e3607ed"
}
Frame {
msec: 6880
- hash: "aee6547cb653cd2d56d07285d836149d"
+ hash: "d06e77ff2044ba3f6fc1664af5720a0a"
}
Frame {
msec: 6896
- hash: "969720f17eae51258e2e143e14bfa737"
+ hash: "b931ef84ecc38676d602638081b1f126"
}
Frame {
msec: 6912
@@ -1998,203 +1998,203 @@ VisualTest {
}
Frame {
msec: 7152
- hash: "beeaec4b983c970ae448e33047dfdfea"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7168
- hash: "7c415ab1b7d8e25b71af75d3eec8ee4a"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7184
- hash: "8913037e57b9a6a58b68f2d6e69b1bd1"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7200
- hash: "19e59e9409fdaf90ccf75606b58688b7"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7216
- hash: "1ae71ef5b1006f637bd8df0769af65a6"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7232
- hash: "1f0aa8b368b2dbccafd54b923d8cce95"
+ hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad"
}
Frame {
msec: 7248
- hash: "c5079fb25a8c80a995d7aa5fbbd91428"
+ hash: "d30ed063d99d02f6d8302847e83d60a1"
}
Frame {
msec: 7264
- hash: "59f41220fa5d23db298c9e94f115c17b"
+ hash: "30b128c6248cb35ee4c55e1c2129a19c"
}
Frame {
msec: 7280
- hash: "48259dfe8b266d9e7f50b187be98c3cb"
+ hash: "1ae71ef5b1006f637bd8df0769af65a6"
}
Frame {
msec: 7296
- hash: "f7554552598351c3b8dfcbe3ebc32b3b"
+ hash: "6bd6f0c35aeede01d1a8e42c81cd6fb8"
}
Frame {
msec: 7312
- hash: "219e9cd84d7e5c5c0e6cb80100aa3ab5"
+ hash: "ca90dcb70d416616dcae2df84956cff1"
}
Frame {
msec: 7328
- hash: "5578e870ee8ce00bce5a59bb25e3d0a9"
+ hash: "a33bc4f7c40fa3eb36803c20222d75f6"
}
Frame {
msec: 7344
- hash: "4d9cebbf750c03380694245e0e22ab94"
+ hash: "12430a710362b47fef8dfc022b789e07"
}
Frame {
msec: 7360
- hash: "a60a8032e97ed0a3caa05012c1283de5"
+ hash: "a18abef207f5f6bbd260ca98cce91380"
}
Frame {
msec: 7376
- hash: "3bee20b349a7e9d67f7770ede6da8673"
+ hash: "e853ea2eba5e3baeba0f43e57d2415ba"
}
Frame {
msec: 7392
- hash: "d8c34576c25fb8b5e4fa12680ac32e99"
+ hash: "294cff3e6d3a1101f76d2ecce14e11a1"
}
Frame {
msec: 7408
- hash: "cd1360aa7db7c3b2f2012dfc44de2198"
+ hash: "c38ee992a1b435c12a66e4d49d78c2ed"
}
Frame {
msec: 7424
- hash: "cd82782f63c9a7d21d51b3440c2f038b"
+ hash: "54775aed3a6283c1fa330d65de5bc70c"
}
Frame {
msec: 7440
- hash: "e59061967a841aa45607c0828b687527"
+ hash: "eba9a696d9ab1e8da7c6c59787d3f311"
}
Frame {
msec: 7456
- hash: "01962406c9aaf1aa8bf3ab49e30ddf5f"
+ hash: "2048cd8abb56be34f9e475d7f92b6153"
}
Frame {
msec: 7472
- hash: "5a5732a568189e598c7985ee806bc67e"
+ hash: "d56b4a04f1d2835a0852ea20e8e2f451"
}
Frame {
msec: 7488
- hash: "54775aed3a6283c1fa330d65de5bc70c"
+ hash: "f5afb489b7aee20b45c9f5eb5a9eb8d7"
}
Frame {
msec: 7504
- hash: "66640b4a5c1e68924b25de24e3c3f008"
+ hash: "26f25129f9d2c73a7a5168c73e299919"
}
Frame {
msec: 7520
- hash: "76999d3125f20ba47dbdff38ee722a8a"
+ hash: "6f23e3c4ec738903b5011cbee1141b00"
}
Frame {
msec: 7536
- hash: "5159c81533bee8825cff11910bcb90dc"
+ hash: "e10d4bf08980ea7d079a2f359ee62b95"
}
Frame {
msec: 7552
- hash: "ac0295495345987d1e000f6bb2436927"
+ hash: "eb0a656e8feabcb131e59c66b64f7d09"
}
Frame {
msec: 7568
- hash: "d56b4a04f1d2835a0852ea20e8e2f451"
+ hash: "94cfa3f71326f6e188fee32c0970de30"
}
Frame {
msec: 7584
- hash: "ae41fe23e2ab508d7642973c0d9d35b0"
+ hash: "8bc4274a3f0498d600405409f69c1d16"
}
Frame {
msec: 7600
- hash: "730ca01fbee6ec4928715ec52773c06c"
+ hash: "995cb12e1d07488ae4139d2c67552dc6"
}
Frame {
msec: 7616
- hash: "ad1fa52c617a2b119d61eb9fb7d58a82"
+ hash: "2d9d9f3fb43e2280b0dea054dc8d7dd4"
}
Frame {
msec: 7632
- hash: "c74321a822b515a393e8e218bd45e8e3"
+ hash: "dd68eb502e1fe114a24d902b50a5dff9"
}
Frame {
msec: 7648
- hash: "a9e2f3bee1d47166204c74bdf90cd8c8"
+ hash: "b2738b11e34c5d7840e9aacc443cc1f0"
}
Frame {
msec: 7664
- hash: "e10d4bf08980ea7d079a2f359ee62b95"
+ hash: "de148713c156476ca7c4021633596782"
}
Frame {
msec: 7680
- image: "gridview2.7.png"
+ hash: "0e273dbaaab76058b6e04a830bbd80d3"
}
Frame {
msec: 7696
- hash: "9f0ba6051e684e54ff4e36d980a7e600"
+ image: "gridview2.8.png"
}
Frame {
msec: 7712
- hash: "aa6268d8d7fb3d2b91db3e225e8c818a"
+ hash: "5dcad019a1c0eaaab381a7602e1914ff"
}
Frame {
msec: 7728
- hash: "8e547e55279b1929f42bf51e753f142e"
+ hash: "e046dc0869cc629de5037214af1d58f8"
}
Frame {
msec: 7744
- hash: "5386c71f8d6701379e177f161d714da2"
+ hash: "affc71688994d6b6763e78305ba1d6b3"
}
Frame {
msec: 7760
- hash: "a184e9e6012c72fc1aeaed9f98b0fb1e"
+ hash: "d5ec397fdf17bf864e4575543c535dad"
}
Frame {
msec: 7776
- hash: "777a6b70ca77c45e2e5e3914cc328dcb"
+ hash: "b37cb5816c2077b8018f78985b91fdeb"
}
Frame {
msec: 7792
- hash: "424f73f25a1e91126f951838d45adc3b"
+ hash: "a3060fa79b1f7f0d9e61ad8c69be19ed"
}
Frame {
msec: 7808
- hash: "3f7f2eb6b9a5d19fbfcd700baf566dfb"
+ hash: "236dcbaf20e11335efc64b2ce87b551d"
}
Frame {
msec: 7824
- hash: "c3c4c72b25c2295b82a5fd7454942f77"
+ hash: "09af1c488b56dc3c7c3893b024f6d53f"
}
Frame {
msec: 7840
- hash: "3b35e93d3eb9d28c5c03d6d353f805d2"
+ hash: "ef2bf66ac68002102476d3cfe4501cb7"
}
Frame {
msec: 7856
- hash: "5dcad019a1c0eaaab381a7602e1914ff"
+ hash: "165c02de63604aa118d9f8995e6b45af"
}
Frame {
msec: 7872
- hash: "602a5c569555767413bf445af44c744f"
+ hash: "fb790a0e4bc20afe24639dadf50a03c0"
}
Frame {
msec: 7888
- hash: "3e9facab95dae772f695b6f7c5175063"
+ hash: "881298b629aeaeb23fa9e9eb446912d2"
}
Frame {
msec: 7904
- hash: "0921220ec36ca7b25eaae699872a2006"
+ hash: "2175ff436c42616147b2e71b91e34060"
}
Frame {
msec: 7920
- hash: "1d5fa7fd630af62bcc805bdc6686df37"
+ hash: "85bc0cd40ddc08814a2c3677e7e43bcf"
}
Frame {
msec: 7936
- hash: "165c02de63604aa118d9f8995e6b45af"
+ hash: "33d81c39d16c6a326012499796e50e03"
}
Frame {
msec: 7952
@@ -2370,11 +2370,11 @@ VisualTest {
}
Frame {
msec: 8640
- image: "gridview2.8.png"
+ hash: "33d81c39d16c6a326012499796e50e03"
}
Frame {
msec: 8656
- hash: "33d81c39d16c6a326012499796e50e03"
+ image: "gridview2.9.png"
}
Frame {
msec: 8672
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml
index c79e19f..95556f1 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml
@@ -38,7 +38,7 @@ Rectangle {
Component {
id: appHighlight
- Rectangle { width: 100; height: 100; color: "white"; z: 3000 }
+ Rectangle { width: 100; height: 100; color: "white"; z: 0 }
}
GridView {
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml
index 811e0e4..0dd9d0e 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml
@@ -1,6 +1,7 @@
import QtQuick 1.0
Rectangle {
+ property string skip: "Last bit is wrong (rest is probably right, just bitrot). QTBUG-14838"
width: 300; height: 400; color: "black"
ListModel {
@@ -45,7 +46,7 @@ Rectangle {
model: appModel; delegate: appDelegate; focus: true
keyNavigationWraps: true
- flickableData: [
+ flickableData: [//Presumably the different way of doing highlight tests more things
Rectangle {
color: "transparent"; border.color: "white"; border.width: 8; z: 3000
height: 100; width: 100
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.0.png
index 5b7b426..dd992cc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.1.png
index 7c27310..dd992cc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.2.png
index cbfdb23..887d395 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.3.png
index 5b7b426..055258d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.4.png
index 5af705e..dd992cc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.5.png
index af4395e..d3d35af 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.6.png
index cd12bc9..2028c96 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.6.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.7.png
index 471c86b..a667cf9 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.7.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.8.png
index 653905e..2f0967d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.8.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.qml
index b88bd83..001861d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/drag.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ image: "drag.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "drag.0.png"
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
}
Frame {
msec: 976
- hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ image: "drag.1.png"
}
Frame {
msec: 992
@@ -554,7 +554,7 @@ VisualTest {
}
Frame {
msec: 1920
- image: "drag.1.png"
+ hash: "a611a57ed2bdf4eaa5e13612346ecce7"
}
Mouse {
type: 5
@@ -566,7 +566,7 @@ VisualTest {
}
Frame {
msec: 1936
- hash: "978543d8f9688605625f40b960d79c28"
+ image: "drag.2.png"
}
Mouse {
type: 5
@@ -1426,7 +1426,7 @@ VisualTest {
}
Frame {
msec: 2880
- image: "drag.2.png"
+ hash: "9356ce797d12ae076af947cd0e658551"
}
Mouse {
type: 5
@@ -1446,7 +1446,7 @@ VisualTest {
}
Frame {
msec: 2896
- hash: "9356ce797d12ae076af947cd0e658551"
+ image: "drag.3.png"
}
Mouse {
type: 5
@@ -2290,7 +2290,7 @@ VisualTest {
}
Frame {
msec: 3840
- image: "drag.3.png"
+ hash: "668cc6d9d699b947a7c0f3ff4b26853f"
}
Mouse {
type: 5
@@ -2302,7 +2302,7 @@ VisualTest {
}
Frame {
msec: 3856
- hash: "668cc6d9d699b947a7c0f3ff4b26853f"
+ image: "drag.4.png"
}
Mouse {
type: 5
@@ -2962,7 +2962,7 @@ VisualTest {
}
Frame {
msec: 4800
- image: "drag.4.png"
+ hash: "c6d398d42d968763c7597728e86304f2"
}
Mouse {
type: 5
@@ -2974,7 +2974,7 @@ VisualTest {
}
Frame {
msec: 4816
- hash: "c0cadb7730838d553b146804c37506b0"
+ image: "drag.5.png"
}
Mouse {
type: 5
@@ -3850,7 +3850,7 @@ VisualTest {
}
Frame {
msec: 5760
- image: "drag.5.png"
+ hash: "f0454d80a51c5f2226bd45aba58dc1e9"
}
Mouse {
type: 5
@@ -3870,7 +3870,7 @@ VisualTest {
}
Frame {
msec: 5776
- hash: "7af87eb80fa9d87fe8d8b5e4a2fff5e1"
+ image: "drag.6.png"
}
Mouse {
type: 5
@@ -4730,7 +4730,7 @@ VisualTest {
}
Frame {
msec: 6720
- image: "drag.6.png"
+ hash: "bf4b18a73b53c0a554f9bb0ac32a465d"
}
Mouse {
type: 5
@@ -4742,7 +4742,7 @@ VisualTest {
}
Frame {
msec: 6736
- hash: "5e951eb6017a060287e398fcaf4aeba9"
+ image: "drag.7.png"
}
Mouse {
type: 5
@@ -5122,11 +5122,11 @@ VisualTest {
}
Frame {
msec: 7680
- image: "drag.7.png"
+ hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
}
Frame {
msec: 7696
- hash: "2c1ce07ab6ce0072f6cb205f1e5297e0"
+ image: "drag.8.png"
}
Frame {
msec: 7712
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png
index 993610f..87305b3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png
index 993610f..87305b3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png
index 12c6cf5..87305b3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png
index ccb9fdd..b268c5c 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png
index ace0752..3926b9b 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png
index 993610f..6956195 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.14.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.14.png
new file mode 100644
index 0000000..87305b3
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.14.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png
index e58c68b..87305b3 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png
index e58c68b..1d12691 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png
index cb6d2f8..1d12691 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png
index db6bea2..7f76076 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png
index c18bb34..02c6af0 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png
index c18bb34..15f0ec5 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png
index 3b56301..15f0ec5 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png
index 993610f..71bf9cd 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml
index 307fef6..c862678 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ image: "mousearea-flickable.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "mousearea-flickable.0.png"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Frame {
msec: 976
- hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ image: "mousearea-flickable.1.png"
}
Frame {
msec: 992
@@ -482,11 +482,11 @@ VisualTest {
}
Frame {
msec: 1920
- image: "mousearea-flickable.1.png"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Frame {
msec: 1936
- hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ image: "mousearea-flickable.2.png"
}
Frame {
msec: 1952
@@ -730,11 +730,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "mousearea-flickable.2.png"
+ hash: "4a60ab820ca66548384b2257b21de8ec"
}
Frame {
msec: 2896
- hash: "4a60ab820ca66548384b2257b21de8ec"
+ image: "mousearea-flickable.3.png"
}
Frame {
msec: 2912
@@ -970,11 +970,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "mousearea-flickable.3.png"
+ hash: "4a60ab820ca66548384b2257b21de8ec"
}
Frame {
msec: 3856
- hash: "4a60ab820ca66548384b2257b21de8ec"
+ image: "mousearea-flickable.4.png"
}
Frame {
msec: 3872
@@ -1202,7 +1202,7 @@ VisualTest {
}
Frame {
msec: 4576
- hash: "86b32befe0dada5bdce82a7dd14777ce"
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
}
Mouse {
type: 5
@@ -1222,7 +1222,7 @@ VisualTest {
}
Frame {
msec: 4592
- hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
}
Mouse {
type: 5
@@ -1242,7 +1242,7 @@ VisualTest {
}
Frame {
msec: 4608
- hash: "144eeb7c2a32cedb6ebba063501c9176"
+ hash: "a569789b082296415321ba11c859abe5"
}
Mouse {
type: 5
@@ -1262,7 +1262,7 @@ VisualTest {
}
Frame {
msec: 4624
- hash: "11120d6de575ffa639b6abb3af4afef7"
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
}
Mouse {
type: 5
@@ -1282,7 +1282,7 @@ VisualTest {
}
Frame {
msec: 4640
- hash: "ab4c936a81299adf080f3b14f7e6be49"
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
}
Mouse {
type: 5
@@ -1302,7 +1302,7 @@ VisualTest {
}
Frame {
msec: 4656
- hash: "6602009ffe3c0f3072640ebc8749b76f"
+ hash: "11120d6de575ffa639b6abb3af4afef7"
}
Mouse {
type: 5
@@ -1322,7 +1322,7 @@ VisualTest {
}
Frame {
msec: 4672
- hash: "8517007d5102af238935e93a3b38087f"
+ hash: "ab4c936a81299adf080f3b14f7e6be49"
}
Mouse {
type: 5
@@ -1342,7 +1342,7 @@ VisualTest {
}
Frame {
msec: 4688
- hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ hash: "c29ab366ba3f11de6452949c11310b4a"
}
Mouse {
type: 5
@@ -1362,7 +1362,7 @@ VisualTest {
}
Frame {
msec: 4704
- hash: "82f54d7e254edcf499ea12a63118e8a7"
+ hash: "34ef0279e3731447f1df97784b47648a"
}
Mouse {
type: 5
@@ -1382,7 +1382,7 @@ VisualTest {
}
Frame {
msec: 4720
- hash: "572cb62d69ccb973ea18d3b0eaff571b"
+ hash: "84df34cd981e0465aaaae47881de6c3b"
}
Mouse {
type: 5
@@ -1402,7 +1402,7 @@ VisualTest {
}
Frame {
msec: 4736
- hash: "79650397b868019909b931a32a115823"
+ hash: "837deeb2a92648d830acf29e829ebb53"
}
Mouse {
type: 5
@@ -1422,7 +1422,7 @@ VisualTest {
}
Frame {
msec: 4752
- hash: "43e50f4d4d37373e26af0a5d3cb64c4c"
+ hash: "572cb62d69ccb973ea18d3b0eaff571b"
}
Mouse {
type: 5
@@ -1442,7 +1442,7 @@ VisualTest {
}
Frame {
msec: 4768
- hash: "a0f8eb8a796f67c368b0a479e8d14681"
+ hash: "3d75735eefbf95f37e2a8605b9167ba1"
}
Mouse {
type: 5
@@ -1462,7 +1462,7 @@ VisualTest {
}
Frame {
msec: 4784
- hash: "01bf03313a0229e810a24e2adbbe9775"
+ hash: "c37507a29e3a6d80446ad68f2d92f266"
}
Mouse {
type: 5
@@ -1474,7 +1474,7 @@ VisualTest {
}
Frame {
msec: 4800
- image: "mousearea-flickable.4.png"
+ hash: "b66571ae47bf129be88dc66785a81a7d"
}
Mouse {
type: 5
@@ -1486,7 +1486,7 @@ VisualTest {
}
Frame {
msec: 4816
- hash: "aafb12a520eb443ee1348282f2c54e4a"
+ image: "mousearea-flickable.5.png"
}
Mouse {
type: 5
@@ -1506,7 +1506,7 @@ VisualTest {
}
Frame {
msec: 4832
- hash: "806d22bc3533c729cd10dc889c36902d"
+ hash: "363eca81f97f20f14e8d480f83d2bc7d"
}
Mouse {
type: 5
@@ -1518,7 +1518,7 @@ VisualTest {
}
Frame {
msec: 4848
- hash: "05b3013c9e42ed9ced7009d2e2999357"
+ hash: "72e75cfa62993593303b25cbff4af0e6"
}
Mouse {
type: 5
@@ -1538,7 +1538,7 @@ VisualTest {
}
Frame {
msec: 4864
- hash: "cb49adcd2c8afe27fd5926bd622added"
+ hash: "cc6619c7cd6e4e274df4729aad6cca46"
}
Mouse {
type: 5
@@ -1558,7 +1558,7 @@ VisualTest {
}
Frame {
msec: 4880
- hash: "d0b4215b43403c97d83250add6d2b6db"
+ hash: "0b16e524cd5253d07aa9b5855967fa71"
}
Mouse {
type: 5
@@ -1578,7 +1578,7 @@ VisualTest {
}
Frame {
msec: 4896
- hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
+ hash: "091d1ad7aba4b662cba98214c98a4707"
}
Mouse {
type: 5
@@ -1598,7 +1598,7 @@ VisualTest {
}
Frame {
msec: 4912
- hash: "29ca97cc573d3a1fde65320b61678c60"
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
}
Mouse {
type: 5
@@ -1610,7 +1610,7 @@ VisualTest {
}
Frame {
msec: 4928
- hash: "021bda841eaefa76ce5e1c97150af6f6"
+ hash: "7b41d651ad46341859d0188db341ae10"
}
Mouse {
type: 5
@@ -1630,7 +1630,7 @@ VisualTest {
}
Frame {
msec: 4944
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Mouse {
type: 5
@@ -1642,7 +1642,7 @@ VisualTest {
}
Frame {
msec: 4960
- hash: "c09f4002ed9d41f62bb1aaff95723cce"
+ hash: "1709dda08ce7494ff6d082cc5d93f0d2"
}
Mouse {
type: 5
@@ -1662,7 +1662,7 @@ VisualTest {
}
Frame {
msec: 4976
- hash: "7bb17b13db811b02c86a24a0051336d9"
+ hash: "390105f21526e1f8fda15666631578a1"
}
Mouse {
type: 5
@@ -1682,7 +1682,7 @@ VisualTest {
}
Frame {
msec: 4992
- hash: "da5c33ee9e9e1d9aaa7d5efa83b8bf69"
+ hash: "ee40862a59f14667c89fa62f380c10fb"
}
Mouse {
type: 5
@@ -1694,7 +1694,7 @@ VisualTest {
}
Frame {
msec: 5008
- hash: "3ca9742356b6ff833fd287a95520174a"
+ hash: "6d6cec95a6a2445d88b015ff76af032e"
}
Mouse {
type: 5
@@ -1714,7 +1714,7 @@ VisualTest {
}
Frame {
msec: 5024
- hash: "d1372239a681d1fccc25257b4a02fb39"
+ hash: "e87bf82b6a7a928a27bffd9cb2dd7604"
}
Mouse {
type: 5
@@ -1734,7 +1734,7 @@ VisualTest {
}
Frame {
msec: 5040
- hash: "1f37473ab2fb0643e11e4a41a2ee4561"
+ hash: "9a9d1e0b1d7b9291480b3ec641f354ce"
}
Mouse {
type: 5
@@ -1754,7 +1754,7 @@ VisualTest {
}
Frame {
msec: 5056
- hash: "1533c6ff17e79a47a5d3510aa85bcf8a"
+ hash: "d1372239a681d1fccc25257b4a02fb39"
}
Mouse {
type: 5
@@ -1774,7 +1774,7 @@ VisualTest {
}
Frame {
msec: 5072
- hash: "4cad3c6caf8d3009f63923df897c4723"
+ hash: "1f37473ab2fb0643e11e4a41a2ee4561"
}
Mouse {
type: 5
@@ -1794,7 +1794,7 @@ VisualTest {
}
Frame {
msec: 5088
- hash: "b81183233961b34c2a3f21a249b0fbfb"
+ hash: "1533c6ff17e79a47a5d3510aa85bcf8a"
}
Mouse {
type: 5
@@ -1814,7 +1814,7 @@ VisualTest {
}
Frame {
msec: 5104
- hash: "9f876eb93a16c24843dd6a5acd303ab3"
+ hash: "c5980322acf00a04efbd5e1b92aa0e98"
}
Mouse {
type: 5
@@ -1834,7 +1834,7 @@ VisualTest {
}
Frame {
msec: 5120
- hash: "237dd62011f4253970b946b335e3fb71"
+ hash: "b81183233961b34c2a3f21a249b0fbfb"
}
Mouse {
type: 5
@@ -1846,7 +1846,7 @@ VisualTest {
}
Frame {
msec: 5136
- hash: "6206ad3e633b6b1b068304caa4efe48a"
+ hash: "2dc2def0c748ac94d33d90d4a3610136"
}
Mouse {
type: 5
@@ -1858,7 +1858,7 @@ VisualTest {
}
Frame {
msec: 5152
- hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
}
Mouse {
type: 5
@@ -1870,7 +1870,7 @@ VisualTest {
}
Frame {
msec: 5168
- hash: "d9e953d132330f8a58a190d61aec6ec3"
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
}
Mouse {
type: 5
@@ -1890,7 +1890,7 @@ VisualTest {
}
Frame {
msec: 5184
- hash: "c1570ad4cb688ea51818e0a09e349daa"
+ hash: "237dd62011f4253970b946b335e3fb71"
}
Mouse {
type: 5
@@ -1902,11 +1902,11 @@ VisualTest {
}
Frame {
msec: 5200
- hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ hash: "6206ad3e633b6b1b068304caa4efe48a"
}
Frame {
msec: 5216
- hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ hash: "6206ad3e633b6b1b068304caa4efe48a"
}
Mouse {
type: 5
@@ -1918,7 +1918,7 @@ VisualTest {
}
Frame {
msec: 5232
- hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
}
Mouse {
type: 5
@@ -1930,7 +1930,7 @@ VisualTest {
}
Frame {
msec: 5248
- hash: "c6a81be579382f25ac583734897c2570"
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
}
Mouse {
type: 5
@@ -1942,11 +1942,11 @@ VisualTest {
}
Frame {
msec: 5264
- hash: "c6a81be579382f25ac583734897c2570"
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
}
Frame {
msec: 5280
- hash: "c6a81be579382f25ac583734897c2570"
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
}
Mouse {
type: 5
@@ -1958,7 +1958,7 @@ VisualTest {
}
Frame {
msec: 5296
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
}
Mouse {
type: 5
@@ -1970,19 +1970,19 @@ VisualTest {
}
Frame {
msec: 5312
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Frame {
msec: 5328
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Frame {
msec: 5344
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Frame {
msec: 5360
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Mouse {
type: 3
@@ -1994,51 +1994,51 @@ VisualTest {
}
Frame {
msec: 5376
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Frame {
msec: 5392
- hash: "c6a81be579382f25ac583734897c2570"
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
}
Frame {
msec: 5408
- hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
+ hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
}
Frame {
msec: 5424
- hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
}
Frame {
msec: 5440
- hash: "9f876eb93a16c24843dd6a5acd303ab3"
+ hash: "4cad3c6caf8d3009f63923df897c4723"
}
Frame {
msec: 5456
- hash: "1533c6ff17e79a47a5d3510aa85bcf8a"
+ hash: "79538d2f507fd6eea7ea1f990e90388a"
}
Frame {
msec: 5472
- hash: "9a9d1e0b1d7b9291480b3ec641f354ce"
+ hash: "e87bf82b6a7a928a27bffd9cb2dd7604"
}
Frame {
msec: 5488
- hash: "ee40862a59f14667c89fa62f380c10fb"
+ hash: "390105f21526e1f8fda15666631578a1"
}
Frame {
msec: 5504
- hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ hash: "7b41d651ad46341859d0188db341ae10"
}
Frame {
msec: 5520
- hash: "52d45e8dde81fef5ee93bbd5a40d4851"
+ hash: "091d1ad7aba4b662cba98214c98a4707"
}
Frame {
msec: 5536
- hash: "05b3013c9e42ed9ced7009d2e2999357"
+ hash: "1978cda418856b542d7c5a155b74f09c"
}
Frame {
msec: 5552
- hash: "7d03030f5a672d87aeabefdf4f3a39a4"
+ hash: "01bf03313a0229e810a24e2adbbe9775"
}
Frame {
msec: 5568
@@ -2046,15 +2046,15 @@ VisualTest {
}
Frame {
msec: 5584
- hash: "82f54d7e254edcf499ea12a63118e8a7"
+ hash: "84df34cd981e0465aaaae47881de6c3b"
}
Frame {
msec: 5600
- hash: "8517007d5102af238935e93a3b38087f"
+ hash: "c29ab366ba3f11de6452949c11310b4a"
}
Frame {
msec: 5616
- hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ hash: "ab4c936a81299adf080f3b14f7e6be49"
}
Frame {
msec: 5632
@@ -2066,7 +2066,7 @@ VisualTest {
}
Frame {
msec: 5664
- hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ hash: "86b32befe0dada5bdce82a7dd14777ce"
}
Frame {
msec: 5680
@@ -2090,11 +2090,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "mousearea-flickable.5.png"
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
}
Frame {
msec: 5776
- hash: "d75a43305e2884759ca41d7b1cbadf52"
+ image: "mousearea-flickable.6.png"
}
Frame {
msec: 5792
@@ -2338,11 +2338,11 @@ VisualTest {
}
Frame {
msec: 6720
- image: "mousearea-flickable.6.png"
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
}
Frame {
msec: 6736
- hash: "037386eb30a5e8d53a20a11258ee0f60"
+ image: "mousearea-flickable.7.png"
}
Frame {
msec: 6752
@@ -2578,11 +2578,11 @@ VisualTest {
}
Frame {
msec: 7680
- image: "mousearea-flickable.7.png"
+ hash: "037386eb30a5e8d53a20a11258ee0f60"
}
Frame {
msec: 7696
- hash: "037386eb30a5e8d53a20a11258ee0f60"
+ image: "mousearea-flickable.8.png"
}
Frame {
msec: 7712
@@ -2750,7 +2750,7 @@ VisualTest {
}
Frame {
msec: 8240
- hash: "9f9f85d5f879b0e52ebc751d6668cfb8"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Mouse {
type: 5
@@ -2762,7 +2762,7 @@ VisualTest {
}
Frame {
msec: 8256
- hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ hash: "a569789b082296415321ba11c859abe5"
}
Mouse {
type: 5
@@ -2782,7 +2782,7 @@ VisualTest {
}
Frame {
msec: 8272
- hash: "11120d6de575ffa639b6abb3af4afef7"
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
}
Mouse {
type: 5
@@ -2802,7 +2802,7 @@ VisualTest {
}
Frame {
msec: 8288
- hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ hash: "11120d6de575ffa639b6abb3af4afef7"
}
Mouse {
type: 5
@@ -2822,7 +2822,7 @@ VisualTest {
}
Frame {
msec: 8304
- hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ hash: "c29ab366ba3f11de6452949c11310b4a"
}
Mouse {
type: 5
@@ -2834,7 +2834,7 @@ VisualTest {
}
Frame {
msec: 8320
- hash: "837deeb2a92648d830acf29e829ebb53"
+ hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
}
Mouse {
type: 5
@@ -2846,7 +2846,7 @@ VisualTest {
}
Frame {
msec: 8336
- hash: "7d2606d432858288dac019e0002ff85a"
+ hash: "837deeb2a92648d830acf29e829ebb53"
}
Mouse {
type: 5
@@ -2866,7 +2866,7 @@ VisualTest {
}
Frame {
msec: 8352
- hash: "c37507a29e3a6d80446ad68f2d92f266"
+ hash: "79650397b868019909b931a32a115823"
}
Mouse {
type: 5
@@ -2878,7 +2878,7 @@ VisualTest {
}
Frame {
msec: 8368
- hash: "01bf03313a0229e810a24e2adbbe9775"
+ hash: "c37507a29e3a6d80446ad68f2d92f266"
}
Mouse {
type: 5
@@ -2890,7 +2890,7 @@ VisualTest {
}
Frame {
msec: 8384
- hash: "8ffbbed46737837e55383833b96d2624"
+ hash: "01bf03313a0229e810a24e2adbbe9775"
}
Mouse {
type: 5
@@ -2910,7 +2910,7 @@ VisualTest {
}
Frame {
msec: 8400
- hash: "6d49fc41fb6d74643c7613df7e417833"
+ hash: "8ffbbed46737837e55383833b96d2624"
}
Mouse {
type: 5
@@ -2922,7 +2922,7 @@ VisualTest {
}
Frame {
msec: 8416
- hash: "1978cda418856b542d7c5a155b74f09c"
+ hash: "6d49fc41fb6d74643c7613df7e417833"
}
Mouse {
type: 5
@@ -2942,7 +2942,7 @@ VisualTest {
}
Frame {
msec: 8432
- hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ hash: "806d22bc3533c729cd10dc889c36902d"
}
Mouse {
type: 5
@@ -2962,7 +2962,7 @@ VisualTest {
}
Frame {
msec: 8448
- hash: "0b16e524cd5253d07aa9b5855967fa71"
+ hash: "cc6619c7cd6e4e274df4729aad6cca46"
}
Mouse {
type: 5
@@ -2982,7 +2982,7 @@ VisualTest {
}
Frame {
msec: 8464
- hash: "0121c18897c37481fddbac57db636a60"
+ hash: "929bf28dcb97e8c93dae5dbe23beecc8"
}
Mouse {
type: 5
@@ -3002,7 +3002,7 @@ VisualTest {
}
Frame {
msec: 8480
- hash: "091d1ad7aba4b662cba98214c98a4707"
+ hash: "0121c18897c37481fddbac57db636a60"
}
Mouse {
type: 5
@@ -3014,7 +3014,7 @@ VisualTest {
}
Frame {
msec: 8496
- hash: "f334bfcc3af89bf1405762a215c54ea6"
+ hash: "091d1ad7aba4b662cba98214c98a4707"
}
Mouse {
type: 5
@@ -3034,7 +3034,7 @@ VisualTest {
}
Frame {
msec: 8512
- hash: "66f71641c7a607152f140428ab9621d6"
+ hash: "ce673b66f695f5b002515a5416bbf913"
}
Mouse {
type: 5
@@ -3054,7 +3054,7 @@ VisualTest {
}
Frame {
msec: 8528
- hash: "7b41d651ad46341859d0188db341ae10"
+ hash: "66f71641c7a607152f140428ab9621d6"
}
Mouse {
type: 5
@@ -3066,7 +3066,7 @@ VisualTest {
}
Frame {
msec: 8544
- hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ hash: "29ca97cc573d3a1fde65320b61678c60"
}
Mouse {
type: 5
@@ -3086,7 +3086,7 @@ VisualTest {
}
Frame {
msec: 8560
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
}
Mouse {
type: 5
@@ -3106,7 +3106,7 @@ VisualTest {
}
Frame {
msec: 8576
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Mouse {
type: 5
@@ -3126,7 +3126,7 @@ VisualTest {
}
Frame {
msec: 8592
- hash: "c09f4002ed9d41f62bb1aaff95723cce"
+ hash: "80edf52cc9e64a29f677bc2203220ba9"
}
Mouse {
type: 5
@@ -3138,7 +3138,7 @@ VisualTest {
}
Frame {
msec: 8608
- hash: "7bb17b13db811b02c86a24a0051336d9"
+ hash: "390105f21526e1f8fda15666631578a1"
}
Mouse {
type: 5
@@ -3158,7 +3158,7 @@ VisualTest {
}
Frame {
msec: 8624
- hash: "6d6cec95a6a2445d88b015ff76af032e"
+ hash: "ee40862a59f14667c89fa62f380c10fb"
}
Mouse {
type: 5
@@ -3178,7 +3178,7 @@ VisualTest {
}
Frame {
msec: 8640
- image: "mousearea-flickable.8.png"
+ hash: "524db6ce45674c777d72f9206415be2f"
}
Mouse {
type: 5
@@ -3190,7 +3190,7 @@ VisualTest {
}
Frame {
msec: 8656
- hash: "9a9d1e0b1d7b9291480b3ec641f354ce"
+ image: "mousearea-flickable.9.png"
}
Mouse {
type: 5
@@ -3210,7 +3210,7 @@ VisualTest {
}
Frame {
msec: 8672
- hash: "d1372239a681d1fccc25257b4a02fb39"
+ hash: "3ca9742356b6ff833fd287a95520174a"
}
Mouse {
type: 5
@@ -3230,7 +3230,7 @@ VisualTest {
}
Frame {
msec: 8688
- hash: "2010f6f0c34e59f505bbe1aab262b646"
+ hash: "d1372239a681d1fccc25257b4a02fb39"
}
Mouse {
type: 5
@@ -3250,7 +3250,7 @@ VisualTest {
}
Frame {
msec: 8704
- hash: "2dc2def0c748ac94d33d90d4a3610136"
+ hash: "c5980322acf00a04efbd5e1b92aa0e98"
}
Mouse {
type: 5
@@ -3270,7 +3270,7 @@ VisualTest {
}
Frame {
msec: 8720
- hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b"
+ hash: "9f876eb93a16c24843dd6a5acd303ab3"
}
Mouse {
type: 5
@@ -3290,7 +3290,7 @@ VisualTest {
}
Frame {
msec: 8736
- hash: "c1570ad4cb688ea51818e0a09e349daa"
+ hash: "6206ad3e633b6b1b068304caa4efe48a"
}
Mouse {
type: 5
@@ -3302,7 +3302,7 @@ VisualTest {
}
Frame {
msec: 8752
- hash: "c6a81be579382f25ac583734897c2570"
+ hash: "d9e953d132330f8a58a190d61aec6ec3"
}
Mouse {
type: 5
@@ -3314,7 +3314,7 @@ VisualTest {
}
Frame {
msec: 8768
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Mouse {
type: 5
@@ -3326,7 +3326,7 @@ VisualTest {
}
Frame {
msec: 8784
- hash: "b34a796f25ad62f952101b296f9c2bac"
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
}
Mouse {
type: 5
@@ -3338,51 +3338,51 @@ VisualTest {
}
Frame {
msec: 8800
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8816
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8832
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8848
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8864
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8880
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8896
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8912
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8928
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8944
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8960
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 8976
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Mouse {
type: 3
@@ -3394,55 +3394,55 @@ VisualTest {
}
Frame {
msec: 8992
- hash: "a0814b5ba881e5da8a1ecae8d714b4ce"
+ hash: "c6a81be579382f25ac583734897c2570"
}
Frame {
msec: 9008
- hash: "b34a796f25ad62f952101b296f9c2bac"
+ hash: "11853dcbad9d1d9a8b7d8a4e6fcca140"
}
Frame {
msec: 9024
- hash: "8cbeb925f039bde9846d37a5ec6cd3f9"
+ hash: "c1570ad4cb688ea51818e0a09e349daa"
}
Frame {
msec: 9040
- hash: "c1570ad4cb688ea51818e0a09e349daa"
+ hash: "6206ad3e633b6b1b068304caa4efe48a"
}
Frame {
msec: 9056
- hash: "237dd62011f4253970b946b335e3fb71"
+ hash: "2dc2def0c748ac94d33d90d4a3610136"
}
Frame {
msec: 9072
- hash: "c5980322acf00a04efbd5e1b92aa0e98"
+ hash: "2010f6f0c34e59f505bbe1aab262b646"
}
Frame {
msec: 9088
- hash: "d1372239a681d1fccc25257b4a02fb39"
+ hash: "3ca9742356b6ff833fd287a95520174a"
}
Frame {
msec: 9104
- hash: "524db6ce45674c777d72f9206415be2f"
+ hash: "c09f4002ed9d41f62bb1aaff95723cce"
}
Frame {
msec: 9120
- hash: "021bda841eaefa76ce5e1c97150af6f6"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Frame {
msec: 9136
- hash: "ce673b66f695f5b002515a5416bbf913"
+ hash: "52d45e8dde81fef5ee93bbd5a40d4851"
}
Frame {
msec: 9152
- hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ hash: "1978cda418856b542d7c5a155b74f09c"
}
Frame {
msec: 9168
- hash: "7fb0ed99b7d751d1f335afd7c0de2f2c"
+ hash: "7d03030f5a672d87aeabefdf4f3a39a4"
}
Frame {
msec: 9184
- hash: "3d75735eefbf95f37e2a8605b9167ba1"
+ hash: "79650397b868019909b931a32a115823"
}
Frame {
msec: 9200
@@ -3454,7 +3454,7 @@ VisualTest {
}
Frame {
msec: 9232
- hash: "dc272fc8fc98d822a154da1d495d4f7e"
+ hash: "ab4c936a81299adf080f3b14f7e6be49"
}
Frame {
msec: 9248
@@ -3466,7 +3466,7 @@ VisualTest {
}
Frame {
msec: 9280
- hash: "7a5f69a1eecb5de0fc2295cd287eb449"
+ hash: "86b32befe0dada5bdce82a7dd14777ce"
}
Frame {
msec: 9296
@@ -3546,11 +3546,11 @@ VisualTest {
}
Frame {
msec: 9600
- image: "mousearea-flickable.9.png"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Frame {
msec: 9616
- hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ image: "mousearea-flickable.10.png"
}
Frame {
msec: 9632
@@ -3794,11 +3794,11 @@ VisualTest {
}
Frame {
msec: 10560
- image: "mousearea-flickable.10.png"
+ hash: "90cdfe8920f115fd55cde6fdbd95e867"
}
Frame {
msec: 10576
- hash: "90cdfe8920f115fd55cde6fdbd95e867"
+ image: "mousearea-flickable.11.png"
}
Frame {
msec: 10592
@@ -4022,7 +4022,7 @@ VisualTest {
}
Frame {
msec: 11248
- hash: "a569789b082296415321ba11c859abe5"
+ hash: "d75a43305e2884759ca41d7b1cbadf52"
}
Mouse {
type: 5
@@ -4042,7 +4042,7 @@ VisualTest {
}
Frame {
msec: 11264
- hash: "86b32befe0dada5bdce82a7dd14777ce"
+ hash: "43fc85bb3b1501f5e12f1fedaaa14c64"
}
Mouse {
type: 5
@@ -4062,7 +4062,7 @@ VisualTest {
}
Frame {
msec: 11280
- hash: "70e522f64236dfa4e1613ffc29b4b23e"
+ hash: "a569789b082296415321ba11c859abe5"
}
Mouse {
type: 5
@@ -4074,7 +4074,7 @@ VisualTest {
}
Frame {
msec: 11296
- hash: "11120d6de575ffa639b6abb3af4afef7"
+ hash: "7a5f69a1eecb5de0fc2295cd287eb449"
}
Mouse {
type: 5
@@ -4094,7 +4094,7 @@ VisualTest {
}
Frame {
msec: 11312
- hash: "8e05207e0d0d9d15a61a0d21d985a83a"
+ hash: "70e522f64236dfa4e1613ffc29b4b23e"
}
Mouse {
type: 5
@@ -4114,7 +4114,7 @@ VisualTest {
}
Frame {
msec: 11328
- hash: "6602009ffe3c0f3072640ebc8749b76f"
+ hash: "8e05207e0d0d9d15a61a0d21d985a83a"
}
Mouse {
type: 5
@@ -4134,7 +4134,7 @@ VisualTest {
}
Frame {
msec: 11344
- hash: "8517007d5102af238935e93a3b38087f"
+ hash: "dc272fc8fc98d822a154da1d495d4f7e"
}
Mouse {
type: 5
@@ -4154,7 +4154,7 @@ VisualTest {
}
Frame {
msec: 11360
- hash: "82f54d7e254edcf499ea12a63118e8a7"
+ hash: "34ef0279e3731447f1df97784b47648a"
}
Mouse {
type: 5
@@ -4174,7 +4174,7 @@ VisualTest {
}
Frame {
msec: 11376
- hash: "572cb62d69ccb973ea18d3b0eaff571b"
+ hash: "82f54d7e254edcf499ea12a63118e8a7"
}
Mouse {
type: 5
@@ -4194,7 +4194,7 @@ VisualTest {
}
Frame {
msec: 11392
- hash: "79650397b868019909b931a32a115823"
+ hash: "6ef4abc294d928381346e8ff9b012475"
}
Mouse {
type: 5
@@ -4214,7 +4214,7 @@ VisualTest {
}
Frame {
msec: 11408
- hash: "43e50f4d4d37373e26af0a5d3cb64c4c"
+ hash: "7d2606d432858288dac019e0002ff85a"
}
Mouse {
type: 5
@@ -4234,7 +4234,7 @@ VisualTest {
}
Frame {
msec: 11424
- hash: "a0f8eb8a796f67c368b0a479e8d14681"
+ hash: "3d75735eefbf95f37e2a8605b9167ba1"
}
Mouse {
type: 5
@@ -4254,7 +4254,7 @@ VisualTest {
}
Frame {
msec: 11440
- hash: "01bf03313a0229e810a24e2adbbe9775"
+ hash: "c37507a29e3a6d80446ad68f2d92f266"
}
Mouse {
type: 5
@@ -4274,7 +4274,7 @@ VisualTest {
}
Frame {
msec: 11456
- hash: "7fb0ed99b7d751d1f335afd7c0de2f2c"
+ hash: "b66571ae47bf129be88dc66785a81a7d"
}
Mouse {
type: 5
@@ -4294,7 +4294,7 @@ VisualTest {
}
Frame {
msec: 11472
- hash: "363eca81f97f20f14e8d480f83d2bc7d"
+ hash: "7d03030f5a672d87aeabefdf4f3a39a4"
}
Mouse {
type: 5
@@ -4306,7 +4306,7 @@ VisualTest {
}
Frame {
msec: 11488
- hash: "6d49fc41fb6d74643c7613df7e417833"
+ hash: "8ffbbed46737837e55383833b96d2624"
}
Mouse {
type: 5
@@ -4326,7 +4326,7 @@ VisualTest {
}
Frame {
msec: 11504
- hash: "806d22bc3533c729cd10dc889c36902d"
+ hash: "aafb12a520eb443ee1348282f2c54e4a"
}
Mouse {
type: 5
@@ -4346,7 +4346,7 @@ VisualTest {
}
Frame {
msec: 11520
- image: "mousearea-flickable.11.png"
+ hash: "72e75cfa62993593303b25cbff4af0e6"
}
Mouse {
type: 5
@@ -4366,7 +4366,7 @@ VisualTest {
}
Frame {
msec: 11536
- hash: "929bf28dcb97e8c93dae5dbe23beecc8"
+ image: "mousearea-flickable.12.png"
}
Mouse {
type: 5
@@ -4386,7 +4386,7 @@ VisualTest {
}
Frame {
msec: 11552
- hash: "cb49adcd2c8afe27fd5926bd622added"
+ hash: "1451addb43319318c794333cd1cec3fd"
}
Mouse {
type: 5
@@ -4406,7 +4406,7 @@ VisualTest {
}
Frame {
msec: 11568
- hash: "0121c18897c37481fddbac57db636a60"
+ hash: "929bf28dcb97e8c93dae5dbe23beecc8"
}
Mouse {
type: 5
@@ -4418,7 +4418,7 @@ VisualTest {
}
Frame {
msec: 11584
- hash: "c0a569ee064d844835dddab11eadcd33"
+ hash: "cb49adcd2c8afe27fd5926bd622added"
}
Mouse {
type: 5
@@ -4438,7 +4438,7 @@ VisualTest {
}
Frame {
msec: 11600
- hash: "52d45e8dde81fef5ee93bbd5a40d4851"
+ hash: "d0b4215b43403c97d83250add6d2b6db"
}
Mouse {
type: 5
@@ -4458,7 +4458,7 @@ VisualTest {
}
Frame {
msec: 11616
- hash: "ce673b66f695f5b002515a5416bbf913"
+ hash: "c0a569ee064d844835dddab11eadcd33"
}
Mouse {
type: 5
@@ -4470,7 +4470,7 @@ VisualTest {
}
Frame {
msec: 11632
- hash: "f334bfcc3af89bf1405762a215c54ea6"
+ hash: "091d1ad7aba4b662cba98214c98a4707"
}
Mouse {
type: 5
@@ -4490,7 +4490,7 @@ VisualTest {
}
Frame {
msec: 11648
- hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
+ hash: "52d45e8dde81fef5ee93bbd5a40d4851"
}
Mouse {
type: 5
@@ -4502,11 +4502,11 @@ VisualTest {
}
Frame {
msec: 11664
- hash: "66f71641c7a607152f140428ab9621d6"
+ hash: "ce673b66f695f5b002515a5416bbf913"
}
Frame {
msec: 11680
- hash: "66f71641c7a607152f140428ab9621d6"
+ hash: "ce673b66f695f5b002515a5416bbf913"
}
Mouse {
type: 5
@@ -4518,7 +4518,7 @@ VisualTest {
}
Frame {
msec: 11696
- hash: "66f71641c7a607152f140428ab9621d6"
+ hash: "ce673b66f695f5b002515a5416bbf913"
}
Mouse {
type: 5
@@ -4530,7 +4530,7 @@ VisualTest {
}
Frame {
msec: 11712
- hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
}
Mouse {
type: 5
@@ -4542,7 +4542,7 @@ VisualTest {
}
Frame {
msec: 11728
- hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
}
Mouse {
type: 5
@@ -4554,7 +4554,7 @@ VisualTest {
}
Frame {
msec: 11744
- hash: "29ca97cc573d3a1fde65320b61678c60"
+ hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
}
Mouse {
type: 5
@@ -4566,7 +4566,7 @@ VisualTest {
}
Frame {
msec: 11760
- hash: "29ca97cc573d3a1fde65320b61678c60"
+ hash: "ee0523fe6a33b59871ad3b311ca0cbeb"
}
Mouse {
type: 5
@@ -4578,7 +4578,7 @@ VisualTest {
}
Frame {
msec: 11776
- hash: "7b41d651ad46341859d0188db341ae10"
+ hash: "66f71641c7a607152f140428ab9621d6"
}
Mouse {
type: 5
@@ -4590,11 +4590,11 @@ VisualTest {
}
Frame {
msec: 11792
- hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
}
Frame {
msec: 11808
- hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
}
Mouse {
type: 5
@@ -4606,7 +4606,7 @@ VisualTest {
}
Frame {
msec: 11824
- hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ hash: "29ca97cc573d3a1fde65320b61678c60"
}
Mouse {
type: 5
@@ -4618,7 +4618,7 @@ VisualTest {
}
Frame {
msec: 11840
- hash: "95b57cd3dac3bce56674f2c4143f42d4"
+ hash: "29ca97cc573d3a1fde65320b61678c60"
}
Mouse {
type: 5
@@ -4630,7 +4630,7 @@ VisualTest {
}
Frame {
msec: 11856
- hash: "021bda841eaefa76ce5e1c97150af6f6"
+ hash: "7b41d651ad46341859d0188db341ae10"
}
Mouse {
type: 5
@@ -4642,11 +4642,11 @@ VisualTest {
}
Frame {
msec: 11872
- hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
}
Frame {
msec: 11888
- hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
}
Mouse {
type: 5
@@ -4658,11 +4658,11 @@ VisualTest {
}
Frame {
msec: 11904
- hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
}
Frame {
msec: 11920
- hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
}
Mouse {
type: 5
@@ -4674,11 +4674,11 @@ VisualTest {
}
Frame {
msec: 11936
- hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Frame {
msec: 11952
- hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Mouse {
type: 5
@@ -4690,11 +4690,11 @@ VisualTest {
}
Frame {
msec: 11968
- hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Frame {
msec: 11984
- hash: "1709dda08ce7494ff6d082cc5d93f0d2"
+ hash: "95b57cd3dac3bce56674f2c4143f42d4"
}
Mouse {
type: 5
@@ -4706,7 +4706,7 @@ VisualTest {
}
Frame {
msec: 12000
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
}
Mouse {
type: 5
@@ -4718,11 +4718,11 @@ VisualTest {
}
Frame {
msec: 12016
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
}
Frame {
msec: 12032
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
}
Mouse {
type: 5
@@ -4734,23 +4734,23 @@ VisualTest {
}
Frame {
msec: 12048
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12064
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12080
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12096
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12112
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Mouse {
type: 5
@@ -4762,23 +4762,23 @@ VisualTest {
}
Frame {
msec: 12128
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12144
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12160
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12176
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12192
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Mouse {
type: 3
@@ -4790,59 +4790,59 @@ VisualTest {
}
Frame {
msec: 12208
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12224
- hash: "68c8c95edb8cce11320715266bd62628"
+ hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
}
Frame {
msec: 12240
- hash: "80edf52cc9e64a29f677bc2203220ba9"
+ hash: "021bda841eaefa76ce5e1c97150af6f6"
}
Frame {
msec: 12256
- hash: "b1ea82b880a2fc35bf1ed117d8ab21b0"
+ hash: "6b236864b7d95bf9f76b8afd6ba78613"
}
Frame {
msec: 12272
- hash: "6b236864b7d95bf9f76b8afd6ba78613"
+ hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
}
Frame {
msec: 12288
- hash: "ddd3d8cb82e238358cdb16c1df7d27b7"
+ hash: "f334bfcc3af89bf1405762a215c54ea6"
}
Frame {
msec: 12304
- hash: "ce673b66f695f5b002515a5416bbf913"
+ hash: "091d1ad7aba4b662cba98214c98a4707"
}
Frame {
msec: 12320
- hash: "0121c18897c37481fddbac57db636a60"
+ hash: "0b16e524cd5253d07aa9b5855967fa71"
}
Frame {
msec: 12336
- hash: "cc6619c7cd6e4e274df4729aad6cca46"
+ hash: "1978cda418856b542d7c5a155b74f09c"
}
Frame {
msec: 12352
- hash: "aafb12a520eb443ee1348282f2c54e4a"
+ hash: "8ffbbed46737837e55383833b96d2624"
}
Frame {
msec: 12368
- hash: "c37507a29e3a6d80446ad68f2d92f266"
+ hash: "43e50f4d4d37373e26af0a5d3cb64c4c"
}
Frame {
msec: 12384
- hash: "6ef4abc294d928381346e8ff9b012475"
+ hash: "837deeb2a92648d830acf29e829ebb53"
}
Frame {
msec: 12400
- hash: "4e129ebba85d1f3717d09f71eb5a1a7d"
+ hash: "34ef0279e3731447f1df97784b47648a"
}
Frame {
msec: 12416
- hash: "6602009ffe3c0f3072640ebc8749b76f"
+ hash: "dc272fc8fc98d822a154da1d495d4f7e"
}
Frame {
msec: 12432
@@ -4858,11 +4858,11 @@ VisualTest {
}
Frame {
msec: 12480
- image: "mousearea-flickable.12.png"
+ hash: "86b32befe0dada5bdce82a7dd14777ce"
}
Frame {
msec: 12496
- hash: "a569789b082296415321ba11c859abe5"
+ image: "mousearea-flickable.13.png"
}
Frame {
msec: 12512
@@ -4894,7 +4894,7 @@ VisualTest {
}
Frame {
msec: 12624
- hash: "d75a43305e2884759ca41d7b1cbadf52"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Frame {
msec: 12640
@@ -5083,7 +5083,7 @@ VisualTest {
Key {
type: 6
key: 16777251
- modifiers: 134217728
+ modifiers: 0
text: ""
autorep: false
count: 1
@@ -5106,11 +5106,11 @@ VisualTest {
}
Frame {
msec: 13440
- image: "mousearea-flickable.13.png"
+ hash: "cc1fd2f4c3be318052254a9b6be7a57b"
}
Frame {
msec: 13456
- hash: "cc1fd2f4c3be318052254a9b6be7a57b"
+ image: "mousearea-flickable.14.png"
}
Frame {
msec: 13472
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.0.png
new file mode 100644
index 0000000..e2e90d2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.1.png
new file mode 100644
index 0000000..e2e90d2
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.10.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.10.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.10.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.11.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.11.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.11.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.12.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.12.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.12.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.13.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.13.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.13.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.14.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.14.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.14.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.15.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.15.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.15.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.2.png
new file mode 100644
index 0000000..25facec
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.3.png
new file mode 100644
index 0000000..25facec
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.4.png
new file mode 100644
index 0000000..25facec
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.5.png
new file mode 100644
index 0000000..630b14a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.6.png
new file mode 100644
index 0000000..630b14a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.7.png
new file mode 100644
index 0000000..630b14a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.7.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.8.png
new file mode 100644
index 0000000..630b14a
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.8.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.9.png
new file mode 100644
index 0000000..93cf54c
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.9.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.qml
index 433fd82..2daeebc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-visual.qml
@@ -6,7 +6,7 @@ VisualTest {
}
Frame {
msec: 16
- hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ image: "mousearea-visual.0.png"
}
Frame {
msec: 32
@@ -242,11 +242,11 @@ VisualTest {
}
Frame {
msec: 960
- image: "mouseregion.0.png"
+ hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
}
Frame {
msec: 976
- hash: "1121bb51fc2d4c5c7ef3ae2c44794b49"
+ image: "mousearea-visual.1.png"
}
Frame {
msec: 992
@@ -634,7 +634,7 @@ VisualTest {
}
Frame {
msec: 1920
- image: "mouseregion.1.png"
+ hash: "73f1639b9e2164c7b974042934c0d151"
}
Mouse {
type: 5
@@ -654,7 +654,7 @@ VisualTest {
}
Frame {
msec: 1936
- hash: "73f1639b9e2164c7b974042934c0d151"
+ image: "mousearea-visual.2.png"
}
Mouse {
type: 5
@@ -1002,11 +1002,11 @@ VisualTest {
}
Frame {
msec: 2880
- image: "mouseregion.2.png"
+ hash: "73f1639b9e2164c7b974042934c0d151"
}
Frame {
msec: 2896
- hash: "73f1639b9e2164c7b974042934c0d151"
+ image: "mousearea-visual.3.png"
}
Mouse {
type: 5
@@ -1386,11 +1386,11 @@ VisualTest {
}
Frame {
msec: 3840
- image: "mouseregion.3.png"
+ hash: "73f1639b9e2164c7b974042934c0d151"
}
Frame {
msec: 3856
- hash: "73f1639b9e2164c7b974042934c0d151"
+ image: "mousearea-visual.4.png"
}
Frame {
msec: 3872
@@ -1698,7 +1698,7 @@ VisualTest {
}
Frame {
msec: 4800
- image: "mouseregion.4.png"
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
}
Mouse {
type: 5
@@ -1718,7 +1718,7 @@ VisualTest {
}
Frame {
msec: 4816
- hash: "12edb0902e4d480c9052b00edc1a0a42"
+ image: "mousearea-visual.5.png"
}
Mouse {
type: 5
@@ -2202,11 +2202,11 @@ VisualTest {
}
Frame {
msec: 5760
- image: "mouseregion.5.png"
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
}
Frame {
msec: 5776
- hash: "12edb0902e4d480c9052b00edc1a0a42"
+ image: "mousearea-visual.6.png"
}
Frame {
msec: 5792
@@ -2474,11 +2474,11 @@ VisualTest {
}
Frame {
msec: 6720
- image: "mouseregion.6.png"
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
}
Frame {
msec: 6736
- hash: "12edb0902e4d480c9052b00edc1a0a42"
+ image: "mousearea-visual.7.png"
}
Mouse {
type: 4
@@ -2738,11 +2738,11 @@ VisualTest {
}
Frame {
msec: 7680
- image: "mouseregion.7.png"
+ hash: "12edb0902e4d480c9052b00edc1a0a42"
}
Frame {
msec: 7696
- hash: "12edb0902e4d480c9052b00edc1a0a42"
+ image: "mousearea-visual.8.png"
}
Frame {
msec: 7712
@@ -3082,7 +3082,7 @@ VisualTest {
}
Frame {
msec: 8640
- image: "mouseregion.8.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Mouse {
type: 5
@@ -3102,7 +3102,7 @@ VisualTest {
}
Frame {
msec: 8656
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.9.png"
}
Mouse {
type: 5
@@ -3538,7 +3538,7 @@ VisualTest {
}
Frame {
msec: 9600
- image: "mouseregion.9.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Mouse {
type: 5
@@ -3550,7 +3550,7 @@ VisualTest {
}
Frame {
msec: 9616
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.10.png"
}
Mouse {
type: 5
@@ -4418,7 +4418,7 @@ VisualTest {
}
Frame {
msec: 10560
- image: "mouseregion.10.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Mouse {
type: 5
@@ -4438,7 +4438,7 @@ VisualTest {
}
Frame {
msec: 10576
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.11.png"
}
Frame {
msec: 10592
@@ -4690,11 +4690,11 @@ VisualTest {
}
Frame {
msec: 11520
- image: "mouseregion.11.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Frame {
msec: 11536
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.12.png"
}
Frame {
msec: 11552
@@ -4978,11 +4978,11 @@ VisualTest {
}
Frame {
msec: 12480
- image: "mouseregion.12.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Frame {
msec: 12496
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.13.png"
}
Frame {
msec: 12512
@@ -5314,11 +5314,11 @@ VisualTest {
}
Frame {
msec: 13440
- image: "mouseregion.13.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Frame {
msec: 13456
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.14.png"
}
Frame {
msec: 13472
@@ -5730,11 +5730,11 @@ VisualTest {
}
Frame {
msec: 14400
- image: "mouseregion.14.png"
+ hash: "194ebac4ae7d95bf427f8161885a13e1"
}
Frame {
msec: 14416
- hash: "194ebac4ae7d95bf427f8161885a13e1"
+ image: "mousearea-visual.15.png"
}
Frame {
msec: 14432
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png
index 7321d95..88924b1 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png
index 49d2a5a..024a17c 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png
index 6fe14b7..8860fc2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.3.png
new file mode 100644
index 0000000..2ab8ee3
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml
index 463edf8..2930e28 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml
@@ -6,770 +6,770 @@ VisualTest {
}
Frame {
msec: 16
- hash: "b4df49cbd7cf972af9879399808f6c53"
+ image: "particles.0.png"
}
Frame {
msec: 32
- hash: "43c0ad5826e8058260951f063f0851ab"
+ hash: "c7eb3936886726f584d1bd99133a199f"
}
Frame {
msec: 48
- hash: "55eb2c9939514338e7ef58c9276fc223"
+ hash: "f7f6eeab119435f0cccd55074b4941bf"
}
Frame {
msec: 64
- hash: "6a1bbb91bf450547d6100b6e61a98f6d"
+ hash: "06f52743e61bf0212971652c500fe5d1"
}
Frame {
msec: 80
- hash: "bdb9b8cab70c72d99aba830eb8e8913b"
+ hash: "1f9dd3a3a0524c60791362f560936f9b"
}
Frame {
msec: 96
- hash: "71a0e046bc68183b830df9dafd8fa147"
+ hash: "42538495fc9d63384a1709476c06d750"
}
Frame {
msec: 112
- hash: "e7228e0ed77e05c661282c2d2fe88b3e"
+ hash: "4d1b53541ffe5cdfcf0e3aa2916b1bac"
}
Frame {
msec: 128
- hash: "93a4c3e501b05844f687a2dd1754aad2"
+ hash: "6a3a683dbd2ad7c89f0788441303485e"
}
Frame {
msec: 144
- hash: "1856ac86313c16bf4874130d9a48ff45"
+ hash: "125a936660dae42969fab4144d166ac6"
}
Frame {
msec: 160
- hash: "3637d8dad4f44c938f91b0800bd9fb2f"
+ hash: "87d008547326ff1bf2c4c2a9d9b99abc"
}
Frame {
msec: 176
- hash: "c5ace4ede38d29363d69c6b4b2f9349f"
+ hash: "0df69d85b37d3ebf0e314a7e89701703"
}
Frame {
msec: 192
- hash: "a5d832d02f4a635052817654df90caba"
+ hash: "7af12cac3bd33c903d6aa6fa8f89b498"
}
Frame {
msec: 208
- hash: "9ebf8bea8abe7ac209d47214a87f8fc0"
+ hash: "424c950111c492ded19df874b938067c"
}
Frame {
msec: 224
- hash: "35b8f5cb18284867be8d27d601394a2b"
+ hash: "bee69a0df1ca8ccc7d83a52f9de34f8c"
}
Frame {
msec: 240
- hash: "a2c4a6063f219af6f2b29b2d21a4265d"
+ hash: "47da1538d818e22d836de57d5c6601ce"
}
Frame {
msec: 256
- hash: "27f25ace7b8e93c55638ed99f49b821c"
+ hash: "fbfb0e177b19d6ef9433619f60dd9580"
}
Frame {
msec: 272
- hash: "4f6511bfbbd8113195a7597eb6dfb219"
+ hash: "23b4f8bb116e8db48db25ccccedba43a"
}
Frame {
msec: 288
- hash: "6a696159cdbb51a67064c600124535d1"
+ hash: "13f0847f1b86f880690692066cde21c7"
}
Frame {
msec: 304
- hash: "6cd667eb352256dbb728532634e7ffd0"
+ hash: "639ca4c978bea080139b219c75bf01d1"
}
Frame {
msec: 320
- hash: "28fa16c8936bf86a8426ded306aa2b8c"
+ hash: "19debcaa7bbde930eda2fd08ac1e9d8a"
}
Frame {
msec: 336
- hash: "061fecdb88733e3e51c5823571bc4d19"
+ hash: "1d733c5010604bff67138f1eb9881dcd"
}
Frame {
msec: 352
- hash: "f64530f638b3d18d56593e0b7c884f5d"
+ hash: "b14435e41a3730baff06bb0800157081"
}
Frame {
msec: 368
- hash: "8530cf40739890dc7401fad65a6325bf"
+ hash: "504b3548c38d50f15235594f3f3d7be5"
}
Frame {
msec: 384
- hash: "0abc555552e7256dbc424b2eac5c95f2"
+ hash: "4e73ef73c949da579217c1d94139a75a"
}
Frame {
msec: 400
- hash: "64aeae59a8c958dfc62d92636b2f5217"
+ hash: "5fced44782484b1962368b9c04bf5246"
}
Frame {
msec: 416
- hash: "3e0f50f5bee017220b129d06b2acde2c"
+ hash: "6ab0cd5c14e1871a35d003574255c1db"
}
Frame {
msec: 432
- hash: "e676c01ff2e35bdfe674be67d49945b1"
+ hash: "23f5c485fbd0acd607119e93277284db"
}
Frame {
msec: 448
- hash: "bc060b480aab94fd440fd27f5beb7383"
+ hash: "02ebd53ee0e6ca3605916b05d827989e"
}
Frame {
msec: 464
- hash: "79c79f723de72315e63da8a7cbe1b425"
+ hash: "99b1d1e72d7da88a7d5d5a7907e1b1f4"
}
Frame {
msec: 480
- hash: "7bf93c2697af75d0f862a47d57cd6a7f"
+ hash: "b7de7d40263f2811ec51f28f8ff4929c"
}
Frame {
msec: 496
- hash: "7641b9e233f4aabd99bcd985ce1d51ae"
+ hash: "e64059f850dd4c8642a9883a1c5356bf"
}
Frame {
msec: 512
- hash: "b596a28cb67617d37408bd25d947d088"
+ hash: "b0aefb8f8d4d970ba4b51d7f77b55cf1"
}
Frame {
msec: 528
- hash: "f2c5cdf15c27b05c0ea97675ddc41757"
+ hash: "5ab4b1373c233b2342eb66cf9eccac8d"
}
Frame {
msec: 544
- hash: "eae5eb8c41a1d6d75446618518490f20"
+ hash: "b3726c296d5919a59c32201d857e92b4"
}
Frame {
msec: 560
- hash: "0be5e9a6d857fe1a262524801c69490d"
+ hash: "70e246371f9cf83b5913f2fc53f6b736"
}
Frame {
msec: 576
- hash: "65478b8c4d932c10924f70462a662254"
+ hash: "871cd4b99b6d544d487424219e0caf92"
}
Frame {
msec: 592
- hash: "7b034f3c98e8eb38eec11cf3c2aa0804"
+ hash: "8c002ec15e88220bf12ebaa5a3390570"
}
Frame {
msec: 608
- hash: "5bbc8eed41500ccbc820cfb38794232f"
+ hash: "21c994a5ad23938a9e873d04bbd4165e"
}
Frame {
msec: 624
- hash: "1b39d555ca8932b40efd769c4ba74d3f"
+ hash: "1f04a0ed31823cd0817f3e97a11e3a46"
}
Frame {
msec: 640
- hash: "f9a38e12becbce400191e22f1d22427c"
+ hash: "f163eda68878ae0ed4cac7f941e24414"
}
Frame {
msec: 656
- hash: "cbc27c72517d76edfc2d3692cd83f151"
+ hash: "560527d6c7fa64a4739f9c79f3eaab8f"
}
Frame {
msec: 672
- hash: "4a883a5aed05f0bbcefcefea6ef56df6"
+ hash: "df7e7469ff685c4cd822232b1aa66029"
}
Frame {
msec: 688
- hash: "7a30ea30c0619c87c96bcaba916c64df"
+ hash: "fa92bf73b0737d4ac8bbc16518cd9c2a"
}
Frame {
msec: 704
- hash: "33cd0797b6d229592ed53117fcaaa898"
+ hash: "bb2f2765ba20b727701352f11ed30417"
}
Frame {
msec: 720
- hash: "21178ef9366c8a65ecb9e21d584573b0"
+ hash: "4c45617ce77a5869cdbfcfe851796422"
}
Frame {
msec: 736
- hash: "fe75beac8681fdac8a2b79c9c7267128"
+ hash: "24aa2eabe8d2a4adc5a096dd201a3bc1"
}
Frame {
msec: 752
- hash: "df26a23d394e053417de86309683c5e0"
+ hash: "2eb5de2524ad38e1dcd44d89b115e75a"
}
Frame {
msec: 768
- hash: "411594a1ed7c351cb872e0a6f3081b1b"
+ hash: "8b39e542908051b0ab8fbf3cd36f3be9"
}
Frame {
msec: 784
- hash: "b4b639f204cfed9e1fec872e4de115c2"
+ hash: "a447e9d7c87c90633dcfc550fcf04ff6"
}
Frame {
msec: 800
- hash: "4d801e2f4848399c011d60264720b912"
+ hash: "c3d1e7753b592bc0d0c3169e3cf08bb7"
}
Frame {
msec: 816
- hash: "4f28c7b154853ff78cdefb5a5ac9d2b7"
+ hash: "fb20ccb3b36798835fbc1d529a7424ea"
}
Frame {
msec: 832
- hash: "cc6d4283b0d7bf9f579637575d5e1fef"
+ hash: "ff253670ae78826250b9612cf2a2e1a4"
}
Frame {
msec: 848
- hash: "8edc371d23d01be547990074b5e640af"
+ hash: "45fb7f71debd3b61062a4165c04c0637"
}
Frame {
msec: 864
- hash: "874845d7178e6cd8369f21379060f561"
+ hash: "a1542b5bc5e65cdb3f8775cf21b54429"
}
Frame {
msec: 880
- hash: "98fb6d79990775385603fb1a50ab5186"
+ hash: "a146b5b88875e4148658dd55e162d6f4"
}
Frame {
msec: 896
- hash: "d15539efc27baabb5a74f464b152d266"
+ hash: "94222050206925d4c9b38da03125cc0c"
}
Frame {
msec: 912
- hash: "fc44d091d6689e8870162a6d29b6d287"
+ hash: "71a63ace8450029b968723cfa684330c"
}
Frame {
msec: 928
- hash: "a3c964f4bf524e22092b1650df43375a"
+ hash: "14e4d2af07146133c6a0e87391747c6a"
}
Frame {
msec: 944
- hash: "ca203fd630ec1eadea37cf36bd30ba40"
+ hash: "e380593e219531620dbca0a8131b4f13"
}
Frame {
msec: 960
- image: "particles.0.png"
+ hash: "d52c30bc201afd3d1caf34efcddafdee"
}
Frame {
msec: 976
- hash: "2e0630818c04fc6c259eec8561c645cd"
+ image: "particles.1.png"
}
Frame {
msec: 992
- hash: "a7b1f6305ddcf4a338e1a96ea31a5341"
+ hash: "0d2871475891f96e1cc4150cbe725d46"
}
Frame {
msec: 1008
- hash: "23a5013a8f9407d06ac6fd0c1e961743"
+ hash: "b6d064a26c282ce4fd8cba48de0a0f7b"
}
Frame {
msec: 1024
- hash: "9de73decddaab4269bd33efdb21278a3"
+ hash: "9ad67d9833d749b2b8158abb3076357b"
}
Frame {
msec: 1040
- hash: "7582c26b45dd11c262f51b387af89cb2"
+ hash: "ce86624a1e055fdb4711dd73be31dc42"
}
Frame {
msec: 1056
- hash: "650e0d395f1d1f2ddda8711089d85511"
+ hash: "a2c6fc81e1f02477f6ad084acaf12b0d"
}
Frame {
msec: 1072
- hash: "9ff84e81219aa6bb7ab534b2a47a3930"
+ hash: "bab24924a5ac4cd45c1fa7b5e4ff3efe"
}
Frame {
msec: 1088
- hash: "11e255273e8ca4716047fb52636f0c3e"
+ hash: "8c8fd3b9cc257dab84df8e88a3e7a001"
}
Frame {
msec: 1104
- hash: "b2fcbefd13db3c765183b1eefc2ca0bc"
+ hash: "a3f9936dc4e3161d9db1fa39267cda4d"
}
Frame {
msec: 1120
- hash: "7150aff523c0d480702f6a326699cb65"
+ hash: "d6669c8a47077f665a93587ea3cafe6e"
}
Frame {
msec: 1136
- hash: "63886c15107a2a7d639069cd81c3cd07"
+ hash: "601dbd220a7f312d4343323ae99e21ee"
}
Frame {
msec: 1152
- hash: "1ec1fc30bbb5f43a1d6d36bce345f569"
+ hash: "722411ffc1d6740caed9bf1231bc54ba"
}
Frame {
msec: 1168
- hash: "34060cbc31ce1fbf406cbb595312c609"
+ hash: "cb3bd6f5ee770399e21a07e56dcf28ef"
}
Frame {
msec: 1184
- hash: "6f3a04c7f411785956e640aa630f7ac4"
+ hash: "1819d6719e6b56b3e673dacf1865272e"
}
Frame {
msec: 1200
- hash: "d7bdb7e170b6f193eaf4b07c01b4dc6b"
+ hash: "6b6532937a3e37df28b3939cbadc4741"
}
Frame {
msec: 1216
- hash: "6ca02c0d9cfeb4b1932f7ad1feac9850"
+ hash: "8a065d54600e9ae3c7958f7b71d8432d"
}
Frame {
msec: 1232
- hash: "d446c7b185361de5c615a17ac1fee607"
+ hash: "2259806ac264b292f5701f34ffac5c35"
}
Frame {
msec: 1248
- hash: "bc2faf5b7b2972f155954e4e685e80ae"
+ hash: "e4b2a6440df9141616f89cbb6a6ba0aa"
}
Frame {
msec: 1264
- hash: "2bf26cedc76aea4a6d9744b7dd935db8"
+ hash: "034b74fe5327909214bb5a6e3084edf2"
}
Frame {
msec: 1280
- hash: "accbee9d0f8cf73ef72aa7bfb49b3fa5"
+ hash: "976fd9bc54baefe8d71002a22706052a"
}
Frame {
msec: 1296
- hash: "933eb2e46f42e212bdfc515d30f663d3"
+ hash: "45138388ebc6ec44a205934475907b25"
}
Frame {
msec: 1312
- hash: "7495318c893dbb22771b53e93c7614e8"
+ hash: "01edec5ae6e33b49baee2abe2a59ad7d"
}
Frame {
msec: 1328
- hash: "894fe23c1b3543451293c047b640c4bb"
+ hash: "9a89ff95df027e53827c5554a28e05a8"
}
Frame {
msec: 1344
- hash: "9b7179ef059ee82ca4a383f536f47a42"
+ hash: "8d1cd8a1181b7320990b7348b424ce4b"
}
Frame {
msec: 1360
- hash: "5ec1a5bfac2473efdcad7dba0da4015c"
+ hash: "2366d1ee0c0740f0d19fe2ce1acfe4c3"
}
Frame {
msec: 1376
- hash: "2bd64528e83260a80e7f2843e2c34a19"
+ hash: "071988963ab2d1a53243e0f6837fecb0"
}
Frame {
msec: 1392
- hash: "16bf64a9bf6b4bc09b108c65d074b5f2"
+ hash: "20f1e8adef04cea6bcd1511ac47a7922"
}
Frame {
msec: 1408
- hash: "c33eaa717ba63655f375499058b1be55"
+ hash: "2241def30a3ef54ea82e5fa2b1ef5997"
}
Frame {
msec: 1424
- hash: "d080f4591f9fd59745bf850525590849"
+ hash: "15365370ac6859f1bfc76e96e603c417"
}
Frame {
msec: 1440
- hash: "921585c88ec133c83c07650745bb4441"
+ hash: "45edcbeb23c88f62982f9af9a4647f4c"
}
Frame {
msec: 1456
- hash: "f037b28137b22a0c91fc71fc6626475a"
+ hash: "b7a9c7c44e6f9ff5132d1ad3f6137dc8"
}
Frame {
msec: 1472
- hash: "e10b3c432a230d5509c2fa7df48b56c9"
+ hash: "8a55b85fdd63ac63c1a566a5c4d92a04"
}
Frame {
msec: 1488
- hash: "ac02c7b7e68ee8cfad1fe556020e93d8"
+ hash: "e1973b7d557dec08e6375feefb56db47"
}
Frame {
msec: 1504
- hash: "12d59e70dedfa0c741afed9b98cb9a3a"
+ hash: "a321445212e561de4262228482b0edbe"
}
Frame {
msec: 1520
- hash: "a9aa635ccde26829d7e1cdc29fcce8d1"
+ hash: "a2c787a576e1f85561c08330b6801e98"
}
Frame {
msec: 1536
- hash: "f571b3da827b884ad036dade8ad2fe37"
+ hash: "ba84070f0081d4c7a08ebc3204d9aebf"
}
Frame {
msec: 1552
- hash: "1ffa8d7512e9001cbc78b28451133b44"
+ hash: "4b82a6908ed0caf3cbfd9dc9211ec69a"
}
Frame {
msec: 1568
- hash: "2ef4b10f2eafd71dfde15f7f00e923c6"
+ hash: "a1dc7c4ad596fc005cf3077ee78406e1"
}
Frame {
msec: 1584
- hash: "09b3bc232a134eae5ae14c0336f508ba"
+ hash: "53d76884202d4b9ce3874db796705b80"
}
Frame {
msec: 1600
- hash: "ebadb5c6b4986c865f7f8ef232680b7e"
+ hash: "9f24c090531259f9d83ea97e842c4f14"
}
Frame {
msec: 1616
- hash: "26621991073510e9a95e3b208e3ee56e"
+ hash: "541c81585a781bab82d4ee95b9f844ff"
}
Frame {
msec: 1632
- hash: "f18e97f13c06f3c5368edf851f19f401"
+ hash: "73e15141e6c6bfba4a2c820ba96e3f6e"
}
Frame {
msec: 1648
- hash: "3c322dbbf5ecfe1de56595dcb7d949e1"
+ hash: "0500129b602ab14925aa09a1d9bee3d0"
}
Frame {
msec: 1664
- hash: "50058d1bb992a6d0601c9d5490149936"
+ hash: "2d45ba5e0e21430f468332c13ce3ee15"
}
Frame {
msec: 1680
- hash: "4cc78f56f13478ec21a4a0d6b22f956b"
+ hash: "bafd11c210e683d79ac438c5612503bc"
}
Frame {
msec: 1696
- hash: "d765cd86560dff3faa5a3c902512c74c"
+ hash: "f968f49e6a0674877c55282e5543edab"
}
Frame {
msec: 1712
- hash: "ad983068c2149b0c06da3b89a5d94d24"
+ hash: "705307529862a3825a0870b294058825"
}
Frame {
msec: 1728
- hash: "e6da7260001771fc00c472bccae641fe"
+ hash: "a008a501d1dc16a5ffaee325fdd90816"
}
Frame {
msec: 1744
- hash: "71778ad8a61ecb0f78f7234ecf0d1d97"
+ hash: "5091621481873738658f4d8543582c62"
}
Frame {
msec: 1760
- hash: "6b2209ea5f7f17c2cd868986f0c907d9"
+ hash: "141216eeb31b5af4ec247bb930169a7f"
}
Frame {
msec: 1776
- hash: "6513c82829ef7e7c9461dcf5b50f675f"
+ hash: "bfb203e39ab0a9837fc5b9c9b49d9580"
}
Frame {
msec: 1792
- hash: "0172c5bdf96c8bceab25a6c82bdbe527"
+ hash: "1f2704480af7dd2bb382d13450f34755"
}
Frame {
msec: 1808
- hash: "64b53bf1c1988d3a799b564089f8e63f"
+ hash: "f3182da7f6202250a6cc2de3e43fcf87"
}
Frame {
msec: 1824
- hash: "a1bdea4771ec9719cfe88f4e827bd005"
+ hash: "6fa500f5ff387c5801186fb7eced96f4"
}
Frame {
msec: 1840
- hash: "263de376cee2ba7701a7ca116bc1be81"
+ hash: "1874d59911d70daf098cd053da69127b"
}
Frame {
msec: 1856
- hash: "9795dada7f09d7d4d40df858dea8bc70"
+ hash: "52a7bcb9a18e8d4a24c2617124b7961b"
}
Frame {
msec: 1872
- hash: "85ea4c63fc31f79423cb509f6c6d4faa"
+ hash: "f3a7dd26aa4177dbee02d52df664c751"
}
Frame {
msec: 1888
- hash: "c86d8c4460d1e3c2f26b723dc628fe84"
+ hash: "5180db29e325f00c3940b6a7b8eb8a8e"
}
Frame {
msec: 1904
- hash: "6bf6ef1fd377bfcf0b93baa7f28e1d3d"
+ hash: "eab16b6ef76e627eff492cdf5d5da9e2"
}
Frame {
msec: 1920
- image: "particles.1.png"
+ hash: "57976a66963718e90c62535a936d9251"
}
Frame {
msec: 1936
- hash: "57b8a48bed9375b74391950c28e611da"
+ image: "particles.2.png"
}
Frame {
msec: 1952
- hash: "70203655bc832998529071d7f665ecbe"
+ hash: "85ecf35d439bd4129f8780d8ee561dfb"
}
Frame {
msec: 1968
- hash: "9ab9808d495f907a255d85fbd82491e2"
+ hash: "785d712b57b3ec4cee6b9e2fcfa1b775"
}
Frame {
msec: 1984
- hash: "297570136b058ba43e883b0aef20d82f"
+ hash: "77906acfafec6ab595e8dad00373f953"
}
Frame {
msec: 2000
- hash: "0c2f15ce83e2d961ec36299b13890709"
+ hash: "33722e5c66ee6dfc87ca62a53590969e"
}
Frame {
msec: 2016
- hash: "6d57b6dcb1dbfa35245d79ef36ca49b2"
+ hash: "7bd3d9e36789b3456c5e098d02341ce3"
}
Frame {
msec: 2032
- hash: "12a71804fd71991706d8a39b676d1628"
+ hash: "be4af661ca19ca607acf0d8949b58c26"
}
Frame {
msec: 2048
- hash: "f6a9e1b0b498fc576f3eadeb86c08fe9"
+ hash: "e249df985887229664d3c61c7b01d2ef"
}
Frame {
msec: 2064
- hash: "051c2ed34cbef82d44aec4841a33f086"
+ hash: "541a01af440e81c7b20fa9df0e85f5f9"
}
Frame {
msec: 2080
- hash: "12b89590b20fff8d6c94dde40a5d6185"
+ hash: "3579e5a3ab93b8c9998ef812f43ba158"
}
Frame {
msec: 2096
- hash: "7a29cd11ddb042203465a9522ff951ce"
+ hash: "c2902c8068a48788e5511d2987191181"
}
Frame {
msec: 2112
- hash: "4853f364261ab8e1c9d35cfe42efb385"
+ hash: "3fc7d417d13cbccbff81c0630cf968f3"
}
Frame {
msec: 2128
- hash: "7149ab3ed649cac9cf662be7c434056f"
+ hash: "5507fabe77585c38b2929e2565cd8e9d"
}
Frame {
msec: 2144
- hash: "bbe199700474dda156355d31ac09be39"
+ hash: "73f6a9a1602929b80ba28ac2c8095a95"
}
Frame {
msec: 2160
- hash: "a3f3fbbe844b8c6fb8cb8bbcc17120e3"
+ hash: "3377ee6818f1fbf15cfe2916ef7328ed"
}
Frame {
msec: 2176
- hash: "e9a04cfe9e8c50f74978fbd4ecce536a"
+ hash: "4bea4237a5044b9ffbe9815b877a5b96"
}
Frame {
msec: 2192
- hash: "0df1d4211f770cdd7b8a98ea476c6f42"
+ hash: "f25dadf7b916625f120d3b5fc1602d0d"
}
Frame {
msec: 2208
- hash: "a6837afb43663b9473db2378b1a9f989"
+ hash: "ba095d86b7ecc9e2ca6c5d6567d6debf"
}
Frame {
msec: 2224
- hash: "691ea67f3b84b8dda449c2a8e86b1087"
+ hash: "296129caee6a9526aa2c6071fb07198c"
}
Frame {
msec: 2240
- hash: "16d18947637c63662b9a502c493f06ec"
+ hash: "42abe26548e9eb7a2c63aea7f349808c"
}
Frame {
msec: 2256
- hash: "8f9207d404da08706e150f3b64d0088d"
+ hash: "2d187394342584568aa24353233f67f7"
}
Frame {
msec: 2272
- hash: "48ad430e38cdc34845a834cfb9ea70ef"
+ hash: "5c4047c8ca78103d443f9058f3ec3237"
}
Frame {
msec: 2288
- hash: "1252cfb294ae99c40b03dd021160553f"
+ hash: "05af8a131ec98b5bc60669bfcdee9a16"
}
Frame {
msec: 2304
- hash: "b1d5e752fbe03c95ee0dc7bbdf6fb9f6"
+ hash: "b486a796a74962d6b5a4e928ff9e6a2d"
}
Frame {
msec: 2320
- hash: "2282cb42ef0c812ba27e33ed0f962a84"
+ hash: "8bfa5cc3edf294a728bae51014733230"
}
Frame {
msec: 2336
- hash: "42fc82c8d40d383b3cf31a741a4358c5"
+ hash: "fb5928a74d75f7eb23ed914e12ea2dba"
}
Frame {
msec: 2352
- hash: "368c1ffa2deb1911929f1769e31c8017"
+ hash: "16c83f70c3559e97c4a28df7e8b94d95"
}
Frame {
msec: 2368
- hash: "8693bdbde404e36970943ac6b650ca00"
+ hash: "a7f926210d56dc368c99da12a27db42e"
}
Frame {
msec: 2384
- hash: "57609613c336029b60da428d48842a4e"
+ hash: "9f235f259af00126a3fc2417d399dee6"
}
Frame {
msec: 2400
- hash: "b61dafe9e87421d3fcf8cb9ff0e7a41b"
+ hash: "2397c99cc1697303bad9fbd029ee63a3"
}
Frame {
msec: 2416
- hash: "c8c34d1d82bef418ef97f52cb9773cf4"
+ hash: "b83a021c82c203d6cf690edd5fd98c89"
}
Frame {
msec: 2432
- hash: "aa756c09717dc02e81e76511b4c58f60"
+ hash: "4e9e74f8b115b69b593f0233f9431258"
}
Frame {
msec: 2448
- hash: "96e75c5ce1b5393f6cc46fbbe0a67689"
+ hash: "2d8f24eea1e87691eb2292bd01756498"
}
Frame {
msec: 2464
- hash: "fb5febae411f43a6cd218b03b36f5018"
+ hash: "bad7ffbfe4feac5e7a13a70c8096ddab"
}
Frame {
msec: 2480
- hash: "889870fa67784261e7b73b7d0a53324e"
+ hash: "6869d23bf601c67593f23402023f931d"
}
Frame {
msec: 2496
- hash: "fb124d4ebee6457f2137f07954619912"
+ hash: "6e4846623fe8b4a1c850729620cd7502"
}
Frame {
msec: 2512
- hash: "258ae87f78805c555e0ed802c5123eeb"
+ hash: "f679d87f206ca71de191f3991c13f4b0"
}
Frame {
msec: 2528
- hash: "2e730872c37f118a03864d23ebf7bab3"
+ hash: "7f503ceda23f0e4718f6216c3b4ddef7"
}
Frame {
msec: 2544
- hash: "381386302f210932bc7d44247a48f13c"
+ hash: "69f01285109c21cbd32a0f17942734be"
}
Frame {
msec: 2560
- hash: "306f8e6d183eb080da3375d65f2491f0"
+ hash: "f2060324802c080703ff62c051c7cff2"
}
Frame {
msec: 2576
- hash: "39862f236aabf362d0a07ba64eb212e1"
+ hash: "45d01b58f0812596aff06a09c1167d83"
}
Frame {
msec: 2592
- hash: "57452ecfea80ebd4d9fd23f8efbb34f2"
+ hash: "688c9931abdaa7225da91cdf7f2beb48"
}
Frame {
msec: 2608
- hash: "64bd12d4f6e32f19abef79289673c2fe"
+ hash: "d522505f28615cc17206ca6099dbd83e"
}
Frame {
msec: 2624
- hash: "56340d636f4df7e5f68e84c1d8388429"
+ hash: "ad86d8cee90c1458b64318f3edd94aee"
}
Frame {
msec: 2640
- hash: "795cd97d4be294fa6157f23793861ec3"
+ hash: "6dda1a6359b421ef7c9ffa4ecd863341"
}
Frame {
msec: 2656
- hash: "4be9fd5314ad6721a0ddf5a5dc51ccee"
+ hash: "dcc388cdf2b87e10b07e2f05ab6dce3c"
}
Frame {
msec: 2672
- hash: "3349b775c329db022bf0414b9ed57466"
+ hash: "a5d64264be7778929116c9407548c7f8"
}
Frame {
msec: 2688
- hash: "587b7070836063f9d138c4a4ee8da8bb"
+ hash: "cc7ac18a25936825d42694a9022b73fa"
}
Frame {
msec: 2704
- hash: "5bb078819bef7695c9af1bd4b544a26a"
+ hash: "4423af95764aadbaffe3c608fb3a376b"
}
Frame {
msec: 2720
- hash: "799c05999713e8b29f7d2917f515d2c2"
+ hash: "ad186cd5735531e2e6bfb2fc387dee2d"
}
Frame {
msec: 2736
- hash: "41bb926661acd8e21300f4933734748a"
+ hash: "d0e7c8071350bac03cf06996b6f74a63"
}
Frame {
msec: 2752
- hash: "2ead23d38a2f1834c7688a9657d9d7cc"
+ hash: "d012311c64fb35717155ebc88f9940d6"
}
Frame {
msec: 2768
- hash: "196309eac81adea21630dda19947ef5e"
+ hash: "13111334420c479b6a3ddbde65e2d143"
}
Frame {
msec: 2784
- hash: "cf414b2004712581f11f27890745c761"
+ hash: "3a77939f35498ef91590cd57c534fb6a"
}
Frame {
msec: 2800
- hash: "6b2a6837da878fa8f3811b2045e098b1"
+ hash: "89cbc568600c18c3d7163c3079a3f584"
}
Frame {
msec: 2816
- hash: "7390cfdef1d4bc194b86854b1947f15d"
+ hash: "2a8db5a4cae5258578749a88fbf915ce"
}
Frame {
msec: 2832
- hash: "9e4543fcf65a56edfbcaf46805343071"
+ hash: "ddd9cef18ce748096869dae9c2e23de3"
}
Frame {
msec: 2848
- hash: "3a886e2ed813eb7d44d0cd67eb5dee31"
+ hash: "d9e213af096ce69f75863ed7c39b59f4"
}
Frame {
msec: 2864
- hash: "625baed6cbf3a58b32060810be53d0b6"
+ hash: "69e9bfa09b8f5a1e2d83b77a5c9bc374"
}
Frame {
msec: 2880
- image: "particles.2.png"
+ hash: "ac6878edac61916bf424dcee2d7790e8"
}
Frame {
msec: 2896
- hash: "484666ad104cee644c6a7e8ec0c4b10e"
+ image: "particles.3.png"
}
Frame {
msec: 2912
- hash: "41abe2e2d92b293407141d0333d7d04a"
+ hash: "e60ed277794737b9f5d8c4a575f5b300"
}
Frame {
msec: 2928
- hash: "953c03834bd3b50798b77c0c6bb0f4a8"
+ hash: "5c1a39fa9789064ff0d5ea1fd4c6d187"
}
Frame {
msec: 2944
- hash: "a076463868003c62df3ee5147ffd4660"
+ hash: "64c1593bf33b85593153ac9eeeb7793e"
}
Frame {
msec: 2960
- hash: "b389b5c9ed31816dd562a8f1332d28c9"
+ hash: "dab7df26ba23ed3e750fa6080916f177"
}
Frame {
msec: 2976
- hash: "246706829939a2619d64fad63e424fdb"
+ hash: "5958428d5ab5a379f9bbcc0f86c20d1b"
}
Frame {
msec: 2992
- hash: "d5e644f16bde52c566191a054a1279e5"
+ hash: "65929536b7b8b48958fab7bd1e3ccca5"
}
Frame {
msec: 3008
- hash: "10b2e99d2e08939b75c24a6bbf481858"
+ hash: "cb157ba8c58bb7a8ec357e83e82ab441"
}
Frame {
msec: 3024
- hash: "732a7bb0009f394f0039e09594362c75"
+ hash: "bf36b7c52a3b3b2fb08524131bb4b9e2"
}
Frame {
msec: 3040
- hash: "261f38ce42a8a8c86daadd497ecfad07"
+ hash: "0d2dbb3ba42cad9e8b5833c97dd0cdba"
}
Frame {
msec: 3056
- hash: "8b66ae6261db386d6c4e88d0146db090"
+ hash: "f918a9f5fa6808b545c715dffa2f4838"
}
Frame {
msec: 3072
- hash: "dc8dba79e4466059c29725084cf801bb"
+ hash: "ec11344fb21ee06df6cface390d611d9"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
index b36a220..38506a0 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
@@ -2,33 +2,34 @@ import QtQuick 1.0
import Qt.labs.particles 1.0
Rectangle {
+ property string skip: "May contain random numbers"
width: 640; height: 480; color: "black"
- Particles { id:particlesAnotEmitting
+ Particles { id:particlesAneverEmitting
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
+ Particles { id:particlesA //snowy particles from the top
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
+ Particles { id:particlesB //particle fountain bursting every second
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); }
+ Timer { running: true; interval: 1000; repeat: true; onTriggered: particlesB.burst(200, 2000); }
Column{
x: 340;
- Repeater{
+ Repeater{//emission variance test
model: 5
delegate: Component{
Item{
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png
index 18c8a9e..699f83e 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png
index e86acb4..a742a6a 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png
index 17990b7..71abae2 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png
index 18c8a9e..a6e6b3e 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png
index 18c8a9e..9f125c4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png
index 8636f8f..41d0cd5 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png
deleted file mode 100644
index fa7c4b6..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml
index 54ef858..b75d140 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml
@@ -6,713 +6,1033 @@ VisualTest {
}
Frame {
msec: 16
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ image: "test-pathview-2.0.png"
}
Frame {
msec: 32
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 48
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 64
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 80
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 96
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 112
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 128
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 144
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 160
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 176
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 192
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 208
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 224
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 240
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 256
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 272
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 288
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 304
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 320
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 336
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 352
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 368
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 384
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 400
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 416
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 432
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 448
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 464
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 480
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 496
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 512
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 528
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 544
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 560
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 576
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 592
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 608
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 624
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 640
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 656
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 672
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 688
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 260; y: 189
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 704
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
}
Frame {
msec: 720
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 261; y: 188
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 736
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "fe6d7d28dbeef3cfbac3ac3c3e909216"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 262; y: 188
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 266; y: 186
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 752
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "e21cac055208e47e267ac906c7c2ca9c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 283; y: 183
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 768
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "131e094a79edbeea9a1b981592e55abf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 302; y: 181
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 331; y: 181
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 784
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "73faabf52bd2af8d8b9d28ce21e5e77b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 384; y: 179
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 800
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "359554a95362db1734f606cf677001fc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 432; y: 175
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 432; y: 175
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 816
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "8ef4ecc5c5ba578f0279dc57a6c17ccd"
}
Frame {
msec: 832
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "69c3d9d2700dd395b656b0b09fa63511"
}
Frame {
msec: 848
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "2bbcc36d72c3e9a4b672a46f2aae5076"
}
Frame {
msec: 864
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "125a5f0c8efdf97676edbe379660dcce"
}
Frame {
msec: 880
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "4347a02227207fbf870b6aed76131619"
}
Frame {
msec: 896
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "e08b494c818669bfc48273598574d22e"
}
Frame {
msec: 912
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "186cb5465f45c0df8082ec8cad6ee8b1"
}
Frame {
msec: 928
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "91d04d4469492c3bb2a1ed415dcd904c"
}
Frame {
msec: 944
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "8cc8ef251d68af926a8f300b8666ecfd"
}
Frame {
msec: 960
- image: "test-pathview-2.0.png"
+ hash: "42f64722245f8519386e75ce7e3c0cd9"
}
Frame {
msec: 976
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ image: "test-pathview-2.1.png"
}
Frame {
msec: 992
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "058311da9dcf73a4b4928038334b04b5"
}
Frame {
msec: 1008
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "ea662934ee0c3c8d4dbde3ad49448922"
}
Frame {
msec: 1024
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "01991a871819e7bdbf817580f720ead6"
}
Frame {
msec: 1040
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 562; y: 250
- modifiers: 0
- sendToViewport: true
+ hash: "69a7fe47ae589bcc2607cc42fcea7451"
}
Frame {
msec: 1056
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 557; y: 251
- modifiers: 0
- sendToViewport: true
+ hash: "8240d087b767311e00b7dd4b8726246c"
}
Frame {
msec: 1072
- hash: "1ed6fa56736cf7cb2f99b5d362974463"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 544; y: 254
- modifiers: 0
- sendToViewport: true
+ hash: "cc70c8e79d68f09e6db0dd43b99906b7"
}
Frame {
msec: 1088
- hash: "24f3dd6c49dd8b19cd0c387409405e18"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 534; y: 258
- modifiers: 0
- sendToViewport: true
+ hash: "2bfabef74bc6e1dbf72111838a0e7557"
}
Frame {
msec: 1104
- hash: "08c828e7fdfba4252fa7a9fb06eb728e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 511; y: 267
- modifiers: 0
- sendToViewport: true
+ hash: "66616f01553364c5bd589b781e22163a"
}
Frame {
msec: 1120
- hash: "b76110faf8520f52128b5e1af8f2b838"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 499; y: 272
- modifiers: 0
- sendToViewport: true
+ hash: "58b9de84ebdaabee3917608f2af3bbdb"
}
Frame {
msec: 1136
- hash: "5f56acb5f39ac291cc8e73c0268df214"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 473; y: 281
- modifiers: 0
- sendToViewport: true
+ hash: "964d96b9b783efb1053501f8a6931248"
}
Frame {
msec: 1152
- hash: "840ee0c0d8ea94e22e783a15687f979d"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 459; y: 285
- modifiers: 0
- sendToViewport: true
+ hash: "055b77b921a2bac71b6780ab3179f19f"
}
Frame {
msec: 1168
- hash: "69827007bbdf5a360ccc34a016315113"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 446; y: 288
- modifiers: 0
- sendToViewport: true
+ hash: "074904f31b4f7cf0679f0bf7bba30af2"
}
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
+ hash: "f020a490b6800d5b4402ecb9a8bcd436"
}
Frame {
msec: 1200
- hash: "df07c389b26fc191234c70b97bfaa432"
+ hash: "1615bdedf92f91f089e494d893840c4b"
}
Frame {
msec: 1216
- hash: "8d4e23f4e91d0e0df9d87c3171d5971f"
+ hash: "b6892f6a5db6d211f0d1bb2bbe5045bf"
}
Frame {
msec: 1232
- hash: "dd79837aefeabffa7184be07f2a98969"
+ hash: "5f0d903ba682923ac69454026a359ed9"
}
Frame {
msec: 1248
- hash: "2d9bb2aaf4b882902f090ff0c89053c8"
+ hash: "da5bae496a9ad28585151f4c75ee0c9f"
}
Frame {
msec: 1264
- hash: "b1ec9adbb026d8002a7f16fe9a8d56d2"
+ hash: "68f553248f7ca116671782d1c357b552"
}
Frame {
msec: 1280
- hash: "43b23d6e1aeeb36350c3530650e9156f"
+ hash: "5503df04dd7f4c88314f9d309a5b36b4"
}
Frame {
msec: 1296
- hash: "03f231597c4d5010ee71c74217f2483d"
+ hash: "cc48c1f58b553adcb27d60f176e2b910"
}
Frame {
msec: 1312
- hash: "8607c7412a5a1b4ea1522f28c465a83e"
+ hash: "661f546199d8753a7b6f6ccea5928c12"
}
Frame {
msec: 1328
- hash: "671e80e290bec997eb36320ff76fdccf"
+ hash: "0fd70052c100f77bddbad177d9e5573d"
}
Frame {
msec: 1344
- hash: "5f6717112bd45e5ebe194e0f87d12be6"
+ hash: "488e0652c0ed82a014de63a64145c34c"
}
Frame {
msec: 1360
- hash: "ca8e33c7a5428d70ae13cb64e5098a48"
+ hash: "8b6bf2519080a6e4a61fe216f72dfa09"
}
Frame {
msec: 1376
- hash: "86e60eb395f66bbaa1ec07b3e07013c0"
+ hash: "4dab1827f6ce9561297fce8e067df1bd"
}
Frame {
msec: 1392
- hash: "342fa6ddc02d0a793e97a79ba8882415"
+ hash: "b3f4c5cd728eaf2b791612a7fea64e7b"
}
Frame {
msec: 1408
- hash: "a907fbcc47807d4eb6d66e070ea7f2de"
+ hash: "3d01abd0b8a5a62d58a4c09546f212d8"
}
Frame {
msec: 1424
- hash: "04838f8b495bed6d050cbe54d00aad31"
+ hash: "e76796498cf595c60d4b60cc0e320601"
}
Frame {
msec: 1440
- hash: "d485534916473ea6c4612230c5a95421"
+ hash: "1b31e96f2823e78a0c4029e7bc45b9f2"
}
Frame {
msec: 1456
- hash: "1d3da7cc5b9120724645558584f2f0f3"
+ hash: "f75c182dc24f4fabe1034ee494dba2ad"
}
Frame {
msec: 1472
- hash: "c271f057d5f1745e910b2b407c52a4f3"
+ hash: "646c12edadf350405709860381cfced6"
}
Frame {
msec: 1488
- hash: "050d1814a9ced514db6cfd2732eb76be"
+ hash: "b6719406da9f2484fe55e3c69184f86c"
}
Frame {
msec: 1504
- hash: "cfcd21aadfe3fd611caad83920fb2432"
+ hash: "5456857d6d48d064df1cb3f35d8447b5"
}
Frame {
msec: 1520
- hash: "472f900ef8eef74522da3338ce7fa93e"
+ hash: "8d1809b568345e1532fb6d9428fc9729"
}
Frame {
msec: 1536
- hash: "f9d892a81c6ba3b9fc4c6e76082d4fa7"
+ hash: "5cffa76fe09a771a9f62a9f0392f0431"
}
Frame {
msec: 1552
- hash: "a3febe1c3c4585e25a410a91cc34c1fa"
+ hash: "8de59915e874ce829c691a19ac930f28"
}
Frame {
msec: 1568
- hash: "74cd765c9d9a6fb243070b4a56a07e87"
+ hash: "9027bbf8121f70d26530f70423ec05b7"
}
Frame {
msec: 1584
- hash: "469d324abbef017a99bc587bfae622b3"
+ hash: "d3d1d8b9f7b4eb74a8b7ae5cf19a8e20"
}
Frame {
msec: 1600
- hash: "6054ff6e658f0a5f5e313f0a724d9610"
+ hash: "81ffcc0147e3124a3015deb7c0dbfd90"
}
Frame {
msec: 1616
- hash: "67cee7ebe428c9d35f1f28274f3049d5"
+ hash: "ca0c96e908f05c4ee1af1f80d7b432aa"
}
Frame {
msec: 1632
- hash: "ce6c3a1dd726eacbba6306e56121beef"
+ hash: "2bdb6fbf942623856a6963c335794dd2"
}
Frame {
msec: 1648
- hash: "a7d5f703c98c0c8cd32b189a79e1fd05"
+ hash: "18ac264d9ea9b592b0738f1cf732f678"
}
Frame {
msec: 1664
- hash: "41cfd9982767ba904843fb73a5a0ed71"
+ hash: "1ee9adbbae7b97dc050c82b8ed7b0aad"
}
Frame {
msec: 1680
- hash: "388dcde17a820800237d1185372d889f"
+ hash: "b502390c452883ade550d2761bb09d3d"
}
Frame {
msec: 1696
- hash: "3bd72585388f04d55900ccd345cd576e"
+ hash: "31a6f573fbb3f545ee051e2290938004"
}
Frame {
msec: 1712
- hash: "0e5c63b066f2b70000eca7f3aaa3a195"
+ hash: "3be9788228d9e540313e75671319c5b7"
}
Frame {
msec: 1728
- hash: "15199f3e9f00afc76279b5bbffb78d92"
+ hash: "23cbd718154f939d8270674e8f7607f0"
}
Frame {
msec: 1744
- hash: "596ad681a3b96afbc284e3af5fd173cb"
+ hash: "5f7f49b894b80ddd7cdc544a49ec24a2"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 275; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 278; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1760
- hash: "e5ae2d0245fc5d74c6ea3f7dddd1ca2a"
+ hash: "2a1ddee3d3a0c2a4fffab3988e35e274"
}
Frame {
msec: 1776
- hash: "0d152716f9ebe5f0fae3f5cabb20630f"
+ hash: "2a1ddee3d3a0c2a4fffab3988e35e274"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 279; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 282; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1792
- hash: "74afbfa464b0d19b53432fa4d5ea2804"
+ hash: "5594b9139480ba1c814509a049f9b6c5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 290; y: 172
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1808
- hash: "c8aa3f4738a8c07cdf2450a24c885ce6"
+ hash: "d8729deb404f5b821264743943adb288"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 292; y: 172
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1824
- hash: "2e4e0003f1b1cb10593075862b972643"
+ hash: "6de642baf7698ec65d48ccf0a1e8e7db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 294; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 297; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1840
- hash: "acea518c7da7330ae78daf5fbfd1a423"
+ hash: "f6732999861d1f638484a5aaa9cf0550"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 302; y: 170
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1856
- hash: "0b8d4ea6947b522c6aa9a32d9f16723e"
+ hash: "7cd7c1679838f35556bd4ee4565b7a86"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 305; y: 170
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 308; y: 169
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1872
- hash: "19f2aef82586817ef574a70865060997"
+ hash: "4276a4d9350503603b0c9c98552697b3"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 313; y: 169
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1888
- hash: "115565eb0ba3024dbf15d00ed242c389"
+ hash: "954a47627aee0a1128a78191bf32d984"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 331; y: 165
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1904
- hash: "7e59425c85acf93f5bf55e139c148737"
+ hash: "360a47795f7f9389f82f2f55fa1fe83f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 340; y: 164
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1920
- image: "test-pathview-2.1.png"
+ hash: "19d4284791d0031342ba995bd17a7833"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 354; y: 163
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1936
- hash: "ce96601476cf55f665bef09bb1b038e2"
+ image: "test-pathview-2.2.png"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 361; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 367; y: 160
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1952
- hash: "dc6eaacefe37fc709ac0bef99110f796"
+ hash: "e9cd8fb810ecf39a90af039ead97aaf1"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 371; y: 160
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 376; y: 158
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1968
- hash: "82ad9b84425bd8e385524cb052a8fdd4"
+ hash: "42df1a0fbbe7cce5f2359d9e02696299"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 383; y: 157
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1984
- hash: "608000b44ade998e225010d5ea562316"
+ hash: "cc71434d6bd162386b80cb3b7e387116"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 387; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 391; y: 157
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2000
- hash: "ec6b4d519b7bafcf5293c2b5e6585007"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 394; y: 156
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2016
- hash: "9895792ffa929ba6fc600949f11766b6"
+ hash: "5bdb7472e325651e891c115953afdb39"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 395; y: 156
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2032
- hash: "0d2b27c9ca22520b269f93c90de08df4"
+ hash: "ab3a64b41c67a0b8a6c0830c0e0cb797"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 396; y: 156
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2048
- hash: "78a61e4565db709215b419aa56f6efab"
+ hash: "8eb1f2c8c02c2acf4262e05000045649"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 398; y: 156
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2064
- hash: "d6f2aebed062d093c00b27a52f0b14b8"
+ hash: "514220d357c4a26e4aaf9ed20d3f4f33"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 401; y: 155
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2080
- hash: "21b7a438ad1e835b84e5576e52abbe84"
+ hash: "e44526ef273048028d5989fc662eb7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 403; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 406; y: 155
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2096
- hash: "703e32f43e9a71b8677d6839a0eafe06"
+ hash: "29ac091428a89cfcb4c52c08e0e10327"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 408; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 409; y: 154
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2112
- hash: "b04bea8af558de4120723fc5abd0f36c"
+ hash: "82beb845af88fc9432dc104ff805a146"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 411; y: 153
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2128
- hash: "ac8e91c3b55e058ce8ff08ad6e3af9b6"
+ hash: "371392f267b2c1f4e29963506180e246"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 413; y: 153
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2144
- hash: "54846c8c70b232d05ff5eaf144f6f7d3"
+ hash: "1da06d036cc0a2d2de34eee37b6981c0"
}
Frame {
msec: 2160
- hash: "52281806f5c80512b4bcab7f61139f74"
+ hash: "1da06d036cc0a2d2de34eee37b6981c0"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 414; y: 153
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2176
- hash: "a352657ff34ef8962162c00647df343a"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2192
- hash: "3a0b12d1f8bf5cae8ac06289dd30d52a"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2208
- hash: "2c6bbcd05719f69b9a67be18de2084a6"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2224
- hash: "ab091484522587412b0e8aceeb8987ce"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2240
- hash: "13682b0d45bcbad0f011d08899085b1d"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2256
- hash: "3c5d6f82eafd1b04edfbcbffbdbe2177"
+ hash: "4980de22342d1085e205401090777d24"
}
Frame {
msec: 2272
- hash: "151803d70b7c3327df32c8602fcd677a"
+ hash: "4980de22342d1085e205401090777d24"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 412; y: 153
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2288
- hash: "78613cec5364fe3f0df84188793d8eac"
+ hash: "e0a52543b976dc998615704c63b1f3e9"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 409; y: 154
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2304
- hash: "fc05a3cad43af35230c5ba89f6fd13c5"
+ hash: "82beb845af88fc9432dc104ff805a146"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 401; y: 155
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2320
- hash: "9f826733b300c89eeb80452129505e8b"
+ hash: "e44526ef273048028d5989fc662eb7e6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 399; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 396; y: 156
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2336
- hash: "8565efc5c1fb1bdf5629e3bd495bb611"
+ hash: "8eb1f2c8c02c2acf4262e05000045649"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 393; y: 158
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2352
- hash: "3b8f6e8c526ab8cce170277c378a5a69"
+ hash: "442958c3a705745204db96ff9902b7fc"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 392; y: 158
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2368
- hash: "07db3bc0ab19e0ca829e89558bacf1a1"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2384
- hash: "ed8843024c6ac28a8c782839b362149c"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2400
- hash: "381a9f6564c090613aa2cd0476b95210"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2416
- hash: "c3fabd891fa8e27fd71df175db383667"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2432
- hash: "9b441792fdaa9ba9d340fc0c6a9c11bd"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2448
- hash: "3209c9ba69fa016370e3d56e7e1e37a4"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Frame {
msec: 2464
- hash: "34da0a01453fbb2571b370257fd35f8e"
+ hash: "a130b471b3903f3f1d77f2306da2b92e"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 591; y: 245
+ x: 391; y: 159
modifiers: 0
sendToViewport: true
}
@@ -720,43 +1040,43 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 588; y: 245
+ x: 390; y: 159
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2480
- hash: "32e6204a07c493d0a0f9f50773fe8f32"
+ hash: "374dc7c3ea0c93ac93a857a4620bc031"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 585; y: 245
+ x: 377; y: 159
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2496
- hash: "2a1814768ae500ba9c24bc2e3e4de1d5"
+ hash: "0b943f48b39053bfc906a4a47a37d68a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 582; y: 245
+ x: 331; y: 156
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2512
- hash: "7cf6e3c52d12d590beafd061979a49cb"
+ hash: "099fbdf1560dd79b700914863406c904"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 574; y: 245
+ x: 294; y: 154
modifiers: 0
sendToViewport: true
}
@@ -764,483 +1084,463 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 565; y: 246
+ x: 249; y: 151
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2528
- hash: "c66c36642ab7f6c32b45e27de38d23b6"
+ hash: "3aa1614cc49504d19e979ebf190f2970"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 553; y: 246
+ x: 129; y: 141
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2544
- hash: "6e003380cc6fd303ae3b499863225ba5"
+ hash: "837420c71a5010f25cccd05e5e9b3eec"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 538; y: 246
+ x: 9; y: 133
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2560
- hash: "a790259cea2c247493be58c6018435b9"
+ hash: "871349fc09f418717231b8f8e20a7fff"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 523; y: 247
+ x: -48; y: 128
modifiers: 0
sendToViewport: true
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 523; y: 247
+ type: 5
+ button: 0
+ buttons: 1
+ x: -99; y: 126
modifiers: 0
sendToViewport: true
}
Frame {
msec: 2576
- hash: "e6cce7468a27b5063821df8dbaa15c18"
+ hash: "9b6022024aae22ec1f522fd00ed29e9b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: -173; y: 129
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: -173; y: 129
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2592
- hash: "ff8386cbe89aeac184f4a75237ef4a14"
+ hash: "8d9410909ae259388fa94b3a60342608"
}
Frame {
msec: 2608
- hash: "1a11a90853b025837b991be40efb78f8"
+ hash: "0ceb355351ac99458ba75776c11b3039"
}
Frame {
msec: 2624
- hash: "17da10de7e2d2fcf125207e2873bdee8"
+ hash: "61ca917ecc8ad4c35b7f2a3b828542bf"
}
Frame {
msec: 2640
- hash: "dfbda435d05903cc3a31f4f8f31e8985"
+ hash: "fd5db933d1d8684b15eb5239d19d8919"
}
Frame {
msec: 2656
- hash: "1f3753e809099f20c6289f150a096935"
+ hash: "13f466a82ee22cabf5cbd2463f55b46a"
}
Frame {
msec: 2672
- hash: "9454afc9d70103e1f1c00eb0ad2ca534"
+ hash: "3b7f7880f5b568a0e45cd0e268822f3a"
}
Frame {
msec: 2688
- hash: "860ab90e2421a0c8faab304915b5e6f2"
+ hash: "cca22501c3b5a2ed4264ba060eeb1a6e"
}
Frame {
msec: 2704
- hash: "600258507426a8c3c89e3591ee9328f1"
+ hash: "efe5258ac5962d1d2bfa4286c1621830"
}
Frame {
msec: 2720
- hash: "0795a607b893da2bdc0970195f3039fd"
+ hash: "141998cff765a4e90836b871f229a1ca"
}
Frame {
msec: 2736
- hash: "e300b9109e242d85537fc3f4461eaf8e"
+ hash: "9d684675fa883d5488194effcb1d8d0a"
}
Frame {
msec: 2752
- hash: "dbb84b38e2bda694f210f133dc133180"
+ hash: "fa87f781048f264ddf447441a714ee50"
}
Frame {
msec: 2768
- hash: "2455e9de47da4db88eef35fea1dc2abe"
+ hash: "61b4992b9c52222345c9ada3148d50f9"
}
Frame {
msec: 2784
- hash: "5f0c3d7e089c921a68813a48f0fd8844"
+ hash: "3e255a634d215746cb95f5d765335ea2"
}
Frame {
msec: 2800
- hash: "e6d9e7d0fdc724a6a1804bc94629cab4"
+ hash: "d64a755e47a502244e7f14f2091f0ca6"
}
Frame {
msec: 2816
- hash: "d177183bcbaa27ad061fd88bd037277d"
+ hash: "582562992b0652f995b439897182e0f8"
}
Frame {
msec: 2832
- hash: "78dd13fa6367abd14374462d89a3d066"
+ hash: "2d69b1a274c262faf5ce9ed3191c7d22"
}
Frame {
msec: 2848
- hash: "41d12e4c362ccc99a1a04b3a09f0e68c"
+ hash: "36c04a2bd58124877a332bb6a262a7e5"
}
Frame {
msec: 2864
- hash: "5112700bf72aacb176e63ef054fce244"
+ hash: "798711925da8f5034039dad86cc1fad1"
}
Frame {
msec: 2880
- image: "test-pathview-2.2.png"
+ hash: "31495157a10c3bb4dd70cfd857fd07e6"
}
Frame {
msec: 2896
- hash: "0257e67512c62ffc42a272fd304e4ed3"
+ image: "test-pathview-2.3.png"
}
Frame {
msec: 2912
- hash: "42cd0a98aa0f3768cf77aac284072fa9"
+ hash: "b81330eb50dbd39f1abcdb8ff1553d08"
}
Frame {
msec: 2928
- hash: "811d27f89b0c434fc49e4280f85c2f27"
+ hash: "ececcb86b76e9cd2f57585bd87e16bef"
}
Frame {
msec: 2944
- hash: "887406c50c666d08e4d98c040efae9a5"
+ hash: "2c37e2c24cf22a334cfcc6f2691ad9fb"
}
Frame {
msec: 2960
- hash: "27e10fa9d82920c7f761465501d44564"
+ hash: "ad0572020d273dbca046357aa0f8bf3b"
}
Frame {
msec: 2976
- hash: "ba67dbe0010ba2aae3ca100886b11553"
+ hash: "51a469e059a5e1a3675db731f55209d3"
}
Frame {
msec: 2992
- hash: "8064db575e2c74c0faf7782adc527a08"
+ hash: "dca7d50a3faab1f049bece34bd16b8c4"
}
Frame {
msec: 3008
- hash: "b7fd5446ad957610ab853e0c597b9a36"
+ hash: "86dc86bafb01fa086caa3b22f9d393d9"
}
Frame {
msec: 3024
- hash: "092b53eb50e91d74db7899328899cfd3"
+ hash: "05754bd86070a6f01bf90ca2b964f695"
}
Frame {
msec: 3040
- hash: "0346065ad603b41db9365987ebe81586"
+ hash: "911ec290ba303f0cac258cbb893bbf78"
}
Frame {
msec: 3056
- hash: "705083f27a338fea544c9806f0d8fcb3"
+ hash: "f27f29249426f46b8fb508372bcbb32d"
}
Frame {
msec: 3072
- hash: "fc29b4888e26deec4c983e487b9bd058"
+ hash: "2f452e2d519f33ee03db67ebd7f69e3b"
}
Frame {
msec: 3088
- hash: "0ff734e0509908eba292c1814f677e5b"
+ hash: "35cf7747a75ea3f727c2fe1dae6136c5"
}
Frame {
msec: 3104
- hash: "7181d9011ddd3ad49ee95fac2e146b12"
+ hash: "6773187693f52a8f2c0e358e379b4d21"
}
Frame {
msec: 3120
- hash: "4478b07b0331bb30e60f23ee74475f73"
+ hash: "abca1f00f7ec60c8c80ba5345898e54b"
}
Frame {
msec: 3136
- hash: "514aa7a4b1230ae1701004f479eeb5f2"
+ hash: "9bee1da64534da97de349e1ee973cc9c"
}
Frame {
msec: 3152
- hash: "56e51f8f36e0f1a5a4b6b21c41151375"
+ hash: "087df06ca720918482f2e29653c7fbac"
}
Frame {
msec: 3168
- hash: "f58216f12e507a91482ded5372f960c7"
+ hash: "5b08911bf0975bd6615bf29294e4b1f5"
}
Frame {
msec: 3184
- hash: "18e8675ca5ea7ade7e32b29f1632e1ff"
+ hash: "dead4bb3768b65418f68bae7dd0bf004"
}
Frame {
msec: 3200
- hash: "13ec0166cc7dd82042e596739c598a1e"
+ hash: "6bfe4c866936d8ae509650419ae12455"
}
Frame {
msec: 3216
- hash: "5cebf9afa912b17ac3161619d238e5da"
+ hash: "7428bdd9609a2594be08fdeac6ff1e17"
}
Frame {
msec: 3232
- hash: "f096b191e347b7e2eab51b6adc1a5aac"
+ hash: "d02f9f693e0ae8c7034bf727064ec28a"
}
Frame {
msec: 3248
- hash: "81cffc13a615ab673172912760863c08"
+ hash: "b6284efd849547bbfefc22ec77d61062"
}
Frame {
msec: 3264
- hash: "e89c7acfc07bc0eb6e9740d545400064"
+ hash: "4b78b647be8e918e85edab0c23b6f882"
}
Frame {
msec: 3280
- hash: "e681f06f57d43a38acb29a3cb45e4384"
+ hash: "c4a02c18ce3574d057e6a54b30efadb3"
}
Frame {
msec: 3296
- hash: "945bfe7808fb620dc3f7ad887183244c"
+ hash: "d1d190010239d0b02a697d1c63c748ab"
}
Frame {
msec: 3312
- hash: "4d1fc53701adce4e4af87c32e6c5a8de"
+ hash: "b198689d11aa59d937297e6fcf675c93"
}
Frame {
msec: 3328
- hash: "c42bbf27e800558fab33bc6e9a0f36b9"
+ hash: "218f3371beea895aefd28aa874012dcc"
}
Frame {
msec: 3344
- hash: "5f48f59812b17a9be466f0601f0ed0df"
+ hash: "1135de1b9a4ebf1d2829546d3c3f3903"
}
Frame {
msec: 3360
- hash: "f3a3f645115077b7aeb66465280b7a16"
+ hash: "773a64cc7bb8e99a25078f348986e28f"
}
Frame {
msec: 3376
- hash: "d1c295b2157001ff1020515f4b2aceaa"
+ hash: "e8ce58aeb18b3f56ebd3d6f61ac94657"
}
Frame {
msec: 3392
- hash: "e5f364e0e4bd75dd04280f6b6f48b8ba"
+ hash: "6de92679c32c7f3e9d9b6ba3a47e65eb"
}
Frame {
msec: 3408
- hash: "f439df4b5907ba0201c0dad934115721"
+ hash: "339b37207af10ad986269e21ab37ff6d"
}
Frame {
msec: 3424
- hash: "2e7eb0e999792f3aa87c63865f68d26b"
+ hash: "ac01f0708800fdfdacec67ac9e80602f"
}
Frame {
msec: 3440
- hash: "45d3ccb3b03adc8323445207d2dca502"
+ hash: "9de89a748b1e18eb6ed94875af6f26de"
}
Frame {
msec: 3456
- hash: "c345f92a25406e33256bfe47dc7f72f3"
+ hash: "d091e4a93c2beafb0ce4b6dff6d5b05f"
}
Frame {
msec: 3472
- hash: "dcb2663d27d644c0b50aa7386aa9d488"
+ hash: "9532271085864d2fde3aa6e572599588"
}
Frame {
msec: 3488
- hash: "ebe4b9eaf39676bcdd968f8517efa222"
+ hash: "d00804b42ab1c1f082a9f394ff4d666e"
}
Frame {
msec: 3504
- hash: "deb3e3e6fdf8fe18de907f88822538e8"
+ hash: "2c745f007353e6f8a7195470ba9492c2"
}
Frame {
msec: 3520
- hash: "30e8ab0e6cf32a45190c4b29e458d858"
+ hash: "b4e952acb734ab1a608297fcb44fbe46"
}
Frame {
msec: 3536
- hash: "059e6f57c2c78a25ab8b515c878231f9"
+ hash: "75ceed3c2ddd557866145393fa50a12f"
}
Frame {
msec: 3552
- hash: "fa7621f338ae187edac5cb69b22e64b3"
+ hash: "8b83b80554dd4a1266184092d380554c"
}
Frame {
msec: 3568
- hash: "bf287cbb0963fc8e575cd95808e1983d"
+ hash: "973bddb1b2f9dbadd40c0de3ca7c3510"
}
Frame {
msec: 3584
- hash: "741dc09e0ae13d6afbdaae701cb699ef"
+ hash: "5691b5bf54b50d4ff0a717873e001c00"
}
Frame {
msec: 3600
- hash: "8dd52007df5585aed4b9737a8314a74d"
+ hash: "8b26b0aa8b06da031354c59d7fb41bf0"
}
Frame {
msec: 3616
- hash: "ddcd945a3a4467d8dd0b7a4197aafed5"
+ hash: "45786c39a10b8e1cf399df98f3fb7ffb"
}
Frame {
msec: 3632
- hash: "015deb5f228fa2f77978315ccca4f4c8"
+ hash: "c6d0be03e167c16566372cc992604dfb"
}
Frame {
msec: 3648
- hash: "e1c960e966873e694837fd98f231cfcb"
+ hash: "8d6e057550632d143faf996a62bbd1cd"
}
Frame {
msec: 3664
- hash: "17a177d37b427d9488e36d19b345a397"
+ hash: "7e3a321b95d5f62f0da2b10324b485b6"
}
Frame {
msec: 3680
- hash: "d4aded08d04f79d50536ecf539c0583d"
+ hash: "e842f18dfd36947b2fa086a4d0bb2ec5"
}
Frame {
msec: 3696
- hash: "72890e9b84acf9df6083e23ab9270da1"
+ hash: "a9359e143dae4113437a43cc00493479"
}
Frame {
msec: 3712
- hash: "313859115de570f8d41f67c4db7cf49e"
+ hash: "2eca61c837cca9beb6d1834eafe8c538"
}
Frame {
msec: 3728
- hash: "98918d73b6d6b375db53470dd72c7b35"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3744
- hash: "ff706517a4d257747893c11a3b059926"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3760
- hash: "73e62664a31232c1a349568c8da6ce64"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3776
- hash: "bed046c6eae90d267e859cd76d3eacfb"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3792
- hash: "4643348fc1b47f0d3244e7e717247953"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3808
- hash: "0305bfc35b5618da19e9eabb3c1b5d2b"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3824
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3840
- image: "test-pathview-2.3.png"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Frame {
msec: 3856
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ image: "test-pathview-2.4.png"
}
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"
+ hash: "bf2de49dc940043a955a075dcda1b52b"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 305; y: 280
+ x: 363; y: 156
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4032
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3888
+ hash: "cf72e9ae81dcf833f7a48ffa348b8966"
+ }
+ Frame {
+ msec: 3904
+ hash: "cf72e9ae81dcf833f7a48ffa348b8966"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 305; y: 281
+ x: 363; y: 157
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4048
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3920
+ hash: "cf72e9ae81dcf833f7a48ffa348b8966"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 306; y: 281
+ x: 361; y: 158
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 4064
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 308; y: 281
+ x: 358; y: 158
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4080
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3936
+ hash: "1cea11ee435caa8515797ee5c4fb79cb"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 310; y: 282
+ x: 352; y: 159
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4096
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3952
+ hash: "0da1743b066a73dd19aff6b60ef76830"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 313; y: 283
+ x: 349; y: 160
modifiers: 0
sendToViewport: true
}
@@ -1248,1056 +1548,308 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 317; y: 283
+ x: 342; y: 162
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4112
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3968
+ hash: "ddace1df123421675bc9153c4017cdd0"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 321; y: 283
+ x: 327; y: 166
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4128
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 3984
+ hash: "0c57fe8eef4e41e326dbc82f7b6ae87b"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 328; y: 283
+ x: 320; y: 168
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 4144
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 341; y: 283
+ type: 3
+ button: 1
+ buttons: 0
+ x: 320; y: 168
modifiers: 0
sendToViewport: true
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 347; y: 282
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4000
+ hash: "53968b4b57c09fe0b47e720031c1eed7"
}
Frame {
- msec: 4160
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4016
+ hash: "2ab593b498892bf8bacef875e524284f"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 360; y: 281
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4032
+ hash: "da77708f525ab9d1d3f760595a1f9efa"
}
Frame {
- msec: 4176
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4048
+ hash: "ce73ecb012139dda8e21cb0dce95582a"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 385; y: 282
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4064
+ hash: "086754b023addbbecf3b361382133279"
}
Frame {
- msec: 4192
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4080
+ hash: "adcb9881f246993ff35af24f8750ea2f"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 433; y: 292
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4096
+ hash: "974b423c99316c9a5b2e097bb3a42fcc"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 486; y: 307
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4112
+ hash: "e37263abe79b203cfc4306aa7e5c4853"
}
Frame {
- msec: 4208
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4128
+ hash: "0136eaf2704a5af80f8ba26bbb7f51da"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 538; y: 322
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4144
+ hash: "55fe0338e24aa91790f2cd466464acae"
}
Frame {
- msec: 4224
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4160
+ hash: "9fa5eaebd34e2af136a2894f360301a5"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 588; y: 336
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4176
+ hash: "c48822e620b788947d8a5ec850d6313b"
}
Frame {
- msec: 4240
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4192
+ hash: "ec763070f81e115a5e471923aa539683"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 620; y: 343
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4208
+ hash: "2aa84ad9ef88313a4c63e91bba959920"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 677; y: 354
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4224
+ hash: "14cf7ba825d704c4acc72670fd868d6c"
}
Frame {
- msec: 4256
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ msec: 4240
+ hash: "987bf945cd9c1cfe5bbb17442daa4f26"
}
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 733; y: 362
- modifiers: 0
- sendToViewport: true
+ Frame {
+ msec: 4256
+ hash: "5d4d80565bf4f522c79044d0df55a1fd"
}
Frame {
msec: 4272
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 785; y: 365
- modifiers: 0
- sendToViewport: true
+ hash: "d0a5ec7ff2c5b64c6691888412d0cc6d"
}
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
+ hash: "93750528b6f27df22423eb957a07b55f"
}
Frame {
msec: 4304
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 879; y: 346
- modifiers: 0
- sendToViewport: true
+ hash: "65fd0474f918bac61b46fde8ed8e3b59"
}
Frame {
msec: 4320
- hash: "754f9689239e6154a762a6a1e9e0131b"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 888; y: 335
- modifiers: 0
- sendToViewport: true
+ hash: "cd15f6499863ef84f0ad3b2ff48d6406"
}
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
+ hash: "65101124208b062de9718b34fb43425b"
}
Frame {
msec: 4352
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "cb42d683dc5e4020891601afb0a77947"
}
Frame {
msec: 4368
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "88fdddbf2f766ffff7e77c7612d9cfee"
}
Frame {
msec: 4384
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "776c63f1bbc40624d7fedd6141fbdd97"
}
Frame {
msec: 4400
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "24f11b5abb33d8f180a56fca6f15ef45"
}
Frame {
msec: 4416
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "71d9ab083d15b57336ee278793815713"
}
Frame {
msec: 4432
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "b48e64cb1b8b39e7001af4e7c7d22098"
}
Frame {
msec: 4448
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "587ef2440cd021038cc902a3b1839ff4"
}
Frame {
msec: 4464
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "99e0485247c907c5b6e0f8d5dc7b8977"
}
Frame {
msec: 4480
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "3b2496d61eefaa413f0688afed150749"
}
Frame {
msec: 4496
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "0144d27095182c58e50ae1ccdbfaa05e"
}
Frame {
msec: 4512
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "06237be375826d2434dc564dd2eaf165"
}
Frame {
msec: 4528
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "7235d512503b134ac267b7128163eea2"
}
Frame {
msec: 4544
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "5d5f7ff9bd0a4aa316b764bec8524fe0"
}
Frame {
msec: 4560
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "9be01e649140f950cd882af2e8e1e27c"
}
Frame {
msec: 4576
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "0773e5d219d6fc4f2d385fd1bcd17f93"
}
Frame {
msec: 4592
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "32979d6f14c1aeca1f7ac0c5a330bbdc"
}
Frame {
msec: 4608
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "6f87571a59aa358755d80e94894fe7a9"
}
Frame {
msec: 4624
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "0e31c55386e8838f52024c49d4929710"
}
Frame {
msec: 4640
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "7d6c89f5fae7990643687512f2294449"
}
Frame {
msec: 4656
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "f8542ff33dbad93ed51a0801bd8af778"
}
Frame {
msec: 4672
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "8bed907fe5b04eec118ac4e7759386ae"
}
Frame {
msec: 4688
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "d84facac927215d8d83bd9e375fbace1"
}
Frame {
msec: 4704
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "f1c8b7dc9897713487fcc62c697f41ff"
}
Frame {
msec: 4720
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "611c45384b2abd883a4e3ec3bb30ebd3"
}
Frame {
msec: 4736
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4752
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4768
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4784
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4800
- image: "test-pathview-2.4.png"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4816
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ image: "test-pathview-2.5.png"
}
Frame {
msec: 4832
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4848
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4864
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4880
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4896
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4912
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4928
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4944
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4960
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4976
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 4992
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 5008
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 5024
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
Frame {
msec: 5040
- hash: "754f9689239e6154a762a6a1e9e0131b"
+ hash: "63e075c2cac3770e657217989cc7d80f"
}
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"
+ hash: "34967fb7248c860643bdc01e0135309f"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png
index 16a7e10..af0e781 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
index 116ce88..6f1878f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
index 13896d4..97f09f7 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
index 5d18003..878875a 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
index cd3387f..cdbe606 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png
index 9f31c69..7b78f7a 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png
new file mode 100644
index 0000000..d7b5943
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml
index 06d32b6..bc900c6 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml
@@ -6,381 +6,477 @@ VisualTest {
}
Frame {
msec: 16
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ image: "test-pathview.0.png"
}
Frame {
msec: 32
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 48
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 64
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 80
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 96
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 112
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 128
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 144
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 160
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 176
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 192
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 208
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 224
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 240
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 256
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 272
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 288
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 304
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 320
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 336
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 352
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 368
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 384
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 400
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 416
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 432
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 448
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 464
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 480
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 496
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 512
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 528
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
}
Frame {
msec: 544
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 363; y: 161
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 560
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 362; y: 160
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 576
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b9fed927475786f6f7aefc554cfc1afe"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 361; y: 159
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 357; y: 159
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 592
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "731c8547a72c64ac86aec87c0a9a12cb"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 348; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 330; y: 157
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 608
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "d9d7dd7ea05499f028964fdd11af0fe6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 286; y: 161
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 624
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "361879f350c448a484b71a9e7a42b87f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 254; y: 163
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 640
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "998da4b3e36ee3e17deb2b5a097661da"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 240; y: 165
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 225; y: 167
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 656
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "1b3f9758bd9842cc9545b494499f87c4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 672
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "7e87f7c233dad50549e4bdafe10bb48e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 174; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 153; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 688
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "01ceb2fea81f2192ab11d7d6e1df879a"
}
Frame {
msec: 704
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "9afa862248bd527e07374a5c2f2036a1"
}
Frame {
msec: 720
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "e06439495148bfbf059cfe2b5df22840"
}
Frame {
msec: 736
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b206a28d6f3be8cba9595849328b27b8"
}
Frame {
msec: 752
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "646e4529bf554dceee0140ec56a02d1c"
}
Frame {
msec: 768
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "31bdcf1f178d65e033e23dfbdcb9dc5f"
}
Frame {
msec: 784
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b4e897356814ca2dddbc3644b1782f36"
}
Frame {
msec: 800
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "669e5d682aae8727640e0e0f4e855a60"
}
Frame {
msec: 816
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "892007b1a379c617412502499df92d01"
}
Frame {
msec: 832
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "f4d66daa2d428aa712a73ded2de7a361"
}
Frame {
msec: 848
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "0c21e69bed6dc2d6b7c23c20714aca67"
}
Frame {
msec: 864
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "189909bdbfeb1f02ad527fbc438d567d"
}
Frame {
msec: 880
- hash: "01b9c877f51b878ed262943aedcf89b4"
+ hash: "b2fcbc0657474e1b6d27e1f2f93be35b"
}
Frame {
msec: 896
- hash: "01b9c877f51b878ed262943aedcf89b4"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 623; y: 222
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 621; y: 222
- modifiers: 0
- sendToViewport: true
+ hash: "4407d7ad1b6a40b2355145aee136ff15"
}
Frame {
msec: 912
- hash: "1c2d4a99e7e2f5e945c05857d6a463a2"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 609; y: 230
- modifiers: 0
- sendToViewport: true
+ hash: "347ada687af0a97f0a862a1f3a1132be"
}
Frame {
msec: 928
- hash: "d69c0678ce2025a8921b089311d219ea"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 583; y: 248
- modifiers: 0
- sendToViewport: true
+ hash: "db6217ff0194c5a3f9ca9ea7e3b3dfd8"
}
Frame {
msec: 944
- hash: "55a852b268151d660e4945da88b04022"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 559; y: 258
- modifiers: 0
- sendToViewport: true
+ hash: "8a94ca0ee93daaa1bdcdbfc8a80713c1"
}
Frame {
msec: 960
- image: "test-pathview.0.png"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 547; y: 264
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 547; y: 264
- modifiers: 0
- sendToViewport: true
+ hash: "ab24d0c8545518cbaff876976247be2c"
}
Frame {
msec: 976
- hash: "55ab61911405e762b39b38d1371ef845"
+ image: "test-pathview.1.png"
}
Frame {
msec: 992
- hash: "be3de45165f2f0916f734fecf3f48c47"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1008
- hash: "0a523daec6b591a2b5030c6c0b95cb24"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1024
- hash: "22da168e523fa385cce1f2e6a05e1332"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1040
- hash: "464cb37780cf126df6dad4169445c7bc"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1056
- hash: "666b06a0fbe2d10fbf3e15883a166c60"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1072
- hash: "223732cd526e09155ca99c80780bc3fa"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1088
- hash: "c74cc48188b05c5426a6b955ed9f09a3"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1104
- hash: "8d09a95ab09f87277fcc727e9c5da0fb"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1120
- hash: "71b7d4ec45270158ba4ca96817d8f231"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1136
- hash: "4847a1e7d792ed58e3476112b02c6fab"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1152
- hash: "ef444a3a960bdc176e004b949e5c89ce"
+ hash: "1535dea92038cf87395a616841fd9bf6"
}
Frame {
msec: 1168
- hash: "1ebf4badb7f4ef3938868a74740fcbce"
+ hash: "1535dea92038cf87395a616841fd9bf6"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 378; y: 161
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1184
- hash: "022918cd4b54750b0ad28bcb00108f51"
+ hash: "1535dea92038cf87395a616841fd9bf6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 376; y: 161
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1200
- hash: "1ea398b2b7c52b35981c98b60d5d7a02"
+ hash: "1535dea92038cf87395a616841fd9bf6"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 374; y: 161
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 373; y: 161
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 1216
- hash: "05d7619ed0154fa414686522a7ca86c4"
+ hash: "c612bb9906f18786ef7cc6f4e56de218"
}
- Frame {
- msec: 1232
- hash: "03274e26ea57d1264f21d306533476ef"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 367; y: 160
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 1248
- hash: "5109372d6c62225aaf971aa53c708bee"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 353; y: 160
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 1264
- hash: "71f10446437963eccb87dd40c172118f"
+ msec: 1232
+ hash: "ffec210dd863ed32a780506f61b06056"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 708; y: 240
+ x: 328; y: 157
modifiers: 0
sendToViewport: true
}
@@ -388,55 +484,59 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 707; y: 240
+ x: 303; y: 155
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1280
- hash: "e47426491548162622f9a281c3d062ec"
+ msec: 1248
+ hash: "9613c658f267d19b84d6e7ef2a676fed"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 685; y: 252
+ x: 280; y: 153
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 1296
- hash: "e889fba64d9f94fe18c3750dd6ad9d00"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 635; y: 264
+ x: 253; y: 151
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1312
- hash: "7fe200757a6bf752906d195fe341be14"
+ msec: 1264
+ hash: "8c5dd8d0f9f434530b20e14a84af9f46"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 569; y: 280
+ x: 230; y: 151
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 151
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1328
- hash: "aa1f4147dc3fd66f6d9e2605d0759951"
+ msec: 1280
+ hash: "a956e8e9ca8958c387f8f5ce374cdec9"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 533; y: 294
+ x: 193; y: 153
modifiers: 0
sendToViewport: true
}
@@ -444,75 +544,99 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 533; y: 294
+ x: 193; y: 153
modifiers: 0
sendToViewport: true
}
Frame {
+ msec: 1296
+ hash: "712e865d894f179cfd9d86b08e60811a"
+ }
+ Frame {
+ msec: 1312
+ hash: "db5c1f2af2e72ff4edce83cb342b5263"
+ }
+ Frame {
+ msec: 1328
+ hash: "834f0aa26c66234491468c1b27a2d329"
+ }
+ Frame {
msec: 1344
- hash: "2b7163ea45860cf81f208c2b68c418b5"
+ hash: "78a2a4b60db730a7367bc77e1dfc1a1b"
}
Frame {
msec: 1360
- hash: "a89bd1204fb17d9d8ce7b7f4279e9b1f"
+ hash: "a8ff2277b5f7d515bc5a9af1f0e77197"
}
Frame {
msec: 1376
- hash: "683e52637fd5d96ded35f5ade9679822"
+ hash: "e05d730624025000b831860f5b99e8ac"
}
Frame {
msec: 1392
- hash: "2aa16f06e8bed201746558b1003f7d63"
+ hash: "54aa124492ea742e4327f1d2b45ab620"
}
Frame {
msec: 1408
- hash: "f2e40e75ddb8004917ae5b8cf144a322"
+ hash: "bc700bee41ac384a2555723b010e9041"
}
Frame {
msec: 1424
- hash: "0f7f64373b065a454c02c32c52a5ef79"
+ hash: "26f66098c505cea4715a89b6a2232759"
}
Frame {
msec: 1440
- hash: "fb4fbd2b3696bfb6135797b1f0158b5c"
+ hash: "00f3255a3ead315410d8c0d338779689"
}
Frame {
msec: 1456
- hash: "7a8eafad65ff191a97dcf910393ba4e4"
+ hash: "154e7d86d7602ebba38a0d63b211894d"
}
Frame {
msec: 1472
- hash: "3362deae62ba96853d85827f21cec589"
+ hash: "87cf2bff69ebd75af69d0a7c7f668b07"
}
Frame {
msec: 1488
- hash: "0653838fa3fb5b32e561adc20becc9d2"
+ hash: "f221b870ecccb1669b6223e5431c31d1"
}
Frame {
msec: 1504
- hash: "482e78e6b54cabe007f7e7f4f27a07ee"
+ hash: "40a9d4c522d9fd831be2ca698ac10670"
}
Frame {
msec: 1520
- hash: "b51f60864896808c6e41d8a0a990676d"
+ hash: "7ad47479d99fd4d9fde96fef242bdc20"
}
Frame {
msec: 1536
- hash: "d77e59d69b7c21c82bce9a25d548358c"
+ hash: "b91912801c790d849399306c693a4d33"
}
Frame {
msec: 1552
- hash: "b3dddbb1eee0e2f222434511073c4620"
+ hash: "e5c8d361abcbc15df0b0b82728cb5b84"
}
Frame {
msec: 1568
- hash: "d5e0d191582291b269b9e93241d9ac03"
+ hash: "3f2f82c925e93d4593581cdba16f361f"
+ }
+ Frame {
+ msec: 1584
+ hash: "7007fd0595c188a9a5b3ff31b0514aa5"
+ }
+ Frame {
+ msec: 1600
+ hash: "118661091df765ae35c152c7fe818029"
+ }
+ Frame {
+ msec: 1616
+ hash: "0a8edd2a35f7921ced6e3aa7e571bc4b"
}
Mouse {
type: 2
button: 1
buttons: 1
- x: 637; y: 218
+ x: 339; y: 152
modifiers: 0
sendToViewport: true
}
@@ -520,27 +644,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 621; y: 240
+ x: 334; y: 152
modifiers: 0
sendToViewport: true
}
+ Frame {
+ msec: 1632
+ hash: "ef734ce4d7e1aee19a78b743c9923f90"
+ }
Mouse {
type: 5
button: 0
buttons: 1
- x: 613; y: 248
+ x: 245; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 148
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1584
- hash: "8c12000da88abb70cbc370d2a2ca21d7"
+ msec: 1648
+ hash: "09a9925d5ec2fd03cfbf469bc22bf201"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 551; y: 288
+ x: 139; y: 150
modifiers: 0
sendToViewport: true
}
@@ -548,379 +684,335 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 551; y: 288
+ x: 139; y: 150
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 1600
- hash: "2854533fd50f5ebb8fc43cf0041883e4"
- }
- Frame {
- msec: 1616
- hash: "0b3782e842a6c54585d6a266314025d8"
- }
- Frame {
- msec: 1632
- hash: "02409885b82ebac931df18d8e23238d7"
- }
- Frame {
- msec: 1648
- hash: "edcbd91ad267c125c431367be3e4a8a3"
- }
- Frame {
msec: 1664
- hash: "47641fd7ec919b3c041c5acc04b0d083"
+ hash: "6babcbf5582d5ed8f0cf52e233867055"
}
Frame {
msec: 1680
- hash: "ea8f026fee0fba2c27a8df1e1e531acb"
+ hash: "94dae9d52f3523e17f3f0e59ca24a069"
}
Frame {
msec: 1696
- hash: "e2e8a398760be380f9b2b7dbcb03c0e8"
+ hash: "0d417d25893a0454a729f5c23a2a6c28"
}
Frame {
msec: 1712
- hash: "a1767f2e10f9ab87050ef246a4a29bbb"
+ hash: "afd1bbca1dcfea8d1f0a340d86b07fa8"
}
Frame {
msec: 1728
- hash: "f60cccf793bd6d356d69b1394638a201"
+ hash: "97e98982742b94dba8b6cb59397bcb66"
}
Frame {
msec: 1744
- hash: "31dc8c50a99164c19445a089223c8813"
+ hash: "a0ad8cbbd0daa0afd3831e8a071b9a0e"
}
Frame {
msec: 1760
- hash: "78ff726b7da5ba03fa74f66b39bf1006"
+ hash: "f71826bcd6ea91d2f64d627a390c379d"
}
Frame {
msec: 1776
- hash: "6f8a540dccf7182f6aed8903a0afb109"
+ hash: "7699da01cf1ee9a7f404ab053241b530"
}
Frame {
msec: 1792
- hash: "c914c500507b9c7180dcf25e985135e9"
+ hash: "6aba727ecc562d7b5555eae427e6978b"
}
Frame {
msec: 1808
- hash: "39702ce38bcfca46ef3a8dbb7299c725"
+ hash: "ef9c6daa5b04b0be9159594e04524fba"
}
Frame {
msec: 1824
- hash: "969b71ee88a1d244e62af1cecc105234"
+ hash: "6293ede5de83f3b01a3b4d8d87648089"
}
Frame {
msec: 1840
- hash: "11c8397fb9d7b993761b08ba8c9958e5"
+ hash: "c3b34d8592f88622cad0f9353d08e739"
}
Frame {
msec: 1856
- hash: "79ad4a90ab449e3232db993b30786d89"
+ hash: "880f3cb9d5dbe06cdf17e3a953d4562d"
}
Frame {
msec: 1872
- hash: "daf979fd50e0860bf30f377a059d89dc"
+ hash: "ed381ce920863a5a6627f383a88ea2fe"
}
Frame {
msec: 1888
- hash: "5412e7524dc22e8064c8a8c684092802"
+ hash: "b5bc40b8c4abb6458aeb67eda73507b6"
}
Frame {
msec: 1904
- hash: "2c3bea8bf10ecf6c19b93e94cb7ac0ea"
+ hash: "482cb61b7fac4b1654483f846b8b6717"
}
Frame {
msec: 1920
- image: "test-pathview.1.png"
+ hash: "e1a4a16d2cf5132a9fbb0869ed6082d9"
}
Frame {
msec: 1936
- hash: "bbfa2f8aaab0abaff9d771d5ec546d96"
+ image: "test-pathview.2.png"
}
Frame {
msec: 1952
- hash: "be2811bf369bc9dd8c5d9deec3b84788"
+ hash: "f8874aaab1e65cf9b86d6b5174c3d2c8"
}
Frame {
msec: 1968
- hash: "779838915f48eb917d36c3f2b65eedae"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 595; y: 236
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 565; y: 256
- modifiers: 0
- sendToViewport: true
+ hash: "d8490adeaa793352b812e832f4cb079a"
}
Frame {
msec: 1984
- hash: "d20b5fe14b47dfb1e73f8ef44802da11"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 507; y: 286
- modifiers: 0
- sendToViewport: true
+ hash: "85fdb99926ba34a25fa964df11af9a5a"
}
Frame {
msec: 2000
- hash: "5312dd1f9d309ab5134b8bb67685488e"
- }
- Mouse {
- type: 5
- button: 0
- buttons: 1
- x: 461; y: 288
- modifiers: 0
- sendToViewport: true
- }
- Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 461; y: 288
- modifiers: 0
- sendToViewport: true
+ hash: "ad137a75981c181838d97cbe313063ac"
}
Frame {
msec: 2016
- hash: "8d6b6cbb74cc654bc5aff10a807dd3cb"
+ hash: "bfa5cecfc0058b56ca66aa816ea098dc"
}
Frame {
msec: 2032
- hash: "dee717869177d1de4a26599b120f1c3d"
+ hash: "53fe3960c2f332eb099fedd8421fcc94"
}
Frame {
msec: 2048
- hash: "2b2c60f42024784ceed5c68505dfa5ca"
+ hash: "61b99ff526560c1589d2fc8737af2af2"
}
Frame {
msec: 2064
- hash: "1a6a108fd6cf607ec08dbedd804d12f7"
+ hash: "f9dd63709bed985f5d691d27c0d32484"
}
Frame {
msec: 2080
- hash: "10bc4d0a1dc400fedc9a68b68c6525fd"
+ hash: "964c20ada9ad9e83edd9b429bf681b83"
}
Frame {
msec: 2096
- hash: "dc6a4abfbfb38e90af2308320d0f795b"
+ hash: "997bc44a319c8ce8212387f7564c4005"
}
Frame {
msec: 2112
- hash: "82c61d8461001c19af7c2b458d427e0b"
+ hash: "892eda6e7446321483ffb1dbf44a0432"
}
Frame {
msec: 2128
- hash: "e455d9ccffedaa708532bb69ad15871e"
+ hash: "62068dca6da7227882b6c3bc147c6f24"
}
Frame {
msec: 2144
- hash: "b9c6169ad08724fc70df30668dfe7509"
+ hash: "2cd0c351c53234d4bbf4d2c74d313f59"
}
Frame {
msec: 2160
- hash: "a3fe5862be470470854d4157c1c027db"
+ hash: "cf812f971bb4f8ab3116cf2b14c325df"
}
Frame {
msec: 2176
- hash: "6a3804bd5f4fd5f1c424615ceb620525"
+ hash: "be296bd9ab4c38d95e6d7d445d8c7f68"
}
Frame {
msec: 2192
- hash: "df0d72248310654a9cf47e707fe9e414"
+ hash: "536d0214c8c3f69ce8d4e1585128b2b8"
}
Frame {
msec: 2208
- hash: "beb19f2b2979ab40b5ccf8c0fbe9b72f"
+ hash: "f71452a0a6ef80758800d67e601a162b"
}
Frame {
msec: 2224
- hash: "be3449b49048b764bea68a76baa0fc75"
+ hash: "e57c099beb70d0a4ca2cbc94a2c3887e"
}
Frame {
msec: 2240
- hash: "4a615cae9c8f85e7b8aecd4c9014f1eb"
+ hash: "84cea22f64ff8b8838a7db0b19af1a4e"
}
Frame {
msec: 2256
- hash: "b3c274f1a9d65684c0a55a544bf77810"
+ hash: "04aa0d5d089779977f569d0f849b97dd"
}
Frame {
msec: 2272
- hash: "31456b01fcfb60a77d2b9662c2fff7b6"
+ hash: "85b52e125142d52d531132939930dd93"
}
Frame {
msec: 2288
- hash: "2be5cf3f6158bf09659acc68b134846f"
+ hash: "19bc7b318c21a6ce2be8ebde2e624fc3"
}
Frame {
msec: 2304
- hash: "5f9c725a11305f3e6c48ab332faabf50"
+ hash: "9cc744249cb031f0400e87893c1642af"
}
Frame {
msec: 2320
- hash: "277c2733c7245d045665198984b74224"
+ hash: "a834706bbf573f37cf9f59c6c6cbbfa5"
}
Frame {
msec: 2336
- hash: "265b8342bc747fb43a5291df0f4ce48b"
+ hash: "8db3eea9d47a162d8b0ee9cd18e194f3"
}
Frame {
msec: 2352
- hash: "803b49ec31955b481009a51c64bcce65"
+ hash: "29da9b8da8f572ace93250abb8626a90"
}
Frame {
msec: 2368
- hash: "a717b30ad50746cdf0fae82212ac88f0"
+ hash: "179b74316d885f9ee41066b9c475b57f"
}
Frame {
msec: 2384
- hash: "65f46c8e69f24d060b5da6f866867f51"
+ hash: "35464509ef5a9919af46a30d40c3edc7"
}
Frame {
msec: 2400
- hash: "52f9e5d1106d00a950470076a50e4239"
+ hash: "aadec42355d38d149421ef6c93783e69"
}
Frame {
msec: 2416
- hash: "058a787aae2845308e68bb93f6a811e4"
+ hash: "cb8609791270e8e3c13da4579f85595f"
}
Frame {
msec: 2432
- hash: "621985111c25994c0c0fe3635be67c1d"
+ hash: "93e81e036a1bc30cc63ce703f8f43a34"
}
Frame {
msec: 2448
- hash: "2949b8185cefbaaf587a043d805cc670"
+ hash: "d08d18adf9ca92cd6597c2f51ae90383"
}
Frame {
msec: 2464
- hash: "d4a03127ae5047184c736617deeac92d"
+ hash: "f54ec103787023647beaa4b992340385"
}
Frame {
msec: 2480
- hash: "876c6c5ac4500de6234423bf6f3511d6"
+ hash: "61c9f72d78fce0b966a278abacc97ce6"
}
Frame {
msec: 2496
- hash: "eb08aa172cfbdb696b6f672dfa7b6fff"
+ hash: "5b0500ed0562b11280c3424412f74188"
}
Frame {
msec: 2512
- hash: "a60c13b8f46faa0a35dbb539010550d4"
+ hash: "b8ee7bc1e94ce35bf946ee71fa03d72c"
}
Frame {
msec: 2528
- hash: "c6f8786506e0326a5734ab8aea782f95"
+ hash: "60ec6aceeaf82fc730c3df55b5c06f90"
}
Frame {
msec: 2544
- hash: "a49927f2aae24e692fc379f0ab6f4ee9"
+ hash: "01cc732bad8b28483e79115c117ee26d"
}
Frame {
msec: 2560
- hash: "2f1a2d50e1090b34ad1ea6a36eec4fe0"
+ hash: "b39c8d373524ba679c8567d16e6c5fe0"
}
Frame {
msec: 2576
- hash: "a5ee24d37be960a88684748b73dc75fe"
+ hash: "2474476dfd021ff485c3a127bd22367e"
}
Frame {
msec: 2592
- hash: "28682389395b47ae33ceec1ba3beef4e"
+ hash: "1342a1a0f6bc02159de1be058cf2411b"
}
Frame {
msec: 2608
- hash: "1869667b50b76d99716dd0d7849901fa"
+ hash: "a9721b64b9a5526335937245302249ae"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 72; y: 121
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 2624
- hash: "2806ee1005193f55825aa6147583985f"
+ hash: "109dc503ee86e731f52d25908daf5d36"
}
Frame {
msec: 2640
- hash: "c00589dce90e3ab2f2c8890f30f80d3d"
+ hash: "94998dbab6792c518ca1f37f060f1d4b"
}
Frame {
msec: 2656
- hash: "1f1881f0a29525e380ecbcce15499fa4"
+ hash: "3146ba4e63fa74279939b8de935f067c"
}
- Frame {
- msec: 2672
- hash: "2a4c3ff764545a3899c864680f22f0a3"
- }
- Frame {
- msec: 2688
- hash: "2685820514ce5d5729f3761b1eaa1682"
- }
- Frame {
- msec: 2704
- hash: "2685820514ce5d5729f3761b1eaa1682"
- }
- Frame {
- msec: 2720
- hash: "2685820514ce5d5729f3761b1eaa1682"
- }
- Frame {
- msec: 2736
- hash: "2685820514ce5d5729f3761b1eaa1682"
- }
- Frame {
- msec: 2752
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 73; y: 121
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 2768
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 74; y: 122
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 2784
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ msec: 2672
+ hash: "1aaea4143076bf8ba8190d94fcc89e64"
}
- Frame {
- msec: 2800
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 79; y: 123
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 2816
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 95; y: 129
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 2832
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ msec: 2688
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
- Frame {
- msec: 2848
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 126; y: 138
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 2864
- hash: "2685820514ce5d5729f3761b1eaa1682"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 148
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 2880
- image: "test-pathview.2.png"
+ msec: 2704
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 310; y: 277
+ x: 194; y: 158
modifiers: 0
sendToViewport: true
}
@@ -928,43 +1020,39 @@ VisualTest {
type: 5
button: 0
buttons: 1
- x: 324; y: 279
+ x: 239; y: 169
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2896
- hash: "ce00c77e8ff1768b41f5585344af1c58"
+ msec: 2720
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 330; y: 281
+ x: 280; y: 178
modifiers: 0
sendToViewport: true
}
- Frame {
- msec: 2912
- hash: "24f401275fa6ec7d26234609792fe0b8"
- }
Mouse {
type: 5
button: 0
buttons: 1
- x: 346; y: 283
+ x: 313; y: 185
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 2928
- hash: "d3c74863c627a1b922a6b6c4a24f8c40"
+ msec: 2736
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 358; y: 285
+ x: 344; y: 191
modifiers: 0
sendToViewport: true
}
@@ -972,864 +1060,1508 @@ VisualTest {
type: 3
button: 1
buttons: 0
- x: 358; y: 285
+ x: 344; y: 191
modifiers: 0
sendToViewport: true
}
Frame {
+ msec: 2752
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2768
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2784
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2800
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2816
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2832
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2848
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2864
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2880
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2896
+ image: "test-pathview.3.png"
+ }
+ Frame {
+ msec: 2912
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
+ msec: 2928
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
+ }
+ Frame {
msec: 2944
- hash: "64a3209e6adc737065e5d5c3202a7283"
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Frame {
msec: 2960
- hash: "cf936ffe4330edefddb31c59368491fc"
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Frame {
msec: 2976
- hash: "a67213db044bb876f737cd355fe54444"
+ hash: "a0d8bb20189c3c65e5e72671788d9493"
}
Frame {
msec: 2992
- hash: "0f9e97057cbbd8071e0f5f61318bdf9c"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3008
- hash: "c5f38d334df86ebb6ac4600c83eced20"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3024
- hash: "6d8e6049a36eac4136dbdb5fb18d0650"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3040
- hash: "8ee97cff4a632e6e297bd3bdac27b8d4"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3056
- hash: "aca1fcd005d211d35245e64a44002c01"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3072
- hash: "7076180bf0eb14a5e733be9320f1f009"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3088
- hash: "e0a0545b3a0b6a0b07d3fa987e1d58b6"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 152; y: 143
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3104
- hash: "0294b098ce7f0d381542776320e52d2e"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3120
- hash: "36f8bcc42add38fe149e34a703cf8a02"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3136
- hash: "631426bde50fd35d1da1c30d9878253e"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3152
- hash: "a4d64c9d378138bedf63389e58d8f1d6"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3168
- hash: "17fdf61bffd947c2e9898f5c4517fdf8"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 151; y: 144
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3184
- hash: "653b8c7a55bc4ca763238098711eafa1"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
}
Frame {
msec: 3200
- hash: "89e15b3ee1b1fc945801e08cfcdba62c"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 153; y: 145
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3216
- hash: "7ea615af67336895e6cee6d3a39ff7de"
+ hash: "1236a317e60f7ae3d3fb2fb521bad2a2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 155; y: 146
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 157; y: 146
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3232
- hash: "88faee45db80f04ef1120c35057a5f7d"
+ hash: "1b604ea70459a768fb37a6333000174b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 161; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 164; y: 148
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3248
- hash: "8cfe34047b29ac85e58d55e0f6e0b195"
+ hash: "25e0aabe364085a61b4572ef015dac2c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 166; y: 148
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 149
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3264
- hash: "39255546502fcb882005fe4c38c21fb0"
+ hash: "ee6fc5c1de08e6f13f23b26829d2cba2"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 170; y: 150
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 171; y: 150
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3280
- hash: "6bf7a959a05fc27f651b2a3ba07de30d"
+ hash: "b077c59359d047738d9ba739f591393b"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 175; y: 150
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 177; y: 151
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3296
- hash: "c2c61cb8dbbbd38827277ab32579c6da"
+ hash: "2cc0b8d7bd088f2277f5e939c234114c"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 180; y: 152
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 183; y: 152
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3312
- hash: "ff370d4b4e44c4cbacca96107105df21"
+ hash: "64703db84cd5bda3109546293783804d"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 187; y: 153
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 191; y: 154
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3328
- hash: "ccadd9e070d54de21c76397d18ad3de8"
+ hash: "137cd88932ad1fdbfdbf1a80cccf7b3f"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 193; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 195; y: 154
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3344
- hash: "6302c39de00070b0a23f9dc87f74dd8d"
+ hash: "ff9011d861c64bcad214b52cb4245583"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 197; y: 154
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 199; y: 155
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3360
- hash: "7ab69e6d9809c78dc723609bd2761206"
+ hash: "c3f0132e472d29ddee95c7349243d33e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 202; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 202; y: 155
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3376
- hash: "c429cc724b39891805cf4c1448de60b3"
+ hash: "42ae9c21dce6a7cd59de228dac775dd5"
}
Frame {
msec: 3392
- hash: "396ddf0b01e9fe7c2bfb220e64a0c7ec"
+ hash: "3f8631caf6a98d83356b188d6f94e9a6"
}
Frame {
msec: 3408
- hash: "7a519a4efeecef5e7623a270e458fb13"
+ hash: "b2788cd1939a6dd42f12d8fd1282a122"
}
Frame {
msec: 3424
- hash: "869d174a939e0638a1a22d5c8a010c14"
+ hash: "0d1ab6e9f2780be0c392d20f4b3b9619"
}
Frame {
msec: 3440
- hash: "9ecd2cf4e3b42ff93bcbf4db9829666c"
+ hash: "03fdd91b352798b1ff958c23c0bc5f35"
}
Frame {
msec: 3456
- hash: "b06b58b250d3df365806a3f8991d57f3"
+ hash: "028fee3630fdb3cf862213c0466a56fe"
}
Frame {
msec: 3472
- hash: "7a6fb03feb2ae0af1f143daedd22a88b"
+ hash: "3ab76009ca029723e5cf0bf9bc154102"
}
Frame {
msec: 3488
- hash: "e9fe338dbe7afb69f3870743b0a18805"
+ hash: "866c59b7dd545364b70ddbf21a8ee874"
}
Frame {
msec: 3504
- hash: "04b8def2085e9ce4065b02b938915557"
+ hash: "9b4ff972b1055db38900fc0c5007e7b0"
}
Frame {
msec: 3520
- hash: "7e6942f72012875ba83a1c9121e1f786"
+ hash: "cbe0073c84617e23f0679a08c1a78492"
}
Frame {
msec: 3536
- hash: "291e2d79a79959d9c8c586b6bdc31689"
+ hash: "374a5e6070dd628ed031e80d44be1f3f"
}
Frame {
msec: 3552
- hash: "e490bc7fd92f486b964cca967bd33b38"
+ hash: "4d16c81f877585a82549cfc4f68c574d"
}
Frame {
msec: 3568
- hash: "0c9858e0445e25d2b12c84801de441cb"
+ hash: "64b2b4c374a730b138b3573095f45d2c"
}
Frame {
msec: 3584
- hash: "72ba7a4aacb150e1e9c6de72cff82258"
+ hash: "26c59f4131fdb01ac4771231341c75c3"
}
Frame {
msec: 3600
- hash: "1daca95256842545a5b77bcc46782478"
+ hash: "bf6a3fdb7c516ca9cfc09f1059cc8cdf"
}
Frame {
msec: 3616
- hash: "869f3d16e203ad47f1ae7ca83e369b75"
+ hash: "1bfb86796087cd293c68205cce6ac294"
}
Frame {
msec: 3632
- hash: "9cc9cb20aab3369f4e3c5259d291708c"
+ hash: "e0f76f8fc7bd7756a4e004655f97f782"
}
Frame {
msec: 3648
- hash: "a507b957bab3efe2023a65f8c8b3540a"
+ hash: "61d3aa5f827452482d8a4a903fe64acc"
}
Frame {
msec: 3664
- hash: "9fce2a6cddd8b06a80ce16599b56caa6"
+ hash: "c8e42d3a5df195eaa091e50fc9dcd51e"
}
Frame {
msec: 3680
- hash: "2f85d3064968e3e7b669f733fad58459"
+ hash: "bb684dccf4c0a74dc091fb78c1be4f2b"
}
Frame {
msec: 3696
- hash: "6dd6fad85dc5317a22a05a8486317767"
+ hash: "54341e5a76fb4657021c41e6e3f3d496"
+ }
+ Mouse {
+ type: 2
+ button: 1
+ buttons: 1
+ x: 117; y: 142
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 142
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3712
- hash: "b0faa2ec225cd96fb6d2fd05dc66bed1"
+ hash: "435ee710e108df42f659250ad7dbdb5e"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 118; y: 143
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3728
- hash: "3188219f095c2a9ac7c0f6034463d769"
+ hash: "0c7078ec0d4a1dea84e0fba06323c533"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 119; y: 143
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 120; y: 143
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3744
- hash: "b269e9fe4d14537c8bef0b66effe7319"
+ hash: "854103790c02ca86fa011ef1b0f2be0a"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 121; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 122; y: 144
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3760
- hash: "b269e9fe4d14537c8bef0b66effe7319"
+ hash: "1a5995196e5bb4d1464ca76191af72d5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 123; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 124; y: 144
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3776
- hash: "b269e9fe4d14537c8bef0b66effe7319"
+ hash: "397bbd080cae99790621642fab6ded91"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 126; y: 144
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 129; y: 145
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3792
- hash: "b269e9fe4d14537c8bef0b66effe7319"
+ hash: "66ecad306911060329dcf7695c358e87"
}
Mouse {
- type: 2
- button: 1
+ type: 5
+ button: 0
buttons: 1
- x: 174; y: 234
+ x: 132; y: 145
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 135; y: 146
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3808
- hash: "9480eb8761d4ce90971903fcfab1e09e"
+ hash: "c06da5f40f3f59f576a1d540d0b3244f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 176; y: 236
+ x: 139; y: 147
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 143; y: 149
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3824
- hash: "30a6ac631e1a3433f252f56ee4337cdc"
+ hash: "a88d97691539dce19af4c14baf610275"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 179; y: 238
+ x: 147; y: 150
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 152; y: 151
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3840
- image: "test-pathview.3.png"
+ hash: "a07dca2c0014609ca5241612550992f5"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 156; y: 152
+ modifiers: 0
+ sendToViewport: true
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 184; y: 243
+ x: 161; y: 153
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3856
- hash: "ed07f9eea6cd2cd78a3e2479137f843d"
+ image: "test-pathview.4.png"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 185; y: 244
+ x: 168; y: 155
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 175; y: 155
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3872
- hash: "7a5b201cc8725dbf15d89907fffd4ee3"
+ hash: "e5a4e76dd607ba1bae97aaf184ee009a"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 197; y: 250
+ x: 184; y: 157
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 194; y: 158
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3888
- hash: "bc2433b9e5f03cdbd35922d145a4ce59"
+ hash: "bb1d2614e590562479fc8d301bc7402f"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 213; y: 256
+ x: 203; y: 160
modifiers: 0
sendToViewport: true
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 213; y: 256
+ type: 5
+ button: 0
+ buttons: 1
+ x: 211; y: 160
modifiers: 0
sendToViewport: true
}
Frame {
msec: 3904
- hash: "d443f23aa5449d5f2b11c47feab5a0ae"
+ hash: "5d9fd2238666d3ae04613f1bba0fab05"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 221; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 231; y: 162
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3920
- hash: "c43f00d3ae4c8abbd20fc7157363b19d"
+ hash: "b12a944cb5e593afbb21a10453879b52"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 241; y: 162
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 251; y: 164
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3936
- hash: "22d6f5e9fdfe44e73020e6f504002b7c"
+ hash: "2f04c990978627b86fb2ad04579db0db"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 276; y: 167
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3952
- hash: "4a9a285834aad5795adbefbe167028e2"
+ hash: "e7ddf142fc36174fcaaa70b9340ef7a8"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 288; y: 167
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 301; y: 169
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3968
- hash: "561a6c005950830acf2a45ab9a207346"
+ hash: "4fce53c6f5347fe03ecf17b07fabe3ac"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 312; y: 169
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 324; y: 171
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 324; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 3984
- hash: "b0387e3cfd455e1144d0bce9b51d6767"
+ hash: "75a0ec2c0158c55a90147c3f4afaa19c"
}
Frame {
msec: 4000
- hash: "610237f67aa7e5f8d5b363b1612b4966"
+ hash: "e89e98b7c1f36b74c664c77e121dedcb"
}
Frame {
msec: 4016
- hash: "8034a5a7e0558d73051ea6c5bc750866"
+ hash: "f4c1e52a7b97a25fba640be2a1430d2d"
}
Frame {
msec: 4032
- hash: "0e4dc8a9c124b51c5f1225f4c6a9ec63"
+ hash: "be58ca8f63dac8373825231512f483ca"
}
Frame {
msec: 4048
- hash: "dc4e94522e8c64e9f2dbbf12a1f1aa3e"
+ hash: "755b16d4be00cb52595d42775d6227ac"
}
Frame {
msec: 4064
- hash: "7466c076a95f2f6bbc2b6ce306773337"
+ hash: "c62f1ebbb1e4ae4ca22c060078d6240b"
}
Frame {
msec: 4080
- hash: "787e2749905b97159fd0922c6cb388e2"
+ hash: "5f1187e9530584f9eb81ce1ce8267da0"
}
Frame {
msec: 4096
- hash: "1e510d01afad190ec21de253bd8b4821"
+ hash: "5dc9921e9ddf15ee0457fcdc834544c5"
}
Frame {
msec: 4112
- hash: "d740f40eb21be71ec70c00411d2ee76b"
+ hash: "efacedc2782435ef4e269e6956fb3547"
}
Frame {
msec: 4128
- hash: "887a6f445af8fccf4932eed575a09cbb"
+ hash: "5b356dd3082f6b0920bb41d332595ce1"
}
Frame {
msec: 4144
- hash: "fbb7e1d8cb9dd9016df0c33c69b1451a"
+ hash: "5d8afcc1abd890beb2badf85bcf02897"
}
Frame {
msec: 4160
- hash: "5025e5f04a0807cb298037d6dda8c3af"
+ hash: "03c56ab4fea11cce19fcbb62dccb7683"
}
Frame {
msec: 4176
- hash: "b9924f24f60c24087be165e8e385ebb0"
+ hash: "236254ce32a8e06dc42f2fd3c9ac6c7c"
}
Frame {
msec: 4192
- hash: "2bab970787ac8b056401c8a73cb1a3c5"
+ hash: "4beb33da77bc2b41eb882a2a5cdeb539"
}
Frame {
msec: 4208
- hash: "bda954bfafaa2915d760cf7a602b326f"
- }
- Mouse {
- type: 2
- button: 1
- buttons: 1
- x: 187; y: 242
- modifiers: 0
- sendToViewport: true
+ hash: "b345470adead1ffb3af4d1091ffbd95c"
}
Frame {
msec: 4224
- hash: "9b109bb9e786a45a78849436ea32a484"
+ hash: "c2677f1653b08952338a5c26a724ebe7"
}
Frame {
msec: 4240
- hash: "9b109bb9e786a45a78849436ea32a484"
+ hash: "45b6633acf0ac28c5b5462920cf61282"
}
Frame {
msec: 4256
- hash: "9b109bb9e786a45a78849436ea32a484"
+ hash: "26a9a6609ce8eee1f744c2bd43494f22"
+ }
+ Frame {
+ msec: 4272
+ hash: "9373a8010a05d05cb5b3c2ec75359493"
+ }
+ Frame {
+ msec: 4288
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4304
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4320
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4336
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4352
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4368
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4384
+ hash: "d0c561761825512a02a9e3640139cadc"
+ }
+ Frame {
+ msec: 4400
+ hash: "d0c561761825512a02a9e3640139cadc"
}
Mouse {
- type: 5
- button: 0
+ type: 2
+ button: 1
buttons: 1
- x: 187; y: 243
+ x: 112; y: 126
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4272
- hash: "9b109bb9e786a45a78849436ea32a484"
+ msec: 4416
+ hash: "d0c561761825512a02a9e3640139cadc"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 199; y: 252
+ x: 112; y: 128
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4288
- hash: "cc3c61f49a7b3c395670b86c8078a337"
+ msec: 4432
+ hash: "d0c561761825512a02a9e3640139cadc"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 223; y: 262
+ x: 114; y: 128
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 115; y: 130
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4304
- hash: "464d09b53b78fe5474d9c1d022bee9fd"
+ msec: 4448
+ hash: "d0c561761825512a02a9e3640139cadc"
}
Mouse {
type: 5
button: 0
buttons: 1
- x: 251; y: 272
+ x: 116; y: 130
modifiers: 0
sendToViewport: true
}
Mouse {
- type: 3
- button: 1
- buttons: 0
- x: 251; y: 272
+ type: 5
+ button: 0
+ buttons: 1
+ x: 119; y: 132
modifiers: 0
sendToViewport: true
}
Frame {
- msec: 4320
- hash: "aab17f48ff506cda84543cbe0d8a1ce4"
- }
- Frame {
- msec: 4336
- hash: "b7ba6c107f4085822a738120a913ba0c"
- }
- Frame {
- msec: 4352
- hash: "751b79e202a70dcc9a86c3a1450172b8"
- }
- Frame {
- msec: 4368
- hash: "bb03f969fd6987255ff113ef98ed2bb1"
+ msec: 4464
+ hash: "0e7554f077e2d6d8c6cf9496b20ab009"
}
- Frame {
- msec: 4384
- hash: "c33302b366441fa2d8753d5ce314cd37"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 122; y: 134
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 4400
- hash: "4cdf32004382bcaca5a68cb92761caa2"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 131; y: 138
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 4416
- hash: "d3fe18ea7dcbee0709a2041e50b87154"
+ msec: 4480
+ hash: "d6e78f43c971abcc1d2aadb96e8b80b0"
}
- Frame {
- msec: 4432
- hash: "ac58a7adb0e7a354a058d7e9a7010c06"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 147; y: 144
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 4448
- hash: "bdf8a8934a372ab49f4b6e9c95c7f591"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 168; y: 151
+ modifiers: 0
+ sendToViewport: true
}
Frame {
- msec: 4464
- hash: "d2e8b417b74ec5f6e23f0935a4d0aa98"
+ msec: 4496
+ hash: "10d8e0ee5bd432c639963c9cedd25b85"
}
- Frame {
- msec: 4480
- hash: "0f94c6ca3ffbd730c2d813a991d21ca3"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 190; y: 157
+ modifiers: 0
+ sendToViewport: true
}
- Frame {
- msec: 4496
- hash: "fb7728eebb2fa8f5255dc7435d20bbb6"
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 219; y: 164
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4512
- hash: "c8211e8adcef525c296531a3d369f717"
+ hash: "53e142d6b0112644d75df29f7865fbb4"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 269; y: 171
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4528
- hash: "f24de36c85b87953977fa8b6456209dc"
+ hash: "9609807e6c2a27a8b9f1d5c878c3dadf"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 319; y: 176
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4544
- hash: "9ce7cf389af08cb1ba2534418f51857b"
+ hash: "a0a1e5fd37e9d8033f182f4f2b20fd26"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 361; y: 180
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4560
- hash: "17d1f3ae0dba0bde222bb2483a403fbd"
+ hash: "b40e553dc373e4018488d5421b9a8914"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 406; y: 185
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4576
- hash: "1748d75e229945012ece689b3784a02c"
+ hash: "22e36512a0af86fac12c09f735dcb1f7"
+ }
+ Mouse {
+ type: 5
+ button: 0
+ buttons: 1
+ x: 428; y: 187
+ modifiers: 0
+ sendToViewport: true
+ }
+ Mouse {
+ type: 3
+ button: 1
+ buttons: 0
+ x: 428; y: 187
+ modifiers: 0
+ sendToViewport: true
}
Frame {
msec: 4592
- hash: "6786fa9e31d6f0a71a285c790aa5b008"
+ hash: "70e9ad0f56e4c37f8684e38f614b889d"
}
Frame {
msec: 4608
- hash: "f2a2ba33b41d8d522e8aab34c7da8f7b"
+ hash: "0754126f5738e3dcec35fc1ef65fdec3"
}
Frame {
msec: 4624
- hash: "aa53142d1b433ae9f748aef5cb7bef46"
+ hash: "b3d84ceeecc294d21bc09a3197195c20"
}
Frame {
msec: 4640
- hash: "9c6802b2b0a419a4aaf9909c0f88c66e"
+ hash: "ce00501e194b1056edf1ebd43b954a70"
}
Frame {
msec: 4656
- hash: "206b11f2acd742d55ddd8acf7415bbeb"
+ hash: "793f41ac2568530e6d630446216833dc"
}
Frame {
msec: 4672
- hash: "36876cf600cbf9c3b15f243617c9474e"
+ hash: "e8573de724b653439bde85c15e9555ab"
}
Frame {
msec: 4688
- hash: "1f5daf97294b490546657c5d9e12022e"
+ hash: "bfb3f3645c7b2425b686ac23bcef82b8"
}
Frame {
msec: 4704
- hash: "637fc34fc2cf6139ba8809be54a2a0fc"
+ hash: "faa78596e208c2cf4593ea25e31fabde"
}
Frame {
msec: 4720
- hash: "9f824bd9e156980873619b1978f226bb"
+ hash: "f1b0931bffce37abfe5a6d635f1f8454"
}
Frame {
msec: 4736
- hash: "7002444129a5077ce5be44a5e2530328"
+ hash: "0975630a55bfd56eb3e39426c1c3f1e5"
}
Frame {
msec: 4752
- hash: "42b7a44030ad4fc50ceb6a60bc97991e"
+ hash: "98f1d79153a8009123abc94141375779"
}
Frame {
msec: 4768
- hash: "ae986cac541033398076fb918136212e"
+ hash: "d864817f877a9eeb44c665518ea19687"
}
Frame {
msec: 4784
- hash: "6bdd9f764b1675e5b0feced8c2d831a6"
+ hash: "79745c267d14e7790e1bb3a7e76f20b4"
}
Frame {
msec: 4800
- image: "test-pathview.4.png"
+ hash: "ec038d4cec64b847711fa221f808bead"
}
Frame {
msec: 4816
- hash: "07dfffe85adc4b52565e9ed156fa3ed6"
+ image: "test-pathview.5.png"
}
Frame {
msec: 4832
- hash: "c987bbe9fbf74bb6cf2686a5ee97c59a"
+ hash: "ef7b3f93abbf210f8f0d38a58380dc8f"
}
Frame {
msec: 4848
- hash: "19568159ec2282d5f150583baa0a8a94"
+ hash: "f0eea63127df25f7f818596fc034fef8"
}
Frame {
msec: 4864
- hash: "5b176ef6bf70ff1a9805ca85b1b0c1a2"
+ hash: "8000dee3ea54522a8193a7f9f2e86023"
}
Frame {
msec: 4880
- hash: "de716a8c15a46bf1621878794e968c53"
+ hash: "111485ebaf93aae4f5e0a83da898bbac"
}
Frame {
msec: 4896
- hash: "241af9ab77c86cdb75f73339548604ad"
+ hash: "4b2dee1fd88dcaeabc8235f6a0e5c090"
}
Frame {
msec: 4912
- hash: "afc7168ecb7fa7e3310ca818b75f7a1c"
+ hash: "5e560c777d0294dfa8f249232bfcf3a2"
}
Frame {
msec: 4928
- hash: "83bff911b502a34d139a724f686bb1f9"
+ hash: "d8b490092ca5ce3ef9b078f4768c382a"
}
Frame {
msec: 4944
- hash: "f4d3fb54ae5be2b13065cd4316b06837"
+ hash: "28b2bbc3fd19786dd9c0ab718141c525"
}
Frame {
msec: 4960
- hash: "d29c7dfedf9dd355d60e394528b3b938"
+ hash: "d1a61000ebc5a475c0223dde649c8054"
}
Frame {
msec: 4976
- hash: "ddf23d860ea71ab4b407de1a5f913f74"
+ hash: "d3e8aae08a2518c039d6bda80fc520a4"
}
Frame {
msec: 4992
- hash: "a0dbb6ecbfd08f9ebdd641fea5dae16c"
+ hash: "9f3bd8654adb9af0457dd50ff71fcd43"
}
Frame {
msec: 5008
- hash: "7ed3170e55e3c3c9561959ad4c56d326"
+ hash: "befe00fef613b7616e2dc668a5ed59c7"
}
Frame {
msec: 5024
- hash: "dbde5f508aabc2d1f2ccfaf135efeca9"
+ hash: "24e84e6998389aa119d7d9e0ac2206ac"
}
Frame {
msec: 5040
- hash: "72039739be41bf63b3959bdc90ce25bb"
+ hash: "2d3d2b66bf016c8e499f527dbf8923db"
}
Frame {
msec: 5056
- hash: "417789daefe6bc01320db7803ae31d61"
+ hash: "52d24673729dbd53d3227675b7001b24"
}
Frame {
msec: 5072
- hash: "7e57dbddaf379f4316182048fa9e2d6f"
+ hash: "4e5c807682d7b6b7839c047a7fb4ad93"
}
Frame {
msec: 5088
- hash: "aeca9a4df94d2b9ac2a713531a7d98f1"
+ hash: "319affea47c4a0b0e2c3db51b85430bc"
}
Frame {
msec: 5104
- hash: "98ad6694f23678819020d6ac0161651c"
+ hash: "344962f0b88c7e8a33df71b4708fd1c0"
}
Frame {
msec: 5120
- hash: "b6eba3872da19ec677eee419ae9cccbc"
+ hash: "ac099ba8a5639b9c83b6f58f2b5bcf93"
}
Frame {
msec: 5136
- hash: "e824909bfe7b6d54773bb218ba93e884"
+ hash: "2f8e57c93289dcdc758281531300e949"
}
Frame {
msec: 5152
- hash: "3be04f3ff6d948538f4472bc6bfadb0f"
+ hash: "e4cc3bdf6068064bcfdd0014cc301e65"
}
Frame {
msec: 5168
- hash: "e05ff21dda1d978a2ac2eedd3826b6f7"
+ hash: "598c8a33e2bbf47b21df8b0636e0f0bc"
}
Frame {
msec: 5184
- hash: "8ee970b2b197c8d879a7b1703cbd4dcd"
+ hash: "6aea67c85370eee8447a22e2b9e8c44c"
}
Frame {
msec: 5200
- hash: "e583845e7719d2776c6362c34f77937c"
+ hash: "39e27a3376f4aba8510f7b0d90ca0e33"
}
Frame {
msec: 5216
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "0ff93a16a07af43bd5e22a2b00fd2588"
}
Frame {
msec: 5232
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "8b6004368b9b0a766f6b519820fe1ff6"
}
Frame {
msec: 5248
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "5d92c0a12ff138d1b2c75bd042be4ea2"
}
Frame {
msec: 5264
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "4386b0abe49106a0174154c726c301f6"
}
Frame {
msec: 5280
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "832da8d2a86caa3ca96f33d2cd49178e"
}
Frame {
msec: 5296
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "efee6ab1ba4a1112f2129aad12825667"
}
Frame {
msec: 5312
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "f20a7e67a4789c559b0b0a7656bd89b1"
}
Frame {
msec: 5328
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "350cc8c0085a8f79c9ea8880737a0b75"
}
Frame {
msec: 5344
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "b19715b4029ea489debf7c5a269aca98"
}
Frame {
msec: 5360
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "f383fcaf603af41650c5622bfaf136b3"
}
Frame {
msec: 5376
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "0c62a442367fc0bac5117da1327ed39a"
}
Frame {
msec: 5392
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "323ba45d158d983f359211f1a87b7ebd"
}
Frame {
msec: 5408
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "aeed1a31b8b77dac2c2858969ff2d86c"
}
Frame {
msec: 5424
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "27a9357730a97846ffeddd18492df04d"
}
Frame {
msec: 5440
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "42f78593e64585b33c8854e8ea92710e"
}
Frame {
msec: 5456
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "064f5cec99b9a351bebe2088019f46d1"
}
Frame {
msec: 5472
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "d3669826f94aa2afc1069ab967f677a3"
}
Frame {
msec: 5488
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "a118cf8892d29e6b70b4e65e42380c15"
}
Frame {
msec: 5504
- hash: "593fd590531ccfb59d890b8043eaab9c"
+ hash: "f254260f01ff4697e9e3146cc106140d"
}
Frame {
msec: 5520
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "ec062b2bb87444115c2e8744b7f80bde"
}
Frame {
msec: 5536
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "4d45522a4e4253c810cac9cbf24c9b76"
}
Frame {
msec: 5552
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "532c3d3ead73836948a1036e8e69cadf"
}
Frame {
msec: 5568
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "4debea14aeac85ff4e64387938d8b010"
}
Frame {
msec: 5584
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "d8940cf6e39a1bd5e7216a83ce87a676"
}
Frame {
msec: 5600
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "fba6485f8a60a38ce2f3110137b1f2df"
}
Frame {
msec: 5616
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "8a8909b114332dd932b784a2640e9ff4"
}
Frame {
msec: 5632
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "fd901422400333c137240ef5f91928a3"
}
Frame {
msec: 5648
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "97b84a957515d5823e381fdd86d31fb8"
}
Frame {
msec: 5664
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "f3547ea694b88dd7d2fb8b04d6bf76a9"
}
Frame {
msec: 5680
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "9eb0da29d0c323b45e62d31bee97ce8c"
}
Frame {
msec: 5696
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "9d814096d27e9fbcffdf7e29866e0059"
}
Frame {
msec: 5712
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "6087185e1e8bf17545a7372be2990ab2"
}
Frame {
msec: 5728
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5744
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5760
- image: "test-pathview.5.png"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5776
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ image: "test-pathview.6.png"
}
Frame {
msec: 5792
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5808
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5824
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5840
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5856
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5872
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5888
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
}
Frame {
msec: 5904
- hash: "c0d0f62d9078f6be493d5545a2ae78ad"
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 5920
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 5936
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 5952
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 5968
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 5984
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 6000
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 6016
+ hash: "82e534c416dfe884e5abc2f91d902484"
+ }
+ Frame {
+ msec: 6032
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6048
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6064
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6080
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6096
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6112
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6128
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6144
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6160
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6176
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6192
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6208
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6224
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6240
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6256
+ hash: "6839b467f32eaa79d4c1ce4905145350"
+ }
+ Frame {
+ msec: 6272
+ hash: "6839b467f32eaa79d4c1ce4905145350"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml
index 38368d4..3171203 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview-2.qml
@@ -1,7 +1,7 @@
import QtQuick 1.0
Rectangle {
- width: 800; height: 450
+ width: 580; height: 220
//Same as test-pathview, but with pathItemCount < model.count
ListModel {
@@ -20,8 +20,10 @@ Rectangle {
id: photoDelegate
Rectangle {
id: wrapper
- width: 85; height: 85; color: lColor
+ width: 65; height: 65; color: lColor
scale: wrapper.PathView.scale
+
+ MouseArea { anchors.fill: parent }
transform: Rotation {
id: itemRotation; origin.x: wrapper.width/2; origin.y: wrapper.height/2
@@ -31,9 +33,10 @@ Rectangle {
}
PathView {
- id: pathView; model: rssModel; delegate: photoDelegate
- y: 100; width: 800; height: 330; pathItemCount: 6; z: 1
- focus: true
+ id: photoPathView; model: rssModel; delegate: photoDelegate
+ anchors.fill: parent; z: 1
+ anchors.topMargin:40
+ pathItemCount: 6
path: Path {
startX: -50; startY: 40;
@@ -41,22 +44,27 @@ Rectangle {
PathAttribute { name: "angle"; value: -45 }
PathCubic {
- x: 400; y: 220
- control1X: 140; control1Y: 40
- control2X: 210; control2Y: 220
+ x: 300; y: 140
+ control1X: 90; control1Y: 30
+ control2X: 140; control2Y: 150
}
PathAttribute { name: "scale"; value: 1.2 }
PathAttribute { name: "angle"; value: 0 }
PathCubic {
- x: 850; y: 40
- control2X: 660; control2Y: 40
- control1X: 590; control1Y: 220
+ x: 600; y: 30
+ control2X: 440; control2Y: 30
+ control1X: 420; control1Y: 150
}
PathAttribute { name: "scale"; value: 0.5 }
PathAttribute { name: "angle"; value: 45 }
}
}
+
+ Column {
+ Rectangle { width: 20; height: 20; color: "red"; opacity: photoPathView.moving ? 1 : 0 }
+ Rectangle { width: 20; height: 20; color: "blue"; opacity: photoPathView.flicking ? 1 : 0 }
+ }
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml
index ce516ac..4374b84 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml
@@ -1,7 +1,7 @@
import QtQuick 1.0
Rectangle {
- width: 800; height: 450
+ width: 580; height: 220
ListModel {
id: rssModel
@@ -19,7 +19,7 @@ Rectangle {
id: photoDelegate
Rectangle {
id: wrapper
- width: 85; height: 85; color: lColor
+ width: 65; height: 65; color: lColor
scale: wrapper.PathView.scale
MouseArea { anchors.fill: parent }
@@ -33,7 +33,8 @@ Rectangle {
PathView {
id: photoPathView; model: rssModel; delegate: photoDelegate
- y: 100; width: 800; height: 330; pathItemCount: 10; z: 1
+ anchors.fill: parent; z: 1
+ anchors.topMargin:40
path: Path {
startX: -50; startY: 40;
@@ -41,18 +42,18 @@ Rectangle {
PathAttribute { name: "angle"; value: -45 }
PathCubic {
- x: 400; y: 220
- control1X: 140; control1Y: 40
- control2X: 210; control2Y: 220
+ x: 300; y: 140
+ control1X: 90; control1Y: 30
+ control2X: 140; control2Y: 150
}
PathAttribute { name: "scale"; value: 1.2 }
PathAttribute { name: "angle"; value: 0 }
PathCubic {
- x: 850; y: 40
- control2X: 660; control2Y: 40
- control1X: 590; control1Y: 220
+ x: 600; y: 30
+ control2X: 440; control2Y: 30
+ control1X: 420; control1Y: 150
}
PathAttribute { name: "scale"; value: 0.5 }
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png
index f474afe..a02a00d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png
index 8b7ae74..be18b8d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png
index 9088bb4..e4db4bc 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png
index 18cd429..d464e79 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png
index 739afc1..b0b9386 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png
index 93f0682..4ea4b24 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.6.png
new file mode 100644
index 0000000..a115867
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.6.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml
index 4b36e16..5f1e8be 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml
@@ -6,1598 +6,1598 @@ VisualTest {
}
Frame {
msec: 16
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ image: "dynamic.0.png"
}
Frame {
msec: 32
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 48
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 64
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 80
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 96
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 112
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 128
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 144
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 160
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 176
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 192
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 208
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 224
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 240
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 256
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 272
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 288
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 304
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 320
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 336
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 352
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 368
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 384
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 400
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 416
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 432
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 448
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 464
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 480
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 496
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 512
- hash: "ee42cfa8cbbd67becb7d50998d26fe73"
+ hash: "d203c2cb69cb0841827e14bddc206d1f"
}
Frame {
msec: 528
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "453d5fb9d38f37bb8c23e376de76db06"
}
Frame {
msec: 544
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "c4a103de3b7207b3c6277e8ecf79f7dc"
}
Frame {
msec: 560
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "f58b0eb42d9b6ace87379f205da57550"
}
Frame {
msec: 576
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "3384c5b5939d8297e0834c7cd347d579"
}
Frame {
msec: 592
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "420b55371c69c6e1a17ef85a600c75d1"
}
Frame {
msec: 608
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "55cc6fb3424ef69d316ef29f6563a025"
}
Frame {
msec: 624
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "045b5ac545e69777b814423f77575990"
}
Frame {
msec: 640
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "45b05241e8e83180a8d92a37dc859ce0"
}
Frame {
msec: 656
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "97915dfbe4943e1f583ee134bc7a0117"
}
Frame {
msec: 672
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "9b4ce5ed20dd81698b4dd8e48f799c5c"
}
Frame {
msec: 688
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "24bdcea108cdbb3898a4d9216e9f9510"
}
Frame {
msec: 704
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "d1427093b1a375e86a69c6f65cb1f8e5"
}
Frame {
msec: 720
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "43dd666b15697ae18eb2410017256e4c"
}
Frame {
msec: 736
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "8043755f5a8a528353f1e7c310a46a97"
}
Frame {
msec: 752
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "d6b2ef0cb81395cd7454392aed4571f0"
}
Frame {
msec: 768
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "c249fd272e02cbdde972e85fc6dac695"
}
Frame {
msec: 784
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "1df5f8fce7b0c102e9902912600054e7"
}
Frame {
msec: 800
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "a9d16b180634620e3fe6caacb730885b"
}
Frame {
msec: 816
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "7228ce597720520bc12911fdef70ca86"
}
Frame {
msec: 832
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "1faa5c3e72740941234ff4a93388edc9"
}
Frame {
msec: 848
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "997ee1c6d5838153182473a3724df4ad"
}
Frame {
msec: 864
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "6ebbc0a0427825ea701f5bb4758f11a2"
}
Frame {
msec: 880
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "a2ac19360d631fd6d58f8a5ee85e40b4"
}
Frame {
msec: 896
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "17a5842b47a220bb8bd74a368cea6c1f"
}
Frame {
msec: 912
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "b37bae9c3384c068a7dd4f1135d3bfaa"
}
Frame {
msec: 928
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "65ffb0b6629364ebc687da7785601abd"
}
Frame {
msec: 944
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "27c7a43515fb2d8cddde42263f6ac9df"
}
Frame {
msec: 960
- image: "dynamic.0.png"
+ hash: "cc292df8a090c08d135dedf5e2a0af7c"
}
Frame {
msec: 976
- hash: "62727b1025930e19bb03c8f533a12ced"
+ image: "dynamic.1.png"
}
Frame {
msec: 992
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "59735c8372774b50052d15232d2f6d01"
}
Frame {
msec: 1008
- hash: "62727b1025930e19bb03c8f533a12ced"
+ hash: "9c239c4439009465dd91606ac84a3bf0"
}
Frame {
msec: 1024
- hash: "3e52e7d7d428cf1b850cb9c60dbb3c21"
+ hash: "8b9715d6468c8501895545bd84bf7f57"
}
Frame {
msec: 1040
- hash: "64f75ab14c979d33d6e0c0d86b76cd35"
+ hash: "0f7a123bfff1dbe059b6ceb3a3f44180"
}
Frame {
msec: 1056
- hash: "c198a48f4050f176465649d203d6e09a"
+ hash: "c1bc31a379d15ca67d0ffc7139800b3f"
}
Frame {
msec: 1072
- hash: "6dd8cee5a585a96e78f2cf7478c4da62"
+ hash: "ebf470cd7cff4a836da9e721acfd327d"
}
Frame {
msec: 1088
- hash: "09edfbce2ea4b8a547f769ce709dcb6b"
+ hash: "e2b89846459f8ae48117ab4393d493bf"
}
Frame {
msec: 1104
- hash: "e93d01aa6e4f5d3fc82cf5a008e3ea17"
+ hash: "5b980dcc070faf4ab4099cd5f711259c"
}
Frame {
msec: 1120
- hash: "0e2e7b5eec0e62853972b0139b8c17c6"
+ hash: "4640ed55c1608d76109407279a1f02db"
}
Frame {
msec: 1136
- hash: "26d4f54628ce20f5665bdc6ddc7f3b6a"
+ hash: "d839b597a3afef61de7b14ffb7ae518e"
}
Frame {
msec: 1152
- hash: "59836aa6eff85b0152be352b97076d89"
+ hash: "2810e01355c32d3f7a9352676e6b5eef"
}
Frame {
msec: 1168
- hash: "47cc9894096731a52ca342ab04df9aad"
+ hash: "f1ac8b222e0068320827564e759e87ba"
}
Frame {
msec: 1184
- hash: "ec95dd3b34a0f17f6fb9b5bedab73653"
+ hash: "7da89563319dd4045e7f9c40a712d722"
}
Frame {
msec: 1200
- hash: "e32c2b70882828b5082ca3ec889a0dde"
+ hash: "09c55dba364e484eec1a1badb4319003"
}
Frame {
msec: 1216
- hash: "68d3f8e9c9d5388a6f8360368c8f4d2f"
+ hash: "defd5c9a8003c58a7bef1930efdd6f29"
}
Frame {
msec: 1232
- hash: "17378b2bd8bde7f357fa5463f457c7b2"
+ hash: "0f84e515b41b5c064ece9002e5edff0d"
}
Frame {
msec: 1248
- hash: "03db786cd54ec34ce8db15953a5fc847"
+ hash: "d1a0405a18fe5b54e79ca0cadf46743b"
}
Frame {
msec: 1264
- hash: "9e22a82a622ed0287c44cc629059d5bd"
+ hash: "6046feb2fad386ae25ddd0d0e8ecb673"
}
Frame {
msec: 1280
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "b4374b0d9d709b0d7a9f8949616a16bf"
}
Frame {
msec: 1296
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "4d9d7d28f32ce2acd14c8dca0bc11fa0"
}
Frame {
msec: 1312
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "384afb63bdf34729132ac57080fa2988"
}
Frame {
msec: 1328
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "44ac2a9783c450a8c39b09387f0439e2"
}
Frame {
msec: 1344
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "26e1dfc2b54370f94881c2341b6e0618"
}
Frame {
msec: 1360
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "be47d72ae7c57e255706a8a5afe1fd3f"
}
Frame {
msec: 1376
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "92cb490b081bccedf0bbdee86dbc50ed"
}
Frame {
msec: 1392
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "1f0a09601474246e94c5ec3763cfa83e"
}
Frame {
msec: 1408
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "73f1a5c57a2c96e18ba894a7adb9a014"
}
Frame {
msec: 1424
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "8aa130cf4b2706afc8d582ee4c5f510d"
}
Frame {
msec: 1440
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "1c0de0f1f4aa5f44bdf774169296487d"
}
Frame {
msec: 1456
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "1e9b701ee63effb760e733ac623d75d7"
}
Frame {
msec: 1472
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "c30620b6d5d41937217fa9d3e0bf367d"
}
Frame {
msec: 1488
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "1f96e1da113d4a6cdb7179771ef7967d"
}
Frame {
msec: 1504
- hash: "42955cd23747f7c37d0f0229c0955e90"
+ hash: "aa31458e44ba42a633421e8688a3af7e"
}
Frame {
msec: 1520
- hash: "981fb1ee75e307b548a32df08a86f4cd"
+ hash: "a7a560c05566d0bbea3f2bf397a0063a"
}
Frame {
msec: 1536
- hash: "f77568307e93d8cd9f0ae417cc19d6e3"
+ hash: "fdd290bc46b86a11afdffb95570d9a67"
}
Frame {
msec: 1552
- hash: "3bdd4468e26aceee0dad6b3b97b1c1ea"
+ hash: "46574d7bfc15bc5b9124eb0e12741724"
}
Frame {
msec: 1568
- hash: "252c9ebc2c32755b2289ee1b03877fe3"
+ hash: "aed2015031da6c7e5064fe5fcd1e86e3"
}
Frame {
msec: 1584
- hash: "64169b7eb7b7ae8573556c5f80230965"
+ hash: "dea39f30e686771ca516ac32e3dc4cb0"
}
Frame {
msec: 1600
- hash: "4965dfa709a9ac7d8f7dfb4bf8303c65"
+ hash: "4a9839f52a7ee6732c5e18c0d67534be"
}
Frame {
msec: 1616
- hash: "8c53cf92510154087341ac65a93aae5a"
+ hash: "df21723df1031542483684ff92aaf40a"
}
Frame {
msec: 1632
- hash: "4dd7502e3e238743d2f3cf038270491e"
+ hash: "53683b7b52d0940aac744f0ef03a4527"
}
Frame {
msec: 1648
- hash: "cd9a58316837eb92f4ac92dbd86bdba3"
+ hash: "e6177b60c5586e79ca82e1bc7af41737"
}
Frame {
msec: 1664
- hash: "5de043e3ac8696b59293a2fa60ed7e65"
+ hash: "592a60e226aa6967a8a41bc0e4288583"
}
Frame {
msec: 1680
- hash: "1bf42a6f6be5a3468d2f47cccfac761e"
+ hash: "534512915d800d00350803c3fdcccaf3"
}
Frame {
msec: 1696
- hash: "ca05510c1ad25e5d3b002603f4379a09"
+ hash: "a01ffd7ab177f850f3d8320da19a03ce"
}
Frame {
msec: 1712
- hash: "f6904a918a6475f1965d74372e52a4b1"
+ hash: "15bd47f2c5c8cefe7565790b429aa6a4"
}
Frame {
msec: 1728
- hash: "9e2312ddfc1648b615288107a06c9f9c"
+ hash: "b90692eafe68c2b04057af887617667c"
}
Frame {
msec: 1744
- hash: "95c470273b1cb08d4d602efcce339554"
+ hash: "edb22bd93a83de0cd3a046ed5a513ece"
}
Frame {
msec: 1760
- hash: "dade96f707d4a21885480e13b258b7e9"
+ hash: "f08fa88d05f48c42dd1eba538dc464d4"
}
Frame {
msec: 1776
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1792
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1808
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1824
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1840
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1856
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1872
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1888
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1904
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1920
- image: "dynamic.1.png"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1936
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ image: "dynamic.2.png"
}
Frame {
msec: 1952
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1968
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 1984
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2000
- hash: "0bfbd46f1d4cf562253fb383776cb601"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2016
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2032
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2048
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2064
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2080
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2096
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2112
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2128
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2144
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2160
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2176
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2192
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2208
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2224
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2240
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2256
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ec46803523ee0516ed2c89923ff2ded7"
}
Frame {
msec: 2272
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "6b8b68e359f532729bf25a6851563ad7"
}
Frame {
msec: 2288
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "1ee3cf0c3c738a909f1b40b4ef49ac50"
}
Frame {
msec: 2304
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "71889e0f81eeb252dd91a46af5ce24e7"
}
Frame {
msec: 2320
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "99390a696ac524d752672df6f2136fa3"
}
Frame {
msec: 2336
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "00919914f1623bb260e0f99b471aa182"
}
Frame {
msec: 2352
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "64bd7ff1518a3e84c4b40511c5c0ff2d"
}
Frame {
msec: 2368
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "b68da721bf79592e49408b098f72e884"
}
Frame {
msec: 2384
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "6a8ca937b7c961c403ab1662d170c1a5"
}
Frame {
msec: 2400
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "3f4034da4cd71738d1130c3baa38cf9b"
}
Frame {
msec: 2416
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "97a86d3c04d07508604b46732b121edd"
}
Frame {
msec: 2432
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "42e9ab3ed744d1a9a7eb5b7a206f29b3"
}
Frame {
msec: 2448
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "ff86192c1b9c0faabb5563260cb1bff2"
}
Frame {
msec: 2464
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "e1de0e431b971deb546935b6b2fc78e7"
}
Frame {
msec: 2480
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "b7817a7f15d8e727e25719de8cc7d50a"
}
Frame {
msec: 2496
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "66772971897fc00d01d067e5fc38f848"
}
Frame {
msec: 2512
- hash: "6fc83e8d4ac99b34062c122a8f7f1850"
+ hash: "175db8c0324af4c206f9673f0a8d0477"
}
Frame {
msec: 2528
- hash: "fabf4e535bc4cc17497939d2eeae4a2d"
+ hash: "f3dea687e0ca335b987b6b3c7d736469"
}
Frame {
msec: 2544
- hash: "a7981035f46869f5ae824d0c58b263b2"
+ hash: "44d035dd8e302b75c5a7f98a2005fe75"
}
Frame {
msec: 2560
- hash: "86d8e369bdceb499b244f84ed9e80ba3"
+ hash: "140cf53cb6873b14e6263537f84b0aa0"
}
Frame {
msec: 2576
- hash: "e28a7dc7ea8690da75670b5a6e93a26b"
+ hash: "6c9090d4488289e69562747271459d7d"
}
Frame {
msec: 2592
- hash: "bf4e815360a67bd80732bd8812269b21"
+ hash: "49e92db256f5be8c4e35566eea8fca70"
}
Frame {
msec: 2608
- hash: "a6f8c56cb93da8acc0c90e35596a60d4"
+ hash: "80f41d2eb743ee13fcc486651e310fe2"
}
Frame {
msec: 2624
- hash: "1e60656f0758605169e51b57bd03af36"
+ hash: "f581fdcaf30c0efd4518e538e88c2ebf"
}
Frame {
msec: 2640
- hash: "c069b26b9fae47e0104070d702ba9562"
+ hash: "c028db6753cf60bf587e6c46080a31ea"
}
Frame {
msec: 2656
- hash: "457eb2ca1adff6cbb158afa140b2f20b"
+ hash: "231b69aa9bdadbaf47cbfbc44a322a51"
}
Frame {
msec: 2672
- hash: "4e5e750b0d94b6777aebff85d38225d9"
+ hash: "f0bcc02aaab3fad2ff53fc2d7541d4aa"
}
Frame {
msec: 2688
- hash: "96d9840c2354a8786a8470309be97544"
+ hash: "80e34154585ba3480e37eaac6bfa396c"
}
Frame {
msec: 2704
- hash: "ac7570cc7eeff1acd8c47f2d9328f8be"
+ hash: "e1ebf3ba98b2df53ac9f72744034ba6d"
}
Frame {
msec: 2720
- hash: "887f937bb263c54f29659f27f2b7a3e3"
+ hash: "b8f749a58888f90ed5cabe7aa2eee1ee"
}
Frame {
msec: 2736
- hash: "616371183c82b97f69a4c6e2367b8066"
+ hash: "3a78458aa124a331f5b1616be5eea914"
}
Frame {
msec: 2752
- hash: "36de8ffa9abe850fb681b37aea45ef8b"
+ hash: "c442c02859bc35a8e5493200e68b1730"
}
Frame {
msec: 2768
- hash: "0505101f0edaaf7ff17deeaaddc6bbf9"
+ hash: "0cc4d24a1e1fa75a339a5b3dd07f18f3"
}
Frame {
msec: 2784
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "0d124bc578058db99e32d58f4b412758"
}
Frame {
msec: 2800
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "fc174a039606c5457532c9ac27c6faec"
}
Frame {
msec: 2816
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "db5d25d7c01605ec81cdab3e239a1f0f"
}
Frame {
msec: 2832
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "7dcffdbf9ac992aac0751bed5c38a0eb"
}
Frame {
msec: 2848
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "b59dc4f39b3e032d5cd34ffca098889f"
}
Frame {
msec: 2864
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "925d232189a3eee4bae08a8fe86a488b"
}
Frame {
msec: 2880
- image: "dynamic.2.png"
+ hash: "4ab3a889e27de8f45670c240f6d452a6"
}
Frame {
msec: 2896
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ image: "dynamic.3.png"
}
Frame {
msec: 2912
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "9b8629b588dcb840fcd32f73f66016ee"
}
Frame {
msec: 2928
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "dca8e45e930314a860f36343f4577738"
}
Frame {
msec: 2944
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "b68f3b38e154b65225211c6a1ca8ddb8"
}
Frame {
msec: 2960
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "d8168aea7962cad60132da9baf66f95c"
}
Frame {
msec: 2976
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "6f83cd7be71666e08172a2c59e715f2e"
}
Frame {
msec: 2992
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "f98c68954ed98f340e86c159fcf4f013"
}
Frame {
msec: 3008
- hash: "e8c53dd8343d7d4c384c2f8507ff0631"
+ hash: "e4692a0e6d82864e9027bcf893e0cf90"
}
Frame {
msec: 3024
- hash: "99e4d853d64a381e8db27707b5ff2b25"
+ hash: "ed02ff4d37ad03c0d0d53cf8163ed1c5"
}
Frame {
msec: 3040
- hash: "ab0e62aeffc0d57a5e1d63e6cf49b809"
+ hash: "fb116353a2ceabae2d93c9aac48727d8"
}
Frame {
msec: 3056
- hash: "4ab11bbf1fb6adb0eec8895f78a24a41"
+ hash: "7b8c99b86838c46db4e756cc039ba045"
}
Frame {
msec: 3072
- hash: "634ff2ceb39a3f263a3362238a4ae252"
+ hash: "c8d8e194bc957402fe2236b1a472faa6"
}
Frame {
msec: 3088
- hash: "7f4856873dc23a02297b2497101de9b9"
+ hash: "f0f3d8c8ac3604cd11b7492fe5ee023e"
}
Frame {
msec: 3104
- hash: "bca3919e9d8e6dc5badd8090401dc934"
+ hash: "b41cf314e4684423b4708ccd55904d60"
}
Frame {
msec: 3120
- hash: "824bfe40c3657cfe1368563640e4cfce"
+ hash: "4f578969386627b6e620e83bad5a6a6c"
}
Frame {
msec: 3136
- hash: "f831c1600f68bda139697c406ca70c5e"
+ hash: "bd9fcfaa4e79f969548af12d072c1ec2"
}
Frame {
msec: 3152
- hash: "f8102ca251a9ff46a8fe5a24cff0d2d6"
+ hash: "a418dc92f8b04fddf95f38bd24825ee6"
}
Frame {
msec: 3168
- hash: "f33407ad684aa16efc6615d1cf6fa4b9"
+ hash: "4684b3e318a08f0f2331a13143592d18"
}
Frame {
msec: 3184
- hash: "a73d27f776a6ebfc90309b34421700e5"
+ hash: "1e135a4fd2e7336d8a59ca3497374a3d"
}
Frame {
msec: 3200
- hash: "ff2a4e2663fc50dfec35152f0e79f935"
+ hash: "d1be76e2c56422b469a9d09e22f62df5"
}
Frame {
msec: 3216
- hash: "4935f5f58f2672e9d240625151044bda"
+ hash: "8827523a7f8fa89a56d932102dff7b52"
}
Frame {
msec: 3232
- hash: "f3ad5c203f621fe4d5d321c3c1880743"
+ hash: "e12e6b907af5e6feffed0b9e68c71895"
}
Frame {
msec: 3248
- hash: "d4fb7cd2e1f6a533dae65ddbb50da8ac"
+ hash: "7bc3605f5f241170732aba19ca649896"
}
Frame {
msec: 3264
- hash: "91705e9234c4f02d0a730f6270f9e95f"
+ hash: "d7da9274f30cacd419f0b0b7c8c8a728"
}
Frame {
msec: 3280
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "154775464235d2a2fb338c27f1490f27"
}
Frame {
msec: 3296
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "1657f65e8759eec3c026262bb271dd1c"
}
Frame {
msec: 3312
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "29b4c68846aab3c1dcf4e58861915c33"
}
Frame {
msec: 3328
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "fe22b3b991a80b34d6fe12515bfa2fd0"
}
Frame {
msec: 3344
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "961343bb9dcc1fbe81b4c20392c28cb9"
}
Frame {
msec: 3360
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "a2adb3179465e34b517bf906491a1b60"
}
Frame {
msec: 3376
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "067fb8a2f5043dd4616fb1539e3e9c4a"
}
Frame {
msec: 3392
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "009329915e9027d77218fd83334960ed"
}
Frame {
msec: 3408
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "81b05d8aef8152830c6f199d6dd94fd5"
}
Frame {
msec: 3424
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "b23fa537f88a97490e48fb3a8cd4b507"
}
Frame {
msec: 3440
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "182464f620768efe0253c97cda75d839"
}
Frame {
msec: 3456
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "f1ddbec396cead5d4acf9b65822becb6"
}
Frame {
msec: 3472
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "a73085722d33638517b3f60a16ce9fcd"
}
Frame {
msec: 3488
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "ecce53b0c525834341ee4b3c546e670c"
}
Frame {
msec: 3504
- hash: "41e177bec783497b996d6d5f6dac1a15"
+ hash: "86f1da737164290a90c1aef9355e2375"
}
Frame {
msec: 3520
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "722ec874122ad8dcc73820a3a2fb7dca"
}
Frame {
msec: 3536
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "35eb086b11482b752e2c02f1dc4d9099"
}
Frame {
msec: 3552
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "83cf9c0b5d0afd5d3cee4c446274f5c4"
}
Frame {
msec: 3568
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "e1bbef11fe02adb0756113e1106fe7f1"
}
Frame {
msec: 3584
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "774c8bb4585954274852d6bb07e64916"
}
Frame {
msec: 3600
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "b0264bcddf313d4e819a608143a86ac9"
}
Frame {
msec: 3616
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "5e3859fd56e5022cbc7831e22447f05d"
}
Frame {
msec: 3632
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "8c2a8b7321d2598b08d483914d4f319c"
}
Frame {
msec: 3648
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "f13913dbc015836e35d5a2ebc94bbeef"
}
Frame {
msec: 3664
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "1309af996f2d7a686f1d9177bc5c9be6"
}
Frame {
msec: 3680
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "460b3500b41624486fe8dcfde087d2b5"
}
Frame {
msec: 3696
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "de0837d19497021528dc782db4da084a"
}
Frame {
msec: 3712
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "18afb8f8e9aa6d4a5db376e26cd9a56d"
}
Frame {
msec: 3728
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "4fc1a8173824c2725160798b7d70aec2"
}
Frame {
msec: 3744
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "87a593f74c946d6af6e31c5a25898766"
}
Frame {
msec: 3760
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 3776
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 3792
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 3808
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 3824
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 3840
- image: "dynamic.3.png"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 3856
- hash: "496dc6261695bcf04a8e574146544e98"
+ image: "dynamic.4.png"
}
Frame {
msec: 3872
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 3888
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 3904
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 3920
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 3936
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 3952
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 3968
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 3984
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 4000
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 4016
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 4032
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 4048
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 4064
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 4080
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 4096
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 4112
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 4128
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 4144
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 4160
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 4176
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 4192
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 4208
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 4224
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 4240
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 4256
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 4272
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 4288
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 4304
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 4320
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 4336
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 4352
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 4368
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 4384
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 4400
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 4416
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 4432
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 4448
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 4464
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 4480
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 4496
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 4512
- hash: "496dc6261695bcf04a8e574146544e98"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 4528
- hash: "9681be99003f8a14cc5654d06d2c8255"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 4544
- hash: "bcb592a2335aa2e35956881fd028f4e6"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 4560
- hash: "f914b25fdcb02a02b71220d82b7b2a75"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 4576
- hash: "63c82c08eb7f2bd50b54b94c952df3f2"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 4592
- hash: "8a8dc82be81fa55605c6c2e749895120"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 4608
- hash: "271f8d79b8052dfcd840ffa9ba9ffeec"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 4624
- hash: "8f77bbd0585b57e69ac1919bd81ee3b1"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 4640
- hash: "b974260a2f90e141ebc33ced98fbca88"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 4656
- hash: "77ada180f8a45652a6fa636d7ece4d9d"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 4672
- hash: "4c8dc2e33cd989cb3b0938c6c75b5f95"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 4688
- hash: "a145954989508b925a444e14f0c27a20"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 4704
- hash: "8d27ff203819174747ae4a5cee8d0ae8"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 4720
- hash: "830f34b0dab780c6efe2294872ba8508"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 4736
- hash: "5d70a4bbd815569cfe5735b596bad080"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 4752
- hash: "964527bb82ea006e03b030c787a8597c"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 4768
- hash: "1ad54954b818fa9e6032ac4b6114e7db"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 4784
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 4800
- image: "dynamic.4.png"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 4816
- hash: "47865243cc252aef67774001af70c54c"
+ image: "dynamic.5.png"
}
Frame {
msec: 4832
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 4848
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 4864
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 4880
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 4896
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 4912
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 4928
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 4944
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 4960
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 4976
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 4992
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 5008
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 5024
- hash: "47865243cc252aef67774001af70c54c"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 5040
- hash: "baeb8adffc13e230e797e0437f2ad5fa"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 5056
- hash: "d2e440fcad0ee2b7b35d7e5c4e581f73"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 5072
- hash: "fb8acb2f69234d3ee089281d0297ad7c"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 5088
- hash: "7fda29a83dc535ed8d6b35e999400311"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 5104
- hash: "6482e3eb10cfdbdeb57dd38ba3e3d67e"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 5120
- hash: "4d222549bc2565c1598a532460aae4e6"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 5136
- hash: "776d1b0f9945c0e1ceda0cf117264919"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 5152
- hash: "f2c362b34a0982ee1a11dea6b063945e"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 5168
- hash: "115f02b8893972b5b1d63525ce70762e"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 5184
- hash: "7f2d53581fe2c6c45a628fa4cd9b5742"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 5200
- hash: "b5ed1120c4edf842b15d5144adbd93b0"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 5216
- hash: "3511938df57c4cdce316692de204b057"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 5232
- hash: "99583918d068ab5d132fe7a699c2a7a6"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 5248
- hash: "c0ce9df18479dbb57fb1dbc777f4f0e5"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 5264
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 5280
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 5296
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 5312
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 5328
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 5344
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 5360
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 5376
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 5392
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 5408
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 5424
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 5440
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 5456
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 5472
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 5488
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 5504
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 5520
- hash: "b24db7b5c406328380fcf9927fb26c5c"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 5536
- hash: "98cc64411264d8a635a6afe6b11cee6e"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 5552
- hash: "b86434b7af8ad1db946c43a2791d69ab"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 5568
- hash: "f45616f9e33658d1dddb537e842c8768"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 5584
- hash: "e49d8955e27cdc19a37c331e56c81af1"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 5600
- hash: "b2dbe764906b50195f65dc11a5842515"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 5616
- hash: "71ce7c63d65c29cdffd83f5ae07f0b93"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 5632
- hash: "901d01e1fc777ec185cd023ad0ace4c1"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 5648
- hash: "a3f31de30fc2e92bae1f735504216216"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 5664
- hash: "0fc52dd8102506e3e7671fa548551b23"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 5680
- hash: "fb92809e728416035dbb91116ad8fe0e"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 5696
- hash: "9003dc8ca4f781909035cb03dc45864f"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 5712
- hash: "2bff1de793ad8521fd54413849c3cf29"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 5728
- hash: "8362e4db7c4446282d844a4fc6632d19"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 5744
- hash: "b874fa274c6ec77c106ff4a0288f9169"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 5760
- image: "dynamic.5.png"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 5776
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ image: "dynamic.6.png"
}
Frame {
msec: 5792
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 5808
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 5824
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 5840
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 5856
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 5872
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 5888
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 5904
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 5920
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 5936
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 5952
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 5968
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 5984
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 6000
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 6016
- hash: "e64ac8e11e36cafb25c947c5802d54b9"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 6032
- hash: "7621e64568058b82bcb6f6b46cee3ebc"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 6048
- hash: "f77f6de6fc88813f49427b4888a59dbf"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 6064
- hash: "d3a48f596219372ac25941e4c5ec5b2b"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 6080
- hash: "d572d932b613f9ca1e0acf144f127dd1"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 6096
- hash: "edf317eaf51d933bcd0f57f214921a81"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 6112
- hash: "e0cee7959a5a8a08ad03d75e7b5c6ca1"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 6128
- hash: "96877a15f44d4a2c8d9974cb28b9e1b6"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
Frame {
msec: 6144
- hash: "c0ffb0ef6dd9d007d201feebd2f68e44"
+ hash: "b692386f34972d80aded2347e64ad2b6"
}
Frame {
msec: 6160
- hash: "209fb930223243fa19c5dde9e85ec518"
+ hash: "dc65b0a791002efffec05884aa948842"
}
Frame {
msec: 6176
- hash: "ae98ac4dba0e78eb8fb7f7dbe29b2832"
+ hash: "069bab78e29d322894647f81d315184a"
}
Frame {
msec: 6192
- hash: "c94a7d68ce007d83df77a595a5815a96"
+ hash: "39c8d804b3caf53845baba4ce98e007d"
}
Frame {
msec: 6208
- hash: "4c28e409bf5a6c1289bcab8cd59a9e42"
+ hash: "3b477dfd05f07bdf0ba562d6068cafdb"
}
Frame {
msec: 6224
- hash: "ea1009f1a3446dd5ce937e6949794794"
+ hash: "eb84ee75bdbf25dcc32587007f5dc9bd"
}
Frame {
msec: 6240
- hash: "940c16766c2f87feef48e1187672ca9b"
+ hash: "441d34bff2755e3c30bed80e2bdde69c"
}
Frame {
msec: 6256
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "57e68ec2aa5a21b11d21f388399713e5"
}
Frame {
msec: 6272
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "4cb9ee1d12b99fb98bedcbcc048867e4"
}
Frame {
msec: 6288
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "3eebd1f4f58210f6b546715997a984c2"
}
Frame {
msec: 6304
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "39eabc07bfcefb2ecd369abf94d706cd"
}
Frame {
msec: 6320
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "a0c46402b4700cc2099bdf42c47faf9b"
}
Frame {
msec: 6336
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "3c8b4831583922c7c1c85f227ef2b3dc"
}
Frame {
msec: 6352
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "c92cba3c2825db4293153588c4b7b229"
}
Frame {
msec: 6368
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "e1b0d4cae609f3074fb1ac46c172bf4a"
}
Frame {
msec: 6384
- hash: "93664c87c8dcfadc0345f646b2508625"
+ hash: "09b76db3e4a95666ba9c37dd89996fa3"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.0.png
deleted file mode 100644
index f7018fd..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png
new file mode 100644
index 0000000..75a6c49
--- /dev/null
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
index b293d70..3365d40 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
@@ -6,334 +6,130 @@ VisualTest {
}
Frame {
msec: 16
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ image: "usingRepeater.0.png"
}
Frame {
msec: 32
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 48
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 64
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 80
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 96
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 112
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 128
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 144
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 160
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 176
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 192
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 208
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 224
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 240
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 256
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "1a396cf01a6c31155609532654653599"
}
Frame {
msec: 272
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 288
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 304
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 320
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 336
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 352
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 368
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 384
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 400
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 416
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 432
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 448
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 464
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 480
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 496
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
Frame {
msec: 512
- hash: "b72bfb206ae52e0e4fb8927b82d64b64"
- }
- Frame {
- msec: 528
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 544
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 560
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 576
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 592
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 608
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 624
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 640
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 656
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 672
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 688
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 704
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 720
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 736
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 752
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 768
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 784
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 800
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 816
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 832
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 848
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 864
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 880
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 896
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 912
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 928
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 944
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 960
- image: "usingRepeater.0.png"
- }
- Frame {
- msec: 976
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 992
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1008
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1024
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1040
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1056
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1072
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1088
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1104
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1120
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1136
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1152
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1168
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1184
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1200
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1216
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1232
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1248
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1264
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1280
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1296
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1312
- hash: "f2de1f70c5f242604beb4ee0251c8032"
- }
- Frame {
- msec: 1328
- hash: "f2de1f70c5f242604beb4ee0251c8032"
+ hash: "8a4565aee33d40840bda26b65b6a0d90"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml
index 8da3602..b5685d1 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml
@@ -1,13 +1,14 @@
import QtQuick 1.0
Item {
- width: 400; height: 400;
+ property string skip: "Expected to fail until QTBUG-14839 is resolved"
+ width: 120; height: 60;
property int step: 0
function tick()
{
step++;
if(step == 1){
- row1.destroy(); //Not dynamically created, so is this valid?
+ //row1.destroy(); //Not dynamically created, so is this valid?
}else if(step == 2){
r2a.destroy();
}else if(step == 3){
@@ -21,42 +22,46 @@ Item {
}else if(step == 7){
r3c.parent = row2;
}else if(step == 8){
- row3.destroy();
+ //row3.destroy();//empty now, so should have no effect//May be invalid, but was deleting the reparent items at one point
}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{properties:"x"}}
- Repeater{
- id: repeater
- model: 0;
- delegate: Component{ Rectangle { color: "yellow"; width:20; height:20;}}
+ //Tests base positioner functionality, so don't need them all.
+ Column{
+ move: Transition{NumberAnimation{properties:"y"}}
+ Row{
+ id: row1
+ height: childrenRect.height
+ 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{
+ id: row2
+ height: childrenRect.height
+ move: Transition{NumberAnimation{properties:"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{properties:"x"}}
+ id: row3
+ height: childrenRect.height
+ 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"}
}
- 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{properties:"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;
+ interval: 250;
running: true;
repeat: true;
onTriggered: tick();
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml
index c318a99..c236b6a 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml
@@ -1,7 +1,7 @@
import QtQuick 1.0
Item{
- width: 200; height: 600
+ width: 40; height: 320
Column{
Rectangle{color:"Red"; width:40; height:40;}
Repeater{
@@ -11,5 +11,6 @@ Item{
}
Rectangle{color:"Blue"; width:40; height:40;}
}
- Timer{ interval: 500; running: true; onTriggered: rep.model=6;}
+ Timer{ interval: 250; running: true; onTriggered: rep.model=6;}
+ Timer{ interval: 500; running: true; onTriggered: Qt.quit();}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png
deleted file mode 100644
index 21b6afb..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png
deleted file mode 100644
index bb8a02b..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png
deleted file mode 100644